Compare commits

...
70 Commits
Author SHA1 Message Date
Mike Taves 580ec77e4a ReadTheDocs: fix branch ref, improve skipping pattern [ci skip] 2023-01-25 22:59:17 +13:00
Mike Taves aa1afbdeb7 ReadTheDocs: update output directory for artefacts, other updates 2023-01-25 16:08:33 +13:00
Mike Taves 096fcd733b Implement ReadTheDocs for 8.1, disable other CI workflows (#3556) 2023-01-13 23:02:19 +13:00
Kristian Evers 3f72fa4a9d Disable website build on 8.1 branch 2021-11-01 18:18:36 +01:00
Kristian Evers 4ce2c8b15e Merge pull request #2915 from OSGeo/backport-2880-to-8.1
[Backport 8.1] RFC 7: Drop Autotools, maintain CMake
2021-10-27 14:33:10 +02:00
Mike Taves 45d40553b1 RFC 7: Drop Autotools, maintain CMake (#2880) 2021-10-26 23:00:54 +00:00
Kristian Evers 40001a6c27 Merge pull request #2879 from OSGeo/backport-2878-to-8.1
[Backport 8.1] doc: clarify use of +datum option with +proj=latlon
2021-09-29 22:03:54 +02:00
Kristian Evers 9739bb3797 Merge pull request #2878 from kbevers/fix-latlon-doc
doc: clarify use of +datum option with +proj=latlon
2021-09-29 16:51:10 +00:00
Kristian Evers f3c363acb6 Merge pull request #2871 from OSGeo/backport-2865-to-8.1
[Backport 8.1] DOC: Add content for Development/Error handling page.
2021-09-27 10:09:08 +02:00
Kristian Evers d4c7584cf8 Merge pull request #2870 from OSGeo/backport-2863-to-8.1
[Backport 8.1] DOC: Refresh Development/Quickstart and remove Development/Threads
2021-09-27 09:38:29 +02:00
Kristian Evers 69c2e03497 Merge pull request #2865 from direvus/doc/2864-error-handling
DOC: Add content for Development/Error handling page.
2021-09-27 07:20:39 +00:00
Brendan Jurd e33ddabcf8 DOC: Refresh Development/Quickstart and remove Development/Threads (#2863)
* DOC: Refresh Development/Quickstart and remove Development/Threads

The document Development/Threads was severely out of date, and was
focussed on contrasting the current API with an old API that was
deprecated several years ago, and removed from the current PROJ earlier
this year.

Update Development/Quickstart to give more information about the use of
threading context, as a replacement for the content that was previously
in Threads.

Also give the example code examples/pj_obs_api_mini_demo.c a cleanup
pass to make it at least internally consistent with its own code style.

The header comments of the example code are still, much like the Threads
document, fixated on comparing proj.h against proj_api.h, which is an
interesting historical curio to be sure, but probably doesn't need to
persist here.  It might be worth cleaning this up further as a separate
exercise.

Fixes #2451
2021-09-27 07:18:25 +00:00
Joris Van den Bossche 15a619c4e5 DOC: fix the inclusion of the custom css file 2021-09-17 10:24:24 +02:00
Even Rouault a0de673b62 Merge pull request #2856 from waheedi/patch-1
update projsync command line to sync --all
2021-09-16 10:25:33 +02:00
Waheed Barghouthi 0bc84c65e0 update projsync command
I added the --all arg to the command, it seems its now a requirement, not sure if this is meant to be like this
2021-09-16 10:19:50 +02:00
Kristian Evers 8694b94a58 Merge pull request #2849 from OSGeo/backport-2848-to-8.1
[Backport 8.1] Update docs About page to pull in license text from COPYING.
2021-09-11 15:21:32 +02:00
Kristian Evers 5719526d7f Merge pull request #2848 from direvus/docs/about-license
Update docs About page to pull in license text from COPYING.
2021-09-11 11:01:54 +00:00
Even Rouault f5d3997e37 Merge pull request #2836 from OSGeo/rouault-patch-1
ortho.rst: fix typo
2021-09-02 13:58:58 +02:00
Even Rouault 1a18dace60 ortho.rst: fix typo 2021-09-02 13:58:31 +02:00
Kristian Evers 92e751b8f7 Merge pull request #2834 from OSGeo/backport-2833-to-8.1
[Backport 8.1] Doc: mentions EPSG methods that corresponds to topocentric and ortho (fixes #2832)
2021-09-01 22:34:45 +02:00
Kristian Evers 831489b72e Merge pull request #2833 from rouault/doc_topocentric_ortho_epsg_ref
Doc: mentions EPSG methods that corresponds to topocentric and ortho (fixes #2832)
2021-09-01 19:33:35 +00:00
Kristian Evers bde10ed187 Merge pull request #2828 from OSGeo/backport-2826-to-8.1
[Backport 8.1] Doc: projjson.rst: update to PROJJSON v0.3
2021-09-01 21:20:28 +02:00
Kristian Evers 40471bbac5 Update website for 8.1.1 release 2021-09-01 20:19:45 +02:00
Kristian Evers 131d5a48e7 Use correct CMake build version for 8.1.1 release 2021-08-29 16:21:03 +02:00
Even Rouault 29c349d21d Merge pull request #2826 from rouault/doc_projjson_0.3
Doc: projjson.rst: update to PROJJSON v0.3
2021-08-27 18:39:02 +00:00
Kristian Evers 827fe90d1a Fix version number of latest release in NEWS 2021-08-26 05:53:02 +02:00
Kristian Evers 3950a6ac47 Update version numbers for 8.1.1 release 2021-08-26 05:48:21 +02:00
Kristian Evers e9024b77d8 Update NEWS for 8.1.1 release 2021-08-26 05:36:53 +02:00
Kristian Evers c91bd3f9cf Update man-pages from Sphinx-docs 2021-08-26 05:18:29 +02:00
Kristian Evers 52eb54c922 Update ABI numbers for 8.1.1 release 2021-08-26 05:03:26 +02:00
Even Rouault 34707b1ed5 Merge pull request #2819 from OSGeo/backport-2818-to-8.1
[Backport 8.1] ConcatenatedOperation::fixStepsDirection(): fix bad chaining of steps…
2021-08-20 19:54:59 +02:00
Even Rouault c26bc402a4 Merge pull request #2818 from rouault/fix_2817
ConcatenatedOperation::fixStepsDirection(): fix bad chaining of steps…
2021-08-20 16:52:38 +00:00
Even Rouault ff682bff13 Merge pull request #2815 from OSGeo/backport-2814-to-8.1
[Backport 8.1] BoundCRS: accept importing/exporting in WKT2 and PROJJSON the scope/area/extent/id attributes (fixes #2813)
2021-08-19 15:47:55 +02:00
Even Rouault dff8e5df3f Merge pull request #2814 from rouault/fix_2813
BoundCRS: accept importing/exporting in WKT2 and PROJJSON the scope/area/extent/id attributes (fixes #2813)
2021-08-19 08:34:01 +00:00
Even Rouault b8ab915083 Merge pull request #2812 from OSGeo/backport-2809-to-8.1
[Backport 8.1] WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[]…
2021-08-17 10:11:05 +02:00
Even Rouault ac3b405df6 Merge pull request #2809 from rouault/preserve_proj4_crs_string_wkt2_remarks
WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[]…
2021-08-16 20:07:24 +00:00
Even Rouault 2924282425 Merge pull request #2808 from OSGeo/backport-2807-to-8.1
[Backport 8.1] 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 (fixes #2804)
2021-08-16 14:48:27 +02:00
Even Rouault fa4c5c645f Merge pull request #2807 from rouault/fix_2804
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 (fixes #2804)
2021-08-16 11:49:41 +00:00
Even Rouault 2ddf80a41b Merge pull request #2806 from OSGeo/backport-2805-to-8.1
[Backport 8.1] Implement promoteTo3D() / demoteTo2D() for DerivedGeographicCRS (fixes #2803)
2021-08-16 12:25:07 +02:00
Even Rouault bc97ca6356 Merge pull request #2805 from rouault/fix_2803
Implement promoteTo3D() / demoteTo2D() for DerivedGeographicCRS (fixes #2803)
2021-08-16 09:59:05 +00:00
Even Rouault 0d64108dc8 factory.cpp: fix latest clang -Wstring-concatenation (false positive) warning 2021-08-15 18:08:30 +02:00
Even Rouault a7ee29e57a Merge pull request #2801 from OSGeo/backport-2800-to-8.1
[Backport 8.1] Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when appropriates (fixes OSGeo/gdal#4224)
2021-08-13 21:20:39 +02:00
Even Rouault a768a013f7 Merge pull request #2800 from rouault/fix_gdal_4224
Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when appropriates (fixes OSGeo/gdal#4224)
2021-08-13 15:53:04 +00:00
Kristian Evers 0dc5cba6b8 Merge pull request #2798 from OSGeo/backport-2797-to-8.1
[Backport 8.1] Docs: Improve order of instructions for installing from source.
2021-08-12 09:41:44 +02:00
Brendan Jurd 57a64a1340 Fix order of instructions for installing from source. (#2797)
The note about running autogen.sh was previously placed below the
instructions to run configure.
2021-08-11 22:54:03 +00:00
Even Rouault 5497b10e46 Merge pull request #2796 from OSGeo/backport-2795-to-8.1
[Backport 8.1] Conversion::createUTM(): avoid integer overflow
2021-08-10 11:55:23 +02:00
Even Rouault d2b0877bd8 Merge pull request #2795 from rouault/fix_ossfuzz_36751
Conversion::createUTM(): avoid integer overflow
2021-08-10 08:48:51 +00:00
Even Rouault d8b85102bc Merge pull request #2788 from OSGeo/backport-2787-to-8.1
[Backport 8.1] GeoTIFF grid reading: perf improvements (fixes #2785)
2021-07-23 10:12:53 +02:00
Even Rouault 80dddb6752 Merge pull request #2787 from rouault/vgrid_perf_improvements
GeoTIFF grid reading: perf improvements (fixes #2785)
2021-07-23 07:17:18 +00:00
Even Rouault 3b4f53a409 Merge pull request #2786 from OSGeo/backport-2784-to-8.1
[Backport 8.1] Doc: fix links to :c:func:`proj_...` by specifying "h" as "c" domain
2021-07-22 20:18:25 +02:00
Even Rouault 618ce76ba0 Merge pull request #2784 from mwtoews/docs-fix
Doc: fix links to :c:func:`proj_...` by specifying "h" as "c" domain
2021-07-22 17:05:44 +00:00
Even Rouault d973e5a568 Merge pull request #2783 from OSGeo/backport-2782-to-8.1
[Backport 8.1] createOperations(): fix SourceTargetCRSExtentUse::NONE mode
2021-07-20 17:02:53 +02:00
Even Rouault 3126383beb Merge pull request #2782 from rouault/fix_crs_extent_use_none
createOperations(): fix SourceTargetCRSExtentUse::NONE mode
2021-07-20 09:16:36 +00:00
Even Rouault ff2d8357be Merge pull request #2781 from OSGeo/backport-2780-to-8.1
[Backport 8.1] CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target
2021-07-14 15:20:42 +02:00
Even Rouault 1cb0b8021f Merge pull request #2780 from mwtoews/nlohmann_json_interface_lib
CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target
2021-07-14 13:02:07 +00:00
Even Rouault 66f595e485 Merge pull request #2777 from OSGeo/backport-2776-to-8.1
[Backport 8.1] ortho: remove useless and invalid log trace (CID 350886, 350887)
2021-07-12 15:06:22 +02:00
Even Rouault faea5fcac1 Merge pull request #2776 from rouault/fix_coverity_350886
ortho: remove useless and invalid log trace (CID 350886, 350887)
2021-07-12 10:38:30 +00:00
Even Rouault 93e96a5e47 Merge pull request #2775 from OSGeo/backport-2774-to-8.1
[Backport 8.1] Logging: avoid some overhead when logging is not enabled (fixes #2770)
2021-07-10 13:34:59 +02:00
Even Rouault 747faf54b3 Merge pull request #2774 from rouault/fix_2770
Logging: avoid some overhead when logging is not enabled (fixes #2770)
2021-07-10 09:59:24 +00:00
Even Rouault d7752784f1 Merge pull request #2773 from OSGeo/backport-2772-to-8.1
[Backport 8.1] Database: update to EPSG v10.028
2021-07-08 17:11:44 +02:00
Even Rouault 0b32eaf1b1 Merge pull request #2772 from rouault/epsg_10_028
Database: update to EPSG v10.028
2021-07-08 13:30:27 +00:00
Even Rouault fedebd60c8 Merge pull request #2771 from OSGeo/backport-2769-to-8.1
[Backport 8.1] createOperations(): make sure to associate an extent to the transform…
2021-07-08 15:22:01 +02:00
Even Rouault 18fc6a629e Merge pull request #2769 from rouault/fix_2768
createOperations(): make sure to associate an extent to the transform…
2021-07-08 11:24:30 +00:00
Even Rouault 345900742c Merge pull request #2766 from OSGeo/backport-2764-to-8.1
[Backport 8.1] CMake: fix installation of executables on iOS
2021-07-06 08:34:24 +02:00
Even Rouault 9a19768a86 Merge pull request #2764 from SpaceIm/fix/install-exec-ios
CMake: fix installation of executables on iOS
2021-07-05 12:23:42 +00:00
Even Rouault 1e4b38675b Merge pull request #2761 from OSGeo/backport-2760-to-8.1
[Backport 8.1] test_factory.cpp: fix build, in particular on Alpine Edge (fixes #2759)
2021-07-03 14:00:33 +02:00
Even Rouault 84ce2c9a7d Merge pull request #2760 from rouault/fix_2759
test_factory.cpp: fix build, in particular on Alpine Edge (fixes #2759)
2021-07-01 22:51:51 +00:00
Kristian Evers f062ae54e6 docs: update edit on github link to 8.1 branch 2021-06-30 22:42:35 +02:00
Kristian Evers 64bb0ebdbd Make sure to publish docs from 8.1 branch 2021-06-30 22:41:24 +02:00
Kristian Evers b7935442d8 Update website for 8.1.0 release 2021-06-30 22:20:20 +02:00
113 changed files with 3900 additions and 1078 deletions
+1
View File
@@ -98,6 +98,7 @@ install_manifest.txt
# docs
/docs/.doxygen_up_to_date
/docs/build
/docs/plot/images
/latex
# m4
+52
View File
@@ -0,0 +1,52 @@
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
build:
os: "ubuntu-22.04"
tools:
python: "mambaforge-4.10"
jobs:
post_checkout:
# Cancel building pull requests when there aren't changed in the docs directory or YAML file.
# You can add any other files or directories that you'd like here as well,
# like your docs requirements file, or other files that will change your docs build.
#
# If there are no changes (git diff exits with 0) we force the command to return with 183.
# This is a special exit code on Read the Docs that will cancel the build immediately.
- |
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/8.1 -- docs/ .readthedocs.yaml;
then
exit 183;
fi
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | grep -viqP "skip ci|ci skip") || exit 183
pre_build:
- ./docs/rtd/pre_build.sh
- ./scripts/doxygen.sh
- ./docs/rtd/plot.sh
post_build:
- ./docs/rtd/post_build.sh
apt_packages:
- cmake
- ninja-build
- g++
- sqlite3
- libsqlite3-dev
- libtiff-dev
- libcurl4-openssl-dev
formats:
- pdf
- epub
conda:
environment: docs/environment.yml
sphinx:
configuration: docs/source/conf.py
fail_on_warning: true
+1 -1
View File
@@ -1,6 +1,6 @@
To cite PROJ in publications use:
PROJ contributors (2020). PROJ coordinate transformation software
PROJ contributors (2021). PROJ coordinate transformation software
library. Open Source Geospatial Foundation. URL https://proj.org/.
A BibTeX entry for LaTeX users is
+2 -2
View File
@@ -110,9 +110,9 @@ message(STATUS "Configuring PROJ:")
#PROJ version information
################################################################################
include(ProjVersion)
proj_version(MAJOR 8 MINOR 1 PATCH 0)
proj_version(MAJOR 8 MINOR 1 PATCH 1)
set(PROJ_API_VERSION "22")
set(PROJ_BUILD_VERSION "23.0.1")
set(PROJ_BUILD_VERSION "22.1.1")
################################################################################
# Build features and variants
+53
View File
@@ -1,3 +1,56 @@
8.1.1 Release Notes
-------------------
Updates
-------
o EPSG Database updated to version 10.028 (#2773)
Bug Fixes
---------
o Include algorithm header file to avoid build errors on Alpine Linux (#2769)
o CMake: fix installation of executables on iOS (#2766)
o Associate extents to transformations of CRS's that include GEOIDMODEL (#2769)
o Logging: avoid some overhead when logging is not enabled (#2775)
o ortho: remove useless and invalid log trace (#2777)
o CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target (#2781)
o reateOperations(): fix SourceTargetCRSExtentUse::NONE mode (#2783)
o GeoTIFF grid reading: perf improvements (#2788)
o Conversion::createUTM(): avoid integer overflow (#2796)
o Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN
when appropriates (#2801)
o Make sure that proj_crs_promote_to_3D returns a derived CRS (#2806)
o 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)
o WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[] (#2812)
o BoundCRS: accept importing/exporting in WKT2 and PROJJSON the
scope/area/extent/id attributes (#2815)
o 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 Release Notes
-------------------
+1 -1
View File
@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([PROJ], [8.1.0],
AC_INIT([PROJ], [8.1.1],
[https://github.com/OSGeo/PROJ/issues], proj, [https://proj.org])
AC_CONFIG_MACRO_DIR([m4])
AC_LANG(C)
+11 -3
View File
@@ -1,7 +1,7 @@
{
"$id": "https://proj.org/schemas/v0.2/projjson.schema.json",
"$id": "https://proj.org/schemas/v0.3/projjson.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Schema for PROJJSON (v0.2.1)",
"description": "Schema for PROJJSON (v0.3)",
"$comment": "This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And if changing the value of $id, change PROJJSON_CURRENT_VERSION accordingly in io.cpp",
"oneOf": [
@@ -111,12 +111,20 @@
"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" }
"transformation": { "$ref": "#/definitions/abridged_transformation" },
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "source_crs", "target_crs", "transformation" ],
"additionalProperties": false
+323 -91
View File
@@ -688,19 +688,19 @@ INSERT INTO "conversion" VALUES('EPSG','6308','Cyprus Transverse Mercator','Intr
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','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',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 "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','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',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 "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','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',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 "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','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',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 "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','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',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 "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','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',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 "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','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',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 "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');
@@ -2913,7 +2913,7 @@ INSERT INTO "conversion" VALUES('EPSG','16093','3-degree Gauss-Kruger zone 63','
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 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',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 "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');
@@ -3079,7 +3079,7 @@ INSERT INTO "conversion" VALUES('EPSG','16188','3-degree Gauss-Kruger CM 174E','
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 180','3-degree Gauss-Kruger zone 60N (code 16099) 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',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 "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');
@@ -3091,67 +3091,67 @@ INSERT INTO "conversion" VALUES('EPSG','16194','3-degree Gauss-Kruger CM 168W','
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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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');
@@ -3209,35 +3209,35 @@ INSERT INTO "conversion" VALUES('EPSG','16259','6-degree Gauss-Kruger zone 59','
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). 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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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). 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',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 "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');
@@ -3289,67 +3289,67 @@ INSERT INTO "conversion" VALUES('EPSG','16299','3-degree Gauss-Kruger zone 39','
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), or for a restricted longitude range 3-degree Gauss-Kruger zone 3N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 5N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 7N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 9N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 11N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 13N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 15N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 17N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 19N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 21N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 23N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 25N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 27N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 29N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 31N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 33N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 35N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 37N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 39N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 41N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 43N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 45N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 47N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 49N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 51N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 53N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 55N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 57N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 59N (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',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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 61N (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',-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 "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), or for a restricted longitude range 3-degree Gauss-Kruger zone 62N (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',-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 "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');
@@ -3417,23 +3417,23 @@ INSERT INTO "conversion" VALUES('EPSG','16364','3-degree Gauss-Kruger CM 12E','3
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. 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',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 "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. 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',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 "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. 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',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 "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. 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',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 "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. 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',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 "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');
@@ -3518,12 +3518,244 @@ INSERT INTO "conversion" VALUES('EPSG','16716','TM 116 SE','Used by BP for Teran
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);
+10 -10
View File
@@ -3150,10 +3150,10 @@ INSERT INTO "extent" VALUES('EPSG','4170','Japan - northern Honshu','Japan - nor
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 Islands, Ashmore and Cartier Islands.',-60.56,-8.88,105.8,164.7,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 Islands, Ashmore and Cartier Islands, Christmas Island, Cocos (Keeling) Islands, Norfolk Island. All onshore and offshore.',-60.56,-8.47,93.41,173.35,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);
@@ -3172,7 +3172,7 @@ INSERT INTO "extent" VALUES('EPSG','4192','USA - Oregon - Bend-Klamath Falls','U
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 and Macquarie - 156°E to 162°E','Australia including Lord Howe Island and Macquarie Islands - onshore and offshore between 156°E and 162°E.',-60.56,-14.08,156.0,162.01,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.55,-14.08,156.0,162.0,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);
@@ -3557,14 +3557,14 @@ INSERT INTO "extent" VALUES('EPSG','4578','Argentina - 67.5°W to 64.5°W mainla
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','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','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','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.35,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','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','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','4588','UK - London to Sheffield','United Kingdom (UK) - on or related to the Midland Mainline rail route from Sheffield to London.',51.46,53.41,-1.89,0.15,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.7,-4.3,-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);
@@ -3582,7 +3582,7 @@ INSERT INTO "extent" VALUES('EPSG','4603','Spain - Balearic Islands - Menorca','
INSERT INTO "extent" VALUES('EPSG','4604','Spain - Balearic Islands - Ibiza and Formentera','Spain - Balearic Islands - Ibiza and Formentera - onshore.',38.59,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,-9.0,2.01,0);
INSERT INTO "extent" VALUES('EPSG','4607','UK - Glasgow to Kilmarnock','UK - on or related to the rail route from Glasgow via Barrhead to Kilmarnock and the branch to East Kilbride.',55.55,55.95,-4.65,-4.05,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.21,-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);
@@ -3591,8 +3591,8 @@ INSERT INTO "extent" VALUES('EPSG','4612','Canada - Newfoundland','Canada - Newf
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.0,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','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.9,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.0,-141.01,-50.0,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','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.2,-3.55,-1.95,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.2,-3.55,-1.95,0);
+2 -2
View File
@@ -9,8 +9,8 @@
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1);
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 1);
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.027');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2021-06-17');
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.028');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2021-07-07');
-- The value of ${PROJ_VERSION} is substituted at build time by the actual
-- value.
+232
View File
@@ -7663,10 +7663,242 @@ INSERT INTO "projected_crs" VALUES('EPSG','21149','Batavia / UTM zone 49S',NULL,
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);
+16
View File
@@ -0,0 +1,16 @@
name: proj
channels:
- conda-forge
dependencies:
- descartes
- doxygen = 1.9.1
- geojson
- matplotlib
- shapely < 1.8
- pip
- pip:
- breathe
- pybtex
- sphinx-rtd-theme
- sphinxcontrib-bibtex
- sphinxcontrib-spelling
-86
View File
@@ -1,86 +0,0 @@
name: proj
channels:
- defaults
dependencies:
- blas=1.0=mkl
- bzip2=1.0.6=h1de35cc_5
- ca-certificates=2018.03.07=0
- cairo=1.14.12=hc4e6be7_4
- certifi=2018.8.24=py37_1
- click=6.7=py37_0
- click-plugins=1.0.3=py37_1
- cligj=0.4.0=py37_1
- curl=7.61.0=ha441bb4_0
- cycler=0.10.0=py37_0
- descartes=1.1.0=py37_0
- expat=2.2.6=h0a44026_0
- fiona=1.7.12=py37h0dff353_0
- fontconfig=2.13.0=h5d5b041_1
- freetype=2.9.1=hb4e5f40_0
- freexl=1.0.5=h1de35cc_0
- gdal=2.2.4=py37h6440ff4_1
- geos=3.6.2=h5470d99_2
- gettext=0.19.8.1=h15daf44_3
- giflib=5.1.4=h1de35cc_1
- glib=2.56.2=hd9629dc_0
- hdf4=4.2.13=h39711bb_2
- hdf5=1.10.2=hfa1e0ec_1
- icu=58.2=h4b95b61_1
- intel-openmp=2019.0=118
- jpeg=9b=he5867d9_2
- json-c=0.13.1=h3efe00b_0
- kealib=1.4.7=h40e48e4_6
- kiwisolver=1.0.1=py37h0a44026_0
- krb5=1.16.1=h24a3359_6
- libboost=1.67.0=hebc422b_4
- libcurl=7.61.0=hf30b1f0_0
- libcxx=4.0.1=h579ed51_0
- libcxxabi=4.0.1=hebd6815_0
- libdap4=3.19.1=h3d3e54a_0
- libedit=3.1.20170329=hb402a30_2
- libffi=3.2.1=h475c297_4
- libgdal=2.2.4=h7b1ea53_1
- libgfortran=3.0.1=h93005f0_2
- libiconv=1.15=hdd342a3_7
- libkml=1.3.0=hbe12b63_4
- libnetcdf=4.6.1=h4e6abe9_1
- libpng=1.6.34=he12f830_0
- libpq=10.5=hf30b1f0_0
- libspatialite=4.3.0a=ha12ebda_19
- libssh2=1.8.0=h322a93b_4
- libtiff=4.0.9=hcb84e12_2
- libuuid=1.0.3=h6bb4b03_2
- libxml2=2.9.8=hab757c2_1
- matplotlib=2.2.3=py37h54f8f79_0
- mkl=2019.0=118
- mkl_fft=1.0.4=py37h5d10147_1
- mkl_random=1.0.1=py37h5d10147_1
- munch=2.3.2=py37_0
- ncurses=6.1=h0a44026_0
- numpy=1.15.1=py37h6a91979_0
- numpy-base=1.15.1=py37h8a80b8c_0
- openjpeg=2.3.0=hb95cd4c_1
- openssl=1.0.2p=h1de35cc_0
- pcre=8.42=h378b8a2_0
- pip=10.0.1=py37_0
- pixman=0.34.0=hca0a616_3
- poppler=0.65.0=ha097c24_1
- poppler-data=0.4.9=0
- proj4=5.0.1=h1de35cc_0
- pyparsing=2.2.0=py37_1
- python=3.7.0=hc167b69_0
- python-dateutil=2.7.3=py37_0
- pytz=2018.5=py37_0
- readline=7.0=h1de35cc_5
- setuptools=40.2.0=py37_0
- shapely=1.6.4=py37h20de77a_0
- six=1.11.0=py37_1
- sqlite=3.24.0=ha441bb4_0
- tk=8.6.8=ha441bb4_0
- tornado=5.1=py37h1de35cc_0
- wheel=0.31.1=py37_0
- xerces-c=3.2.1=h44e365a_0
- xz=5.2.4=h1de35cc_4
- zlib=1.2.11=hf3cbc9b_2
prefix: /usr/local/miniconda3/envs/proj
Regular → Executable
+91 -54
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
'''
Plot map data in different projections supported by PROJ.4
Plot map data in different projections supported by PROJ.
Call with:
@@ -41,30 +42,28 @@ or "line". The rest of the inputs are fairly free form.
Change PROJ to path on your local system before running the script.
'''
from __future__ import print_function
from __future__ import division
import argparse
import os
import os.path
import shutil
import sys
import json
import subprocess
import functools
from pathlib import Path
import geojson
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import fiona
from shapely.geometry import Polygon
from shapely.geometry import MultiPolygon
from shapely.geometry import MultiPolygon, Polygon, box as Box
from shapely.geometry import shape
from shapely.ops import transform
from descartes import PolygonPatch
PROJ_COMMAND = os.environ.get('PROJ_EXE', '../../src/proj')
if not os.path.exists(PROJ_COMMAND):
PROJ = shutil.which(PROJ_COMMAND)
PROJ = shutil.which('proj')
if PROJ is None:
raise ValueError("specify PROJ_EXE or modify PATH to find proj")
else:
PROJ = PROJ_COMMAND
PROJ_LIB = os.environ.get('PROJ_LIB', '../../data')
@@ -240,31 +239,46 @@ def resample_polygon(polygon):
return Polygon(ext, rings)
def plot_with_interruptions(axes, x, y, delta_cut=1e100, **kwargs):
"""
Plot x/y with proper splitting for interrupted projections.
"""
_x = np.atleast_1d(x)
_y = np.atleast_1d(y)
dx = np.nan_to_num(_x[1: ]) - np.nan_to_num(_x[0: -1])
dy = np.nan_to_num(_y[1: ]) - np.nan_to_num(_y[0: -1])
split, = ((np.abs(dx) > delta_cut) | (np.abs(dy) > delta_cut)).nonzero()
split = np.append(split, _x.size - 1)
split += 1
last_part = 0
for part in split:
axes.plot(x[last_part: part],
y[last_part: part],
**kwargs)
last_part = part
def plotproj(plotdef, data, outdir):
'''
Plot map.
'''
axes = plt.axes()
bounds = (plotdef['lonmin'], plotdef['latmin'], plotdef['lonmax'], plotdef['latmax'])
for geom in data.filter(bbox=bounds):
temp_pol = shape(geom['geometry'])
box = Polygon([
(plotdef['lonmin'], plotdef['latmin']),
(plotdef['lonmin'], plotdef['latmax']),
(plotdef['lonmax'], plotdef['latmax']),
(plotdef['lonmax'], plotdef['latmin']),
])
try:
temp_pol = temp_pol.intersection(box)
except Exception as e:
box = Box(
plotdef['lonmin'], plotdef['latmin'],
plotdef['lonmax'], plotdef['latmax'])
for feat in data["features"]:
geom = shape(feat["geometry"])
if not geom.intersects(box):
continue
temp_pol = geom.intersection(box)
if plotdef['type'] == 'poly':
if isinstance(temp_pol, MultiPolygon):
polys = [resample_polygon(polygon) for polygon in temp_pol]
polys = [resample_polygon(polygon) for polygon in temp_pol.geoms]
pol = MultiPolygon(polys)
else:
pol = resample_polygon(temp_pol)
@@ -282,7 +296,8 @@ def plotproj(plotdef, data, outdir):
pass
else:
x, y = proj_geom.xy
axes.plot(x, y, color=COLOR_COAST, linewidth=0.5)
plot_with_interruptions(axes, x, y, color=COLOR_COAST, linewidth=0.5,
delta_cut=plotdef.get('delta_cut', 1e100))
# Plot frame
frame = [
@@ -293,7 +308,8 @@ def plotproj(plotdef, data, outdir):
line = project(line, plotdef['projstring'])
x = line[:, 0]
y = line[:, 1]
axes.plot(x, y, '-k')
plot_with_interruptions(axes, x, y, color='black', linestyle='-',
delta_cut=plotdef.get('delta_cut', 1e6))
graticule = build_graticule(
plotdef['lonmin'],
@@ -307,7 +323,28 @@ def plotproj(plotdef, data, outdir):
feature = project(feature, plotdef['projstring'])
x = feature[:, 0]
y = feature[:, 1]
axes.plot(x, y, color=COLOR_GRAT, linewidth=0.4)
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
delta_cut=plotdef.get('delta_cut', 1e6))
# Plot interrupted boundaries if necessary
interrupted_lines = []
if 'top_interrupted_lons' in plotdef:
for lon in plotdef['top_interrupted_lons']:
for delta in [-0.0001, 0.0001]:
merid = meridian(lon + delta, 0.0, plotdef['latmax'])
interrupted_lines.append(project(merid, plotdef['projstring']))
if 'bottom_interrupted_lons' in plotdef:
for lon in plotdef['bottom_interrupted_lons']:
for delta in [-0.0001, 0.0001]:
merid = meridian(lon + delta, plotdef['latmin'], 0)
interrupted_lines.append(project(merid, plotdef['projstring']))
for line in interrupted_lines:
x = line[:, 0]
y = line[:, 1]
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
delta_cut=plotdef.get('delta_cut', 1e100))
# Switch off the axis lines...
plt.axis('off')
@@ -326,9 +363,12 @@ def plotproj(plotdef, data, outdir):
# Make sure the plot is not stretched
axes.set_aspect('equal')
if not os.path.exists(outdir):
os.makedirs(outdir)
plt.savefig(outdir + '/' + plotdef['filename'],
outdir = Path(outdir)
if not outdir.exists():
outdir.mkdir(parents=True)
if not outdir.is_dir():
raise OSError("outdir is not a directory")
plt.savefig(outdir / plotdef['filename'],
dpi=400,
bbox_inches='tight')
@@ -338,36 +378,22 @@ def plotproj(plotdef, data, outdir):
plt.close()
def main():
def main(plotdefs, outdir, plots=[]):
'''
Main function of plotting script.
Parses json-file with plot setups and runs the plotting
for each plot setup.
'''
plotdefs = json.loads(Path(plotdefs).read_text())
data = {
('line', 'low'): fiona.open(LINE_LOW),
('line', 'med'): fiona.open(LINE_MED),
('poly', 'low'): fiona.open(POLY_LOW),
('poly', 'med'): fiona.open(POLY_MED),
('line', 'low'): geojson.loads(Path(LINE_LOW).read_text()),
('line', 'med'): geojson.loads(Path(LINE_MED).read_text()),
('poly', 'low'): geojson.loads(Path(POLY_LOW).read_text()),
('poly', 'med'): geojson.loads(Path(POLY_MED).read_text()),
}
if os.path.exists(sys.argv[1]):
# first argument is the JSON plot definition setup file
with open(sys.argv[1]) as plotsetup:
plotdefs = json.load(plotsetup)
else:
raise ValueError('No plot definition file entered')
plots = []
# second argument is the output dir
outdir = sys.argv[2]
# subsecond arguments are (optional) names of plot in plotdef.json
if len(sys.argv) > 3:
plots = sys.argv[3:len(sys.argv)]
for i, plotdef in enumerate(plotdefs):
if plots != [] and plotdef['name'] not in plots:
continue
@@ -379,9 +405,20 @@ def main():
plotproj(plotdef, data[(plotdef['type'], plotdef['res'])], outdir)
for key in data:
data[key].close()
if __name__ == "__main__":
sys.exit(main())
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
'plotdefs',
help='A JSON file with setup for each auto-generated plot')
parser.add_argument(
'outdir',
help='Directory to put the plots in.')
parser.add_argument(
'plots', nargs='*',
help='A list of plot names within the plotdefs file. '
'More than one plotname can be given at once.')
args = parser.parse_args()
sys.exit(main(**vars(args)))
-2
View File
@@ -1,2 +0,0 @@
python3 plot.py plotdefs.json images/
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
set -e
export PATH="$HOME/.local/bin:$PATH"
export PROJ_LIB="$HOME/.local/share/proj"
cd docs/plot
python plot.py plotdefs.json images
cd ../..
mkdir -p docs/source/operations/projections/images/
cp -r docs/plot/images/* docs/source/operations/projections/images/
+16
View File
@@ -0,0 +1,16 @@
#!/bin/sh
set -e
# https://github.com/readthedocs/readthedocs.org/pull/9888
READTHEDOCS_OUTPUT="_readthedocs"
find ${READTHEDOCS_OUTPUT} -type d
READTHEDOCS_OUTPUT_HTML="${READTHEDOCS_OUTPUT}/html"
# Undoes the hack done in scripts/doxygen.sh
sed "s/io::Convention_/io::Convention/g" < ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html | sed "s/>Convention_/>Convention/g" | sed "s/_WKT2/WKT2/g" | sed "s/_WKT1/WKT1/g" > ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html.tmp
mv ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html.tmp ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html
# Copy JSON schemas for public consumption
READTHEDOCS_OUTPUT_SCHEMAS="${READTHEDOCS_OUTPUT_HTML}/schemas"
cp -r schemas ${READTHEDOCS_OUTPUT_SCHEMAS}
cp ./data/triangulation.schema.json ${READTHEDOCS_OUTPUT_SCHEMAS}
+9
View File
@@ -0,0 +1,9 @@
#!/bin/sh
set -e
mkdir build
cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=$HOME/.local ..
ninja install
+4 -21
View File
@@ -22,25 +22,8 @@ License
PROJ uses the MIT license. The software was initially released by the USGS in
the public domain. When Frank Warmerdam took over the development of PROJ it
was moved under the MIT license. The license is as follows:
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.
was moved under the MIT license. The full text of the license follows, and can
also be found in the file ``COPYING``, at the top level of the source
distribution package.
.. literalinclude:: ../../COPYING
+1 -1
View File
@@ -29,7 +29,7 @@ by :c:func:`proj_create`, provided it expresses a coordinate operation
uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match.
- a OGC URN combining references for concatenated operations
(e.g. "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618")
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.2/projjson.schema.json
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.3/projjson.schema.json
.. versionadded:: 8.0.0
+1 -1
View File
@@ -35,7 +35,7 @@ Synopsis
(*added in 6.2*)
- a OGC URN combining references for concatenated operations
(e.g. "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618")
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.2/projjson.schema.json (*added in 6.2*)
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.3/projjson.schema.json (*added in 6.2*)
- a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (*added in 7.1*)
.. versionadded:: 6.0.0
+1 -1
View File
@@ -55,7 +55,7 @@ Synopsis
(*added in 6.2*)
- a OGC URN combining references for concatenated operations
(e.g. "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618")
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.2/projjson.schema.json (*added in 6.2*)
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.3/projjson.schema.json (*added in 6.2*)
- a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (*added in 7.1*)
{object_reference} is a filename preceded by the '@' character. The
+1
View File
@@ -17,3 +17,4 @@ the project.
rfc-4
rfc-5
rfc-6
rfc-7
+135
View File
@@ -0,0 +1,135 @@
.. _rfc7:
====================================================================
PROJ RFC 7: Drop Autotools, maintain CMake
====================================================================
:Author: Mike Taves
:Contact: mwtoews@gmail.com
:Status: Adopted
:Implementation target: PROJ 9.0
:Last Updated: 2021-10-27
Summary
-------------------------------------------------------------------------------
This RFC proposes to drop Autotools for PROJ 9.0, and to maintain CMake
for build automation, testing and packaging. This will reduce the overall
maintenance for PROJ and will enable the library to be integrated into other
projects that use CMake.
Background
-------------------------------------------------------------------------------
Here is a short timeline of the build tools used for PROJ:
- Throughout the mid-1990s, Gerald Evenden maintained a Unix build system with
a few scripts (some derived from Autoconf), and Makefile templates.
- In 2000, Frank Warmerdam wrote Autoconf and Automake configurations for
PROJ 4.4.0.
- This was followed by a NMake configuration to build PROJ 4.4.2 for Windows.
- In 2014, a CMake build setup was introduced by Howard Butler for
PROJ 4.9.0RC1. The CMake configuration was improved for the 4.9.1 release,
but not considered at feature parity with the Autotools builds at the time.
- The NMake build setup was removed for PROJ 6.0.0, as its functionality had
been replaced by CMake.
Motivation
-------------------------------------------------------------------------------
The primary motivation in removing Autotools is to reduce the burden of
maintaining multiple build configurations, which requires developers to be
familiar with different tools and configuration files. There are several other
benefits in maintaining a single build system:
- Remove extra configuration and m4 macro files from source repository,
- Simplify scripts used for running tests for CI services (GitHub Actions,
TravisCI),
- Reduce compilation time (and carbon footprint) used for testing on CI
services,
- Ease development effort, particularly with new contributors.
Why drop Autotools?
-------------------------------------------------------------------------------
The GNU Build System or Autotools consist of a suite of tools including
Autoconf and Automake, which can be used to build software on Unix-like
systems. These tools are not cross-platform, and do not naively integrate
with development environments on Microsoft Windows. Furthermore, the existing
PROJ Autotools builds do not install the CMake configuration files required to
find PROJ from other projects that use CMake
(`#2546 <https://github.com/OSGeo/PROJ/issues/2546>`_).
Why use CMake?
-------------------------------------------------------------------------------
CMake is an open source cross-platform tool for build automation, testing and
packaging of software. It does not directly compile the software, but manages
the build process using generators, including Unix Makefiles and Ninja among
other command-based and IDE tools. The CMake software has been under active
development since its origins in 2000. The CMake language is carefully
developed with backwards-compatible policies that aim to provide consistent
behaviour across different versions. CMake is currently the preferred build
tool for PROJ for the following reasons:
- It has existed in the PROJ code base since 2014, and is familiar to active
PROJ contributors,
- It can install configuration files that can be used by other software that
use CMake to find PROJ for linking via ``find_package()``,
- CMake configurations are used in 3rd-party binary packages of PROJ,
including conda-forge and vcpkg,
- It can be used to build PROJ on all major operating systems and compiler
combinations (where compatible),
- It has integration with modern IDEs and tools, including
Microsoft Visual Studio and Qt Creator.
Why not CMake?
-------------------------------------------------------------------------------
Other modern cross-platform build systems exist, including Meson and Bazel,
which have many advantages over CMake. However, they are currently not widely
used by active PROJ contributors. This RFC should not restrict future build
system configurations being introduced to PROJ, if they are proven to have
advantages to CMake over time.
Potential impacts
-------------------------------------------------------------------------------
Binary packagers that currently rely on Autotools would obviously need to
transition building and testing PROJ with CMake. Issues related to
multiarch builds of PROJ may become apparent, which can be patched and/or
reported to PROJ developers. One feature of Autotools is that both static and
dynamic (shared) libraries are built, which packagers may distribute. This
feature is currently not set-up for PROJ, as it would need to be configured
and built twice.
End-users that use binary packages of PROJ should not be impacted. PROJ should
be discoverable via both pkg-config and CMake's ``find_package()``.
Other projects that use Autotools will continue to work as expected,
linking statically or dynamically to PROJ built by CMake.
Transition plan
-------------------------------------------------------------------------------
If this proposal is approved, the following tasks should be completed:
- Rewrite CI tests to only use CMake for packaging, building, testing,
installation and post-install tests,
- Remove files only used by Autotools, also update ``.gitignore``,
- Update documentation and ``HOWTORELEASE`` notes.
Related issues will be tracked on GitHub with a tag
`RFC7: Autotools→CMake <https://github.com/OSGeo/PROJ/labels/RFC7%3A%20Autotools%E2%86%92CMake>`_.
Adoption status
-------------------------------------------------------------------------------
The RFC was adopted on 2021-10-26 with +1's from the following PSC members
* Kristian Evers
* Even Rouault
* Howard Butler
* Thomas Knudsen
* Kurt Schwehr
* Charles Karney
* Thomas Knudsen
+18 -17
View File
@@ -14,7 +14,6 @@
import sys
import os
import datetime
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
@@ -70,29 +69,25 @@ project = 'PROJ'
# See CITATION file
title = 'PROJ coordinate transformation software library'
author = 'PROJ contributors'
now = datetime.datetime.now()
copyright = u'1983-{0}'.format(now.year)
copyright = u'1983-2021'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
version = '8.1.0'
data_version = '1.5'
# use same |release| as |version|
release = version
version = '8.1'
release = '8.1.1'
data_version = '1.7'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# language = 'en'
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
today = 'September 2021'
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
@@ -196,16 +191,16 @@ html_favicon = '../images/favicon.png'
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
htm_css_files = [
'theme_overrides.css', # override wide tables in RTD theme
]
html_context = {
'display_github': True,
'theme_vcs_pageview_mode': 'edit',
'github_user': 'OSGeo',
'github_repo': 'PROJ',
# TODO: edit when switching active branch
'github_version': '/8.0/docs/source/',
'css_files': [
'_static/theme_overrides.css', # override wide tables in RTD theme
],
'github_version': '/8.1/docs/source/',
}
# Add any extra paths that contain custom files (such as robots.txt or
@@ -278,6 +273,8 @@ preamble = r"""
\ifdefined\DeclareUnicodeCharacter
\DeclareUnicodeCharacter{2032}{$'$}% prime
\fi
\usepackage[notbib]{tocbibind}
"""
latex_elements = {
@@ -289,7 +286,8 @@ latex_elements = {
# Additional stuff for the LaTeX preamble.
'preamble': preamble,
'inputenc':'\\usepackage[utf8]{inputenc}'
'inputenc': r'\usepackage[utf8]{inputenc}',
'makeindex': r'\usepackage[columns=1]{idxlayout}\makeindex',
# Latex figure (float) alignment
#'figure_align': 'htbp',
@@ -411,6 +409,9 @@ texinfo_documents = [
breathe_projects = {
"doxygen_api":"../build/xml/",
}
breathe_domain_by_extension = {
"h" : "c",
}
import redirects
redirect_files = redirects.gather_redirects()
+58
View File
@@ -4,4 +4,62 @@
Error handling
================================================================================
PROJ maintains an internal error state, which is local to a
:c:type:`PJ_CONTEXT` thread context.
See :doc:`quickstart` for more information about how to create and use a thread
context object.
If you receive an abnormal return from a PROJ API function (e.g. a NULL
pointer) you may wish to discover more information about the error.
In this case you can make a call to :c:func:`proj_context_errno`, passing in
your thread context. This will return an integer error code.
If the error code is zero, the last PROJ operation was deemed successful and no
error has been detected.
If the error code is non-zero, an error has been detected. You can pass your
thread context together with this error code to
:c:func:`proj_context_errno_string` to retrieve a string describing the error
condition.
A basic example showing how a C program might catch and report errors follows:
.. code-block:: c
:caption: errorhandling.c
:linenos:
#include <stdio.h>
#include <proj.h>
int main (void) {
PJ_CONTEXT *c;
PJ *p;
int errno;
const char *errstr;
c = proj_context_create();
p = proj_create_crs_to_crs(c, "EPSG:4326", "EPSG:3857", NULL);
if (p == 0) {
/* Something is wrong, let's try to get details ... */
errno = proj_context_errno(c);
if (errno == 0) {
/* This should be impossible. */
fprintf(stderr, "Failed to create transformation, reason unknown.\n");
} else {
errstr = proj_context_errno_string(c, errno);
fprintf(stderr, "Failed to create transformation: %s.\n", errstr);
}
proj_context_destroy(c);
return 1;
}
/* transformation object is valid, do work ... */
proj_destroy(p);
proj_context_destroy(c);
return 0;
}
-1
View File
@@ -14,7 +14,6 @@ PROJ project or using the library in their own software.
quickstart
transformations
errorhandling
threads
reference/index
cmake
bindings
+104 -62
View File
@@ -28,10 +28,9 @@ See the :doc:`reference for more info on data types <reference/datatypes>`.
:lines: 43-46
:dedent: 4
For use in multi-threaded programs the :c:type:`PJ_CONTEXT` threading-context is used.
In this particular example it is not needed, but for the sake of completeness
it created here. The section on :doc:`threads <threads>` discusses
this in detail.
For use in multi-threaded programs the :c:type:`PJ_CONTEXT` threading-context
is used. In this particular example it is not needed, but for the sake of
completeness we demonstrate its use here.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
@@ -39,13 +38,38 @@ this in detail.
:dedent: 4
Next we create the :c:type:`PJ` transformation object ``P`` with the function
:c:func:`proj_create_crs_to_crs`. :c:func:`proj_create_crs_to_crs` takes the threading context ``C``
created above, a string that describes the source coordinate reference system (CRS),
a string that describes the target CRS and an optional description of the area of
use.
The strings for the source or target CRS may be PROJ strings (``+proj=longlat +datum=WGS84``),
CRS identified by their code (``EPSG:4326`` or ``urn:ogc:def:crs:EPSG::4326``) or
by a well-known text (WKT) string:
:c:func:`proj_create_crs_to_crs`.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 52-60
:dedent: 4
Here we have set up a transformation from geographic coordinates to UTM zone
32N.
:c:func:`proj_create_crs_to_crs` takes as its arguments:
- the threading context ``C`` created above,
- a string that describes the source coordinate reference system (CRS),
- a string that describes the target CRS and
- an optional description of the area of use.
It is recommended to create one threading context per thread used by the
program. This ensures that all :c:type:`PJ` objects created in the same
context will be sharing resources such as error-numbers and loaded grids.
If you are sure that ``P`` will only be used by a single program thread, you
may pass ``NULL`` for the threading context. This will assign the default
thread context to ``P``.
The strings for the source and target CRS may be any of:
- PROJ strings, e.g. ``+proj=longlat +datum=WGS84 +type=crs``,
- CRS identified by their code, e.g. ``EPSG:4326`` or
``urn:ogc:def:crs:EPSG::4326``, or
- a well-known text (WKT) string, e.g.:
::
GEOGCRS["WGS 84",
@@ -67,89 +91,107 @@ by a well-known text (WKT) string:
BBOX[-90,-180,90,180]],
ID["EPSG",4326]]
The use of PROJ strings to describe a CRS is considered as legacy (one of the
main weakness of PROJ strings is their inability to describe a geodetic datum,
other than the few ones hardcoded in the ``+datum`` parameter).
Here we transform from geographic coordinates to UTM zone 32N.
It is recommended to create one threading-context per thread used by the program.
This ensures that all :c:type:`PJ` objects created in the same context will be
sharing resources such as error-numbers and loaded grids.
In case the creation of the :c:type:`PJ` object fails an error message is
displayed and the program returns. See :doc:`errorhandling` for further
details.
.. warning::
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 52-60
:dedent: 4
The use of PROJ strings to describe a CRS is not recommended. One of the
main weaknesses of PROJ strings is their inability to describe a geodetic
datum, other than the few ones hardcoded in the ``+datum`` parameter.
:c:func:`proj_create_crs_to_crs` creates a transformation object, which accepts
coordinates expressed in the units and axis order of the definition of the
source CRS, and return transformed coordinates in the units and axis order of
the definition of the target CRS.
For almost most geographic CRS, the units will be in most cases degrees (in
rare cases, such as EPSG:4807 / NTF (Paris), this can be grads). For geographic
CRS defined by the EPSG authority, the order of coordinates is latitude first,
longitude second. When using a PROJ string, on contrary the order will be
longitude first, latitude second.
For projected CRS, the units may vary (metre, us-foot, etc..). For projected
CRS defined by the EPSG authority, and with EAST / NORTH directions, the order
might be easting first, northing second, or the reverse. When using a PROJ string,
the order will be easting first, northing second, except if the ``+axis``
parameter modifies it.
:c:func:`proj_create_crs_to_crs` will return a pointer to a :c:type:`PJ`
object, or a null pointer in the case of an error. The details of the error
can be retrieved using :c:func:`proj_context_errno`. See :doc:`errorhandling`
for further details.
If for the needs of your software, you want
a uniform axis order (and thus do not care about axis order mandated by the
authority defining the CRS), the :c:func:`proj_normalize_for_visualization`
function can be used to modify the PJ* object returned by
:c:func:`proj_create_crs_to_crs` so that it accepts as input and returns as
output coordinates using the traditional GIS order, that is longitude, latitude
(followed by elevation, time) for geographic CRS and easting, northing for most
projected CRS.
Now that we have a normalized transformation object in ``P``, we can use it
with :c:func:`proj_trans` to transform coordinates from the source CRS to the
target CRS, but first we will discuss the interpretation of coordinates.
By default, a :c:type:`PJ` transformation object accepts coordinates expressed
in the units and axis order of the source CRS, and returns transformed
coordinates in the units and axis order of the target CRS.
For most geographic CRS, the units will be in degrees. In rare cases, such as
EPSG:4807 / NTF (Paris), this can be grads. For geographic CRS defined by the
EPSG authority, the order of coordinates is latitude first, longitude second.
When using a PROJ string, the order is the reverse; longitude first, latitude
second.
For projected CRS, the units may vary (metre, us-foot, etc.). For projected CRS
defined by the EPSG authority, and with EAST / NORTH directions, the order
might be easting first, northing second, or the reverse. When using a PROJ
string, the order will be easting first, northing second, except if the
``+axis`` parameter modifies it.
If you prefer to work with a uniform axis order, regardless of the axis orders
mandated by the source and target CRS, you can use the
:c:func:`proj_normalize_for_visualization` function.
:c:func:`proj_normalize_for_visualization` takes a threading context and an
existing :c:type:`PJ` object, and generates from it a new :c:type:`PJ` that
accepts as input and returns as output coordinates using the traditional GIS
order. That is, longitude followed by latitude, optionally followed by
elevation and time for geographic CRS, and easting followed by northing for
most projected CRS.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 65-71
:dedent: 4
PROJ uses its own data structures for handling coordinates. Here we use a
:c:type:`PJ_COORD` which is easily assigned with the function :c:func:`proj_coord`.
When using ``+proj=longlat``, the order of coordinates is longitude, latitude,
and values are expressed in degrees. If you used instead a EPSG geographic CRS,
like EPSG:4326 (WGS84), it would be latitude, longitude.
Next we create a :c:type:`PJ_COORD` coordinate object, using the function
:c:func:`proj_coord`.
The following example creates a coordinate for 55°N 12°E (Copenhagen).
Because we have normalized the transformation object with
:c:func:`proj_normalize_for_visualization`, the order of coordinates is
longitude followed by latitude, and the units are degrees.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 76
:dedent: 4
The coordinate defined above is transformed with :c:func:`proj_trans`. For this
a :c:type:`PJ` object, a transformation direction (either forward or inverse)
and the coordinate is needed. The transformed coordinate is returned in ``b``.
Here the forward (:c:type:`PJ_FWD`) transformation from geographic to UTM is made.
Now we are ready to transform the coordinate into UTM zone 32, using the
function :c:func:`proj_trans`.
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 79-80
:dedent: 4
The inverse transformation (UTM to geographic) is done similar to above,
this time using :c:type:`PJ_INV` as the direction.
:c:func:`proj_trans` takes as its arguments:
- a :c:type:`PJ` transformation object,
- a :c:type:`PJ_DIRECTION` direction, and
- the :c:type:`PJ_COORD` coordinate to transform.
The direction argument can be one of:
- ``PJ_FWD`` -- "forward" transformation from source CRS to target CRS.
- ``PJ_IDENT`` -- "identity", return the source coordinate unchanged.
- ``PJ_INV`` -- "inverse" transformation from target CRS to source CRS.
It returns the new transformed :c:type:`PJ_COORD` coordinate.
We can perform the transformation in reverse (from UTM zone 32 back to
geographic) as follows:
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 81-82
:lines: 82-83
:dedent: 4
Before ending the program the allocated memory needs to be released again:
Before ending the program, we need to release the memory allocated to our
objects:
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
:lines: 85-86
:lines: 86-87
:dedent: 4
A complete compilable version of the above can be seen here:
A complete compilable version of the example code can be seen below:
.. literalinclude:: ../../../examples/pj_obs_api_mini_demo.c
:language: c
@@ -52,7 +52,7 @@ paragraph for more details.
syntax "EPSG:2393+5717"),
- a OGC URN combining references for concatenated operations
(e.g. "urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618")
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.2/projjson.schema.json (*added in 6.2*)
- a PROJJSON string. The jsonschema is at https://proj.org/schemas/v0.3/projjson.schema.json (*added in 6.2*)
- a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (*added in 7.1*)
Example call:
-79
View File
@@ -1,79 +0,0 @@
.. _threads:
================================================================================
Threads
================================================================================
This page is about efforts to make PROJ thread safe.
Key Thread Safety Issues
--------------------------------------------------------------------------------
* the global pj_errno variable is shared between threads and makes it
essentially impossible to handle errors safely. Being addressed with the
introduction of the projCtx execution context.
* the datum shift using grid files uses globally shared lists of loaded grid
information. Access to this has been made safe in 4.7.0 with the introduction
of a PROJ mutex used to protect access to these memory structures (see
pj_mutex.c).
projCtx
--------------------------------------------------------------------------------
Primarily in order to avoid having pj_errno as a global variable, a "thread
context" structure has been introduced into a variation of the PROJ API for
the 4.8.0 release. The pj_init() and pj_init_plus() functions now have context
variations called pj_init_ctx() and pj_init_plus_ctx() which take a projections
context.
The projections context can be created with pj_ctx_alloc(), and there is a
global default context used when one is not provided by the application. There
is a pj_ctx\_ set of functions to create, manipulate, query, and destroy
contexts. The contexts are also used now to handle setting debugging mode, and
to hold an error reporting function for textual error and debug messages. The
API looks like:
::
projPJ pj_init_ctx( projCtx, int, char ** );
projPJ pj_init_plus_ctx( projCtx, const char * );
projCtx pj_get_default_ctx(void);
projCtx pj_get_ctx( projPJ );
void pj_set_ctx( projPJ, projCtx );
projCtx pj_ctx_alloc(void);
void pj_ctx_free( projCtx );
int pj_ctx_get_errno( projCtx );
void pj_ctx_set_errno( projCtx, int );
void pj_ctx_set_debug( projCtx, int );
void pj_ctx_set_logger( projCtx, void (*)(void *, int, const char *) );
void pj_ctx_set_app_data( projCtx, void * );
void *pj_ctx_get_app_data( projCtx );
Multithreaded applications are now expected to create a projCtx per thread
using pj_ctx_alloc(). The context's error handlers, and app data may be
modified if desired, but at the very least each context has an internal error
value accessed with pj_ctx_get_errno() as opposed to looking at pj_errno.
Note that pj_errno continues to exist, and it is set by pj_ctx_set_errno() (as
well as setting the context specific error number), but pj_errno still suffers
from the global shared problem between threads and should not be used by
multithreaded applications.
Note that pj_init_ctx(), and pj_init_plus_ctx() will assign the projCtx to the
created projPJ object. Functions like pj_transform(), pj_fwd() and pj_inv()
will use the context of the projPJ for error reporting.
src/multistresstest.c
--------------------------------------------------------------------------------
A small multi-threaded test program has been written (src/multistresstest.c)
for testing multithreaded use of PROJ. It performs a series of reprojections
to setup a table expected results, and then it does them many times in several
threads to confirm that the results are consistent. At this time this program
is not part of the builds but it can be built on linux like:
::
gcc -g multistresstest.c .libs/libproj.so -lpthread -o multistresstest
./multistresstest
+14 -5
View File
@@ -13,9 +13,8 @@ distribution of the source code and various resource file archives. See
Current Release
--------------------------------------------------------------------------------
* **2021-03-01** `proj-8.0.0.tar.gz`_ (`md5`_)
* **2021-03-01** `proj-data-1.5.tar.gz`_
* **PDF Manual** `proj.pdf`_
* **2021-09-01** `proj-8.1.1.tar.gz`_ (`md5`_)
* **2021-07-01** `proj-data-1.7.tar.gz`_
.. note::
@@ -28,6 +27,9 @@ Current Release
Past Releases
--------------------------------------------------------------------------------
* **2021-07-01** `proj-8.1.0.tar.gz`_
* **2021-05-05** `proj-8.0.1.tar.gz`_
* **2021-03-01** `proj-8.0.0.tar.gz`_
* **2021-01-01** `proj-7.2.1.tar.gz`_
* **2020-11-01** `proj-7.2.0.tar.gz`_
* **2020-09-01** `proj-7.1.1.tar.gz`_
@@ -50,6 +52,9 @@ Past Releases
* **2015-09-13** `proj-4.9.2.tar.gz`_
* **2015-03-04** `proj-4.9.1.tar.gz`_
* **2021-07-01** `proj-data-1.7.tar.gz`_
* **2021-05-05** `proj-data-1.6.tar.gz`_
* **2021-03-01** `proj-data-1.5.tar.gz`_
* **2021-01-01** `proj-data-1.4.tar.gz`_
* **2020-11-01** `proj-data-1.3.tar.gz`_
* **2020-09-01** `proj-data-1.2.tar.gz`_
@@ -76,8 +81,11 @@ Past Releases
* **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
.. _`proj-8.1.1.tar.gz`: https://download.osgeo.org/proj/proj-8.1.1.tar.gz
.. _`md5`: https://download.osgeo.org/proj/proj-8.1.1.tar.gz.md5
.. _`proj-8.1.0.tar.gz`: https://download.osgeo.org/proj/proj-8.1.0.tar.gz
.. _`proj-8.0.1.tar.gz`: https://download.osgeo.org/proj/proj-8.0.1.tar.gz
.. _`proj-8.0.0.tar.gz`: https://download.osgeo.org/proj/proj-8.0.0.tar.gz
.. _`md5`: https://download.osgeo.org/proj/proj-8.0.0.tar.gz.md5
.. _`proj-7.2.1.tar.gz`: https://download.osgeo.org/proj/proj-7.2.1.tar.gz
.. _`proj-7.2.0.tar.gz`: https://download.osgeo.org/proj/proj-7.2.0.tar.gz
.. _`proj-7.1.1.tar.gz`: https://download.osgeo.org/proj/proj-7.1.1.tar.gz
@@ -100,6 +108,8 @@ Past Releases
.. _`proj-4.9.2.tar.gz`: https://download.osgeo.org/proj/proj-4.9.2.tar.gz
.. _`proj-4.9.3.tar.gz`: https://download.osgeo.org/proj/proj-4.9.3.tar.gz
.. _`proj-data-1.7.tar.gz`: https://download.osgeo.org/proj/proj-data-1.7.tar.gz
.. _`proj-data-1.6.tar.gz`: https://download.osgeo.org/proj/proj-data-1.6.tar.gz
.. _`proj-data-1.5.tar.gz`: https://download.osgeo.org/proj/proj-data-1.5.tar.gz
.. _`proj-data-1.4.tar.gz`: https://download.osgeo.org/proj/proj-data-1.4.tar.gz
.. _`proj-data-1.3.tar.gz`: https://download.osgeo.org/proj/proj-data-1.3.tar.gz
@@ -126,4 +136,3 @@ Past Releases
.. _`proj-datumgrid-oceania-1.1.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.1.zip
.. _`proj-datumgrid-oceania-1.2.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.2.zip
.. _`proj-datumgrid-world-1.0.zip`: https://download.osgeo.org/proj/proj-datumgrid-world-1.0.zip
.. _`proj.pdf`: https://raw.githubusercontent.com/OSGeo/PROJ/gh-pages/proj.pdf
-5
View File
@@ -30,8 +30,3 @@ PROJ
You can download the source code for PROJ on the :ref:`download section<download>`
and find links to prepackaged executables in the
:ref:`installation section<install>`.
In addition to this website the PROJ documentation is also available in `PDF`_
form.
.. _`PDF`: https://raw.githubusercontent.com/OSGeo/proj.4/gh-pages/proj.pdf
+7 -7
View File
@@ -155,6 +155,12 @@ FSF's configuration procedure is used to ease installation of the PROJ system.
Follow the CMake installation guide if you are not using a UNIX-like
operating system.
If you are building from the git repository you have to first run::
./autogen.sh
which will generate a ``configure`` script that can be used in the next step.
The default destination path prefix for installed files is ``/usr/local``.
Results from the installation script will be placed into subdirectories ``bin``,
``include``, ``lib``, and ``man/man1``. If this default path prefix
@@ -169,12 +175,6 @@ If another path prefix is required, then execute::
In either case, the directory of the prefix path must exist and be writable by
the installer.
If you are building from the git repository you have to first run::
./autogen.sh
which will generate a configure script that can be used as described above.
With the data files in place we can now build and install PROJ::
make
@@ -189,7 +189,7 @@ Tests are run with::
With a successful install of PROJ we can now install data files using the
:program:`projsync` utility::
projsync --system-directory
projsync --system-directory --all
which will download all resource files currently available for PROJ. If less than
the entire collection of resource files is needed the call to :program:`projsync`
+180
View File
@@ -3,6 +3,186 @@
News
###############################################################################
8.1.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*September 1st 2021*
Updates
-------
* EPSG Database updated to version 10.028 (`#2773 <https://github.com/OSGeo/PROJ/issues/2773>`_)
Bug Fixes
---------
* Include algorithm header file to avoid build errors on Alpine Linux (`#2769 <https://github.com/OSGeo/PROJ/issues/2769>`_)
* CMake: fix installation of executables on iOS (`#2766 <https://github.com/OSGeo/PROJ/issues/2766>`_)
* Associate extents to transformations of CRS's that include GEOIDMODEL (`#2769 <https://github.com/OSGeo/PROJ/issues/2769>`_)
* Logging: avoid some overhead when logging is not enabled (`#2775 <https://github.com/OSGeo/PROJ/issues/2775>`_)
* ortho: remove useless and invalid log trace (`#2777 <https://github.com/OSGeo/PROJ/issues/2777>`_)
* CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target (`#2781 <https://github.com/OSGeo/PROJ/issues/2781>`_)
* reateOperations(): fix SourceTargetCRSExtentUse::NONE mode (`#2783 <https://github.com/OSGeo/PROJ/issues/2783>`_)
* GeoTIFF grid reading: perf improvements (`#2788 <https://github.com/OSGeo/PROJ/issues/2788>`_)
* :cpp:func:`Conversion::createUTM()`: avoid integer overflow (`#2796 <https://github.com/OSGeo/PROJ/issues/2796>`_)
* Inverse laea ellipsoidal: return ``PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN``
when appropriates (`#2801 <https://github.com/OSGeo/PROJ/issues/2801>`_)
* Make sure that :c:func:`proj_crs_promote_to_3D` returns a derived CRS (`#2806 <https://github.com/OSGeo/PROJ/issues/2806>`_)
* :cpp:func:`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 <https://github.com/OSGeo/PROJ/issues/2808>`_)
* WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[] (`#2812 <https://github.com/OSGeo/PROJ/issues/2812>`_)
* BoundCRS: accept importing/exporting in WKT2 and PROJJSON the
scope/area/extent/id attributes (`#2815 <https://github.com/OSGeo/PROJ/issues/2815>`_)
* :cpp:func:`ConcatenatedOperation::fixStepsDirection()`: fix bad chaining of steps when
inverse map projection is involved in non-final step (`#2819 <https://github.com/OSGeo/PROJ/issues/2819>`_)
8.1.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*July 1st 2021*
Updates
-------
+ **Database**
* Update to EPSG v10.027 (`#2751 <https://github.com/OSGeo/PROJ/issues/2751>`_)
* Decrease DB size by using ``WITHOUT ROWID`` tables (`#2730 <https://github.com/OSGeo/PROJ/issues/2730>`_) (#2647)
* Add a ``ANALYZE`` step during ``proj.db`` creation allowing for faster lookups (`#2729 <https://github.com/OSGeo/PROJ/issues/2729>`_)
* Added a ``PROJ.VERSION`` metadata entry (`#2646 <https://github.com/OSGeo/PROJ/issues/2646>`_)
* Added NGO48 (EPSG:4273) to ETRS89 (EPSG:4258) triangulation-based transformation (`#2554 <https://github.com/OSGeo/PROJ/issues/2554>`_)
* Additions to the norwegian NKG2020 transformation (`#2548 <https://github.com/OSGeo/PROJ/issues/2548>`_)
* ESRI projection database updated to version 12.8 (`#2717 <https://github.com/OSGeo/PROJ/issues/2717>`_)
+ **API additions**
* Added :c:func:`proj_get_geoid_models_from_database()` function that returns a list of geoid models available for a given CRS (`#2681 <https://github.com/OSGeo/PROJ/issues/2681>`_)
* Added :c:func`proj_get_celestial_body_list_from_database()` that returns a list of celestial bodies in the PROJ database (`#2667 <https://github.com/OSGeo/PROJ/issues/2667>`_)
* Added :c:func:`proj_get_celestial_body_name()` (`#2662 <https://github.com/OSGeo/PROJ/issues/2662>`_)
+ **Various improvements**
* :c:func:`proj_trans()`/:program:`cs2cs`: If two operations have the same accuracy, use the one that is contained within a larger one (`#2750 <https://github.com/OSGeo/PROJ/issues/2750>`_)
* Share SQLite database handle among all contexts (`#2738 <https://github.com/OSGeo/PROJ/issues/2738>`_)
* Added ``proj/internal/mutex.hpp`` as compat layer for mingw32 for std::mutex (`#2736 <https://github.com/OSGeo/PROJ/issues/2736>`_)
* :program:`projsync`: make it filter out files not intended for the current version (`#2725 <https://github.com/OSGeo/PROJ/issues/2725>`_)
* Improvements related to ``DerivedVerticalCRS`` using Change Unit and
Height/Depth reversal methods (`#2696 <https://github.com/OSGeo/PROJ/issues/2696>`_)
* Update internal ``nlohmann/json`` to 3.9.1, and add a CMake option to
be able to use external ``nlohmann/json`` (`#2686 <https://github.com/OSGeo/PROJ/issues/2686>`_)
* :cpp:func:`createFromUserInput()`: change name of CRS built from URN combined references to match the convention of EPSG projected CRS (`#2677 <https://github.com/OSGeo/PROJ/issues/2677>`_)
* Parse compound id with two authorities, like ESRI:103668+EPSG:5703 (`#2669 <https://github.com/OSGeo/PROJ/issues/2669>`_)
* Added :program:`projinfo` option option ``--list-crs`` (supports ``--area``) (`#2663 <https://github.com/OSGeo/PROJ/issues/2663>`_)
* Added support for hyperbolic Cassini-Soldner (`#2637 <https://github.com/OSGeo/PROJ/issues/2637>`_)
* Added capability to get SQL statements to add custom CRS in the database (`#2577 <https://github.com/OSGeo/PROJ/issues/2577>`_)
Bug fixes
---------
* Fix 'Please include winsock2.h before windows.h' warning with msys (`#2692 <https://github.com/OSGeo/PROJ/issues/2692>`_)
* Minor changes to address lint in ``geodesic.c`` (`#2752 <https://github.com/OSGeo/PROJ/issues/2752>`_)
* :cpp:func:`BoundCRS::identify()`: avoid incompatible transformation for WKT1 / TOWGS84 export (`#2747 <https://github.com/OSGeo/PROJ/issues/2747>`_)
* :c:func:`proj_create()`: do not open proj.db if string is a PROJ string, even if :c:func:`proj_context_set_autoclose_database()` has been set (`#2735 <https://github.com/OSGeo/PROJ/issues/2735>`_)
* Fix export of transformation to PROJ string in a particular situation where CompoundCRS are involved (`#2721 <https://github.com/OSGeo/PROJ/issues/2721>`_)
8.0.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*May 5th 2021*
Updates
-------
* Database: update to EPSG v10.018 (`#2636 <https://github.com/OSGeo/PROJ/issues/2636>`_)
* Add transformations for CHGeo2004, Swiss geoid model (`#2604 <https://github.com/OSGeo/PROJ/issues/2604>`_)
* Additions to the norwegian NKG2020 transformation (`#2600 <https://github.com/OSGeo/PROJ/issues/2600>`_)
Bug fixes
---------
* :c:func:`pj_vlog()`: fix buffer overflow in case of super lengthy error message (`#2693 <https://github.com/OSGeo/PROJ/issues/2693>`_)
* Revert ":c:func:`proj_create_crs_to_crs_from_pj()`: do not use PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION if area is specified" (`#2679 <https://github.com/OSGeo/PROJ/issues/2679>`_)
* UTM: error out when value of ``+zone=`` is not an integer (`#2672 <https://github.com/OSGeo/PROJ/issues/2672>`_)
* :cpp:func:`getCRSInfoList()`: make result order deterministic (by increasing auth_name,
code) (`#2661 <https://github.com/OSGeo/PROJ/issues/2661>`_)
* :cpp:func:`createOperation()`: make sure no to discard deprecated operations if the
replacement uses an unknow grid (`#2623 <https://github.com/OSGeo/PROJ/issues/2623>`_)
* Fix build on Solaris 11.4 (`#2621 <https://github.com/OSGeo/PROJ/issues/2621>`_)
* Add mapping of ESRI Equal_Area projection method to EPSG (`#2612 <https://github.com/OSGeo/PROJ/issues/2612>`_)
* Fix incorrect EPGS extent code for EPSG:7789>EPSG:4976 NKG transformation (`#2599 <https://github.com/OSGeo/PROJ/issues/2599>`_)
* fix wrong capitalization of CHENyx06_ETRS.gsb (`#2597 <https://github.com/OSGeo/PROJ/issues/2597>`_)
* :cpp:func:`createOperations()`: improve handling of vertical transforms when
when compound CRSs are used (`#2592 <https://github.com/OSGeo/PROJ/issues/2592>`_)
* :cpp:func:`CRS::promoteTo3D()`: propagate the extent from the 2D CRS (`#2589 <https://github.com/OSGeo/PROJ/issues/2589>`_)
* :cpp:func:`createFromCRSCodesWithIntermediates()`: improve performance when there is
no match (`#2583 <https://github.com/OSGeo/PROJ/issues/2583>`_)
* Fix :c:func:`proj_clone()` to work on 'meta' coordinate operation ``PJ*`` objects that
can be returned by :c:func:`proj_create_crs_to_crs()` (`#2582 <https://github.com/OSGeo/PROJ/issues/2582>`_)
* add ``PROJ_COMPUTE_VERSION``, ``PROJ_VERSION_NUMBER``,
``PROJ_AT_LEAST_VERSION`` macros (`#2581 <https://github.com/OSGeo/PROJ/issues/2581>`_)
* Make :c:func:`proj_lp_dist()` and :c:func:`proj_geod()` work on a ``PJ*`` CRS object (`#2570 <https://github.com/OSGeo/PROJ/issues/2570>`_)
* Fix gcc 11 ``-Wnonnull`` compilation warnings (`#2559 <https://github.com/OSGeo/PROJ/issues/2559>`_)
* Fix use of uninitialized memory in gie tests (`#2558 <https://github.com/OSGeo/PROJ/issues/2558>`_)
* :c:func:`createOperations()`: fix incorrect height transformation between 3D promoted RGF93 and CH1903+ (`#2555 <https://github.com/OSGeo/PROJ/issues/2555>`_)
>>>>>>> Stashed changes
8.0.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*March 1st 2021*
@@ -30,8 +30,15 @@ However, the parameters below can be used in a declarative manner when used with
.. option:: +datum=<value>
Declare the datum used with the coordinates. See ``cs2cs -ld`` for a
list of available datums.
Declare the datum used with the coordinates. Available options are:
``WGS84``, ``GGRS87``, ``NAD38``, ``NAD27``, ``potsdam``, ``carthage``,
``hermannskogel``, ``ire65``, ``nzgd49``, ``OSGB336``.
.. note::
The ``+datum`` option is primarily available to support the legacy
use of PROJ.4 strings as CRS descriptors and should in most cases
be avoided.
.. option:: +towgs84=<list>
@@ -46,7 +46,9 @@ topocentric conversion must be preceded by the :ref:`cart` conversion to
perform the initial geographic to geocentric coordinates conversion.
The formulas used come from the "Geocentric/topocentric conversions" paragraph
of :cite:`IOGP2018`
of :cite:`IOGP2018`. ``+proj=topocentric`` alone corresponds to the ``EPSG:9836``
conversion method, ``+proj=cart`` followed by ``+proj=topocentric`` corresponds
to ``EPSG:9837``.
Usage
################################################################################
@@ -37,6 +37,8 @@ around a given latitude and longitude.
ellipsoid must be forced to a sphere, for example by adding a ``+f=0``
parameter.
This projection method corresponds to ``EPSG:9840``.
Parameters
################################################################################
+3 -2
View File
@@ -13,17 +13,18 @@ the same as WKT2:2019.
PROJJSON is available as input and output of PROJ since PROJ 6.2.
The current version is 0.2.
The current version is 0.3.
Schema
------
A JSON schema of its grammar is available at
https://proj.org/schemas/v0.2/projjson.schema.json
https://proj.org/schemas/v0.3/projjson.schema.json
History
-------
* v0.3: additional properties allowed in BoundCRS object (name, scope, area, bbox, usages, remarks, id, ids)
* v0.2: addition of geoid_model in VerticalCRS object.
* v0.1: initial version for PROJ 6.2
+17 -16
View File
@@ -1,6 +1,6 @@
/*******************************************************************************
Tiny test of an evolving new API, demonstrating simple examples of
2D and 3D transformations.
Simple example code demonstrating use of the proj.h API for 2D coordinate
transformations.
The main transformation setup object is PJ, well known from the two
former proj APIs (projects.h and proj_api.h)
@@ -42,7 +42,7 @@
int main (void) {
PJ_CONTEXT *C;
PJ *P;
PJ* P_for_GIS;
PJ *norm;
PJ_COORD a, b;
/* or you may set C=PJ_DEFAULT_CTX if you are sure you will */
@@ -54,35 +54,36 @@ int main (void) {
"+proj=utm +zone=32 +datum=WGS84", /* or EPSG:32632 */
NULL);
if (0==P) {
fprintf(stderr, "Oops\n");
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 */
P_for_GIS = proj_normalize_for_visualization(C, P);
if( 0 == P_for_GIS ) {
fprintf(stderr, "Oops\n");
norm = proj_normalize_for_visualization(C, P);
if (0 == norm) {
fprintf(stderr, "Failed to normalize transformation object.\n");
return 1;
}
proj_destroy(P);
P = P_for_GIS;
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);
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);
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 */
proj_destroy(P);
proj_context_destroy(C); /* may be omitted in the single threaded case */
return 0;
}
+13
View File
@@ -173,6 +173,10 @@ class PROJ_GCC_DLL CRS : public common::ObjectUsage,
PROJ_INTERNAL virtual std::list<std::pair<CRSNNPtr, int>>
_identify(const io::AuthorityFactoryPtr &authorityFactory) const;
PROJ_INTERNAL void
setProperties(const util::PropertyMap
&properties); // throw(InvalidValueTypeException)
private:
PROJ_OPAQUE_PRIVATE_DATA
};
@@ -1006,6 +1010,11 @@ class PROJ_GCC_DLL BoundCRS final : public CRS,
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);
@@ -1168,6 +1177,10 @@ class PROJ_GCC_DLL DerivedGeographicCRS final : public GeographicCRS,
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)
+15
View File
@@ -160,6 +160,21 @@ class Cache {
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& k) {
Guard g(lock_);
const auto iter = cache_.find(k);
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)
*/
+5 -1
View File
@@ -537,7 +537,11 @@ class PROJ_GCC_DLL JSONFormatter {
// cppcheck-suppress functionStatic
PROJ_INTERNAL bool outputId() const;
PROJ_INTERNAL bool outputUsage() const;
PROJ_INTERNAL bool
outputUsage(bool calledBeforeObjectContext = false) const;
PROJ_INTERNAL static const char *PROJJSON_v0_2;
PROJ_INTERNAL static const char *PROJJSON_v0_3;
//! @endcond
+4 -4
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "CCT" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
cct \- Coordinate Conversion and Transformation
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CCT" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
cct \- Coordinate Conversion and Transformation
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
@@ -62,7 +62,7 @@ uniqueness is not guaranteed, heuristics are applied to determine the appropriat
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.2/projjson.schema.json\fP
a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.3/projjson.schema.json\fP
.UNINDENT
.sp
New in version 8.0.0.
+4 -4
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "CS2CS" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
cs2cs \- Cartographic coordinate system filter
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CS2CS" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
cs2cs \- Cartographic coordinate system filter
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
@@ -70,7 +70,7 @@ e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)":
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.2/projjson.schema.json\fP (\fIadded in 6.2\fP)
a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.3/projjson.schema.json\fP (\fIadded in 6.2\fP)
.IP \(bu 2
a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (\fIadded in 7.1\fP)
.UNINDENT
+3 -3
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "GEOD" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
geod \- Geodesic computations
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "GEOD" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
geod \- Geodesic computations
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
+3 -3
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "GIE" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
gie \- The Geospatial Integrity Investigation Environment
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "GIE" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
gie \- The Geospatial Integrity Investigation Environment
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
+3 -3
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJ" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
proj \- Cartographic projection filter
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PROJ" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
proj \- Cartographic projection filter
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
+4 -4
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJINFO" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
projinfo \- Geodetic object and coordinate operation queries
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PROJINFO" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
projinfo \- Geodetic object and coordinate operation queries
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
@@ -86,7 +86,7 @@ e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)":
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.2/projjson.schema.json\fP (\fIadded in 6.2\fP)
a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.3/projjson.schema.json\fP (\fIadded in 6.2\fP)
.IP \(bu 2
a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (\fIadded in 7.1\fP)
.UNINDENT
+3 -3
View File
@@ -1,8 +1,5 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJSYNC" "1" "Jul 1, 2021" "8.1.0" "PROJ"
.SH NAME
projsync \- Downloading tool of resource files
.
.nr rst2man-indent-level 0
.
@@ -30,6 +27,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PROJSYNC" "1" "Sep 1, 2021" "8.1.1" "PROJ"
.SH NAME
projsync \- Downloading tool of resource files
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
+997
View File
@@ -0,0 +1,997 @@
{
"$id": "https://proj.org/schemas/v0.3/projjson.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Schema for PROJJSON (v0.3)",
"$comment": "This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And if changing the value of $id, change PROJJSON_CURRENT_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" }
],
"definitions": {
"abridged_transformation": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["AbridgedTransformation"] },
"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", "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" ] },
"unit": { "$ref": "#/definitions/unit" },
"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": {},
"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": {},
"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" }
},
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"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_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",
"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
},
"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": {},
"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": {},
"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": {},
"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": {},
"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": {},
"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": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"dynamic_geodetic_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/geodetic_reference_frame" }],
"properties": {
"type": { "type": "string", "enum": ["DynamicGeodeticReferenceFrame"] },
"name": {},
"anchor": {},
"ellipsoid": {},
"prime_meridian": {},
"frame_reference_epoch": { "type": "number" },
"deformation_model": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "ellipsoid", "frame_reference_epoch" ],
"additionalProperties": false
},
"dynamic_vertical_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/vertical_reference_frame" }],
"properties": {
"type": { "type": "string", "enum": ["DynamicVerticalReferenceFrame"] },
"name": {},
"anchor": {},
"frame_reference_epoch": { "type": "number" },
"deformation_model": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"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": {},
"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": {},
"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" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"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" },
"ellipsoid": { "$ref": "#/definitions/ellipsoid" },
"prime_meridian": { "$ref": "#/definitions/prime_meridian" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "ellipsoid" ],
"additionalProperties": false
},
"id": {
"type": "object",
"properties": {
"authority": { "type": "string" },
"code": {
"oneOf": [ { "type": "string" }, { "type": "integer" } ]
}
},
"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"] }
]
}
]
},
"object_usage": {
"anyOf": [
{
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"scope": { "type": "string" },
"area": { "type": "string" },
"bbox": { "$ref": "#/definitions/bbox" },
"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": {},
"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": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name" ],
"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" }
]
},
"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": {},
"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": {},
"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": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "calendar" ],
"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": {},
"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" }
},
"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": {
"type": "object",
"properties": {
"name": { "type": "string" },
"interpolation_crs": { "$ref": "#/definitions/crs" },
"id": { "$ref": "#/definitions/id" }
},
"required" : [ "name" ],
"additionalProperties": false
},
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"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
},
"vertical_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["VerticalReferenceFrame"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name" ],
"additionalProperties": false
}
}
}
+6 -3
View File
@@ -167,8 +167,11 @@ for sectiondef in compounddef.iter('sectiondef'):
test_cppfile.write("{\n")
test_cppfile.write(" auto projCRS = proj_create_conversion_" + c_shortName + "(\n")
test_cppfile.write(" m_ctxt")
for param in params:
test_cppfile.write(", 0")
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:
@@ -184,4 +187,4 @@ 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')
print('projections.h and .cpp, and test_projections.cpp have been generated. Manually merge them now')
+9 -4
View File
@@ -18,6 +18,15 @@ 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/
@@ -29,10 +38,6 @@ else
echo "No Doxygen warnings found";
fi
if test $(doxygen --version) = "1.8.17" ; then
echo "Doxygen 1.8.17 is incompatible" && /bin/false;
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/general_doc.dox") | doxygen - > docs/build/docs_log.txt 2>&1
+2
View File
@@ -98,6 +98,7 @@ osgeo::proj::crs::BoundCRS::~BoundCRS()
osgeo::proj::crs::BoundCRS::create(dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::crs::CRS> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::crs::CRS> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::operation::Transformation> > const&)
osgeo::proj::crs::BoundCRS::createFromNadgrids(dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::crs::CRS> > const&, std::string const&)
osgeo::proj::crs::BoundCRS::createFromTOWGS84(dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::crs::CRS> > const&, std::vector<double, std::allocator<double> > const&)
osgeo::proj::crs::BoundCRS::create(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::crs::CRS> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::crs::CRS> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::operation::Transformation> > const&)
osgeo::proj::crs::BoundCRS::hubCRS() const
osgeo::proj::crs::BoundCRS::transformation() const
osgeo::proj::crs::CompoundCRS::componentReferenceSystems() const
@@ -131,6 +132,7 @@ 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<std::shared_ptr<osgeo::proj::crs::GeodeticCRS> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::operation::Conversion> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::cs::EllipsoidalCS> > const&)
osgeo::proj::crs::DerivedGeographicCRS::demoteTo2D(std::string const&, std::shared_ptr<osgeo::proj::io::DatabaseContext> 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<std::shared_ptr<osgeo::proj::crs::ProjectedCRS> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::operation::Conversion> > const&, dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::cs::CoordinateSystem> > const&)
+1 -1
View File
@@ -50,7 +50,7 @@ geodtest_LDADD = libproj.la
lib_LTLIBRARIES = libproj.la
libproj_la_LDFLAGS = -no-undefined -version-info 23:0:1
libproj_la_LDFLAGS = -no-undefined -version-info 23:1:1
libproj_la_LIBADD = @SQLITE3_LIBS@ @TIFF_LIBS@ @CURL_LIBS@
libproj_la_SOURCES = \
+1 -1
View File
@@ -12,7 +12,7 @@ target_link_libraries(cct PRIVATE ${PROJ_LIBRARIES})
target_compile_options(cct PRIVATE ${PROJ_CXX_WARN_FLAGS})
install(TARGETS cct
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(cct PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+1 -1
View File
@@ -11,7 +11,7 @@ target_link_libraries(cs2cs PRIVATE ${PROJ_LIBRARIES})
target_compile_options(cs2cs PRIVATE ${PROJ_CXX_WARN_FLAGS})
install(TARGETS cs2cs
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(cs2cs PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+1 -1
View File
@@ -13,7 +13,7 @@ target_link_libraries(geod PRIVATE ${PROJ_LIBRARIES})
target_compile_options(geod PRIVATE ${PROJ_CXX_WARN_FLAGS})
install(TARGETS geod
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(geod PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+1 -1
View File
@@ -12,7 +12,7 @@ target_link_libraries(gie PRIVATE ${PROJ_LIBRARIES})
target_compile_options(gie PRIVATE ${PROJ_CXX_WARN_FLAGS})
install(TARGETS gie
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(gie PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+1 -1
View File
@@ -14,7 +14,7 @@ target_link_libraries(binproj PRIVATE ${PROJ_LIBRARIES})
target_compile_options(binproj PRIVATE ${PROJ_CXX_WARN_FLAGS})
install(TARGETS binproj
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(binproj PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+1 -1
View File
@@ -10,7 +10,7 @@ target_link_libraries(binprojinfo PRIVATE ${PROJ_LIBRARIES})
target_compile_options(binprojinfo PRIVATE ${PROJ_CXX_WARN_FLAGS})
install(TARGETS binprojinfo
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(binprojinfo PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+1 -5
View File
@@ -8,13 +8,9 @@ set_target_properties(bin_projsync
OUTPUT_NAME projsync)
target_link_libraries(bin_projsync PRIVATE ${PROJ_LIBRARIES})
target_compile_options(bin_projsync PRIVATE ${PROJ_CXX_WARN_FLAGS})
if(NLOHMANN_JSON STREQUAL "external")
target_compile_definitions(bin_projsync PRIVATE EXTERNAL_NLOHMANN_JSON)
target_link_libraries(bin_projsync PRIVATE nlohmann_json::nlohmann_json)
endif()
install(TARGETS bin_projsync
RUNTIME DESTINATION ${BINDIR})
DESTINATION ${BINDIR})
if(MSVC AND BUILD_SHARED_LIBS)
target_compile_definitions(bin_projsync PRIVATE PROJ_MSVC_DLL_IMPORT=1)
+31 -25
View File
@@ -38,9 +38,12 @@
#define OUTPUT_UNITS P->right
static PJ_COORD fwd_prepare (PJ *P, PJ_COORD coo) {
static void fwd_prepare (PJ *P, PJ_COORD& coo) {
if (HUGE_VAL==coo.v[0] || HUGE_VAL==coo.v[1] || HUGE_VAL==coo.v[2])
return proj_coord_error ();
{
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;
@@ -56,13 +59,15 @@ static PJ_COORD fwd_prepare (PJ *P, PJ_COORD coo) {
{
proj_log_error(P, _("Invalid latitude"));
proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
return proj_coord_error ();
coo = proj_coord_error ();
return;
}
if (coo.lp.lam > 10 || coo.lp.lam < -10)
{
proj_log_error(P, _("Invalid longitude"));
proj_errno_set (P, PROJ_ERR_COORD_TRANSFM_INVALID_COORD);
return proj_coord_error ();
coo = proj_coord_error ();
return;
}
@@ -89,7 +94,7 @@ static PJ_COORD fwd_prepare (PJ *P, PJ_COORD coo) {
coo = proj_trans (P->cart, PJ_INV, coo); /* Go back to angular using local ellps */
}
if (coo.lp.lam==HUGE_VAL)
return coo;
return;
if (P->vgridshift)
coo = proj_trans (P->vgridshift, PJ_FWD, coo); /* Go orthometric from geometric */
@@ -100,18 +105,18 @@ static PJ_COORD fwd_prepare (PJ *P, PJ_COORD coo) {
if (0==P->over)
coo.lp.lam = adjlon(coo.lp.lam);
return coo;
return;
}
/* We do not support gridshifts on cartesian input */
if (INPUT_UNITS==PJ_IO_UNITS_CARTESIAN && P->helmert)
return proj_trans (P->helmert, PJ_INV, coo);
return coo;
coo = proj_trans (P->helmert, PJ_INV, coo);
return;
}
static PJ_COORD fwd_finalize (PJ *P, PJ_COORD coo) {
static void fwd_finalize (PJ *P, PJ_COORD& coo) {
switch (OUTPUT_UNITS) {
@@ -161,29 +166,28 @@ static PJ_COORD fwd_finalize (PJ *P, PJ_COORD coo) {
if (P->axisswap)
coo = proj_trans (P->axisswap, PJ_FWD, coo);
return coo;
}
static PJ_COORD error_or_coord(PJ *P, PJ_COORD coord, int last_errno) {
if (proj_errno(P))
static inline PJ_COORD error_or_coord(PJ *P, PJ_COORD coord, int last_errno) {
if (P->ctx->last_errno)
return proj_coord_error();
proj_errno_restore(P, last_errno);
P->ctx->last_errno = last_errno;
return coord;
}
PJ_XY pj_fwd(PJ_LP lp, PJ *P) {
int last_errno;
PJ_COORD coo = {{0,0,0,0}};
coo.lp = lp;
last_errno = proj_errno_reset(P);
const int last_errno = P->ctx->last_errno;
P->ctx->last_errno = 0;
if (!P->skip_fwd_prepare)
coo = fwd_prepare (P, coo);
fwd_prepare (P, coo);
if (HUGE_VAL==coo.v[0] || HUGE_VAL==coo.v[1])
return proj_coord_error ().xy;
@@ -202,7 +206,7 @@ PJ_XY pj_fwd(PJ_LP lp, PJ *P) {
return proj_coord_error ().xy;
if (!P->skip_fwd_finalize)
coo = fwd_finalize (P, coo);
fwd_finalize (P, coo);
return error_or_coord(P, coo, last_errno).xy;
}
@@ -210,14 +214,14 @@ PJ_XY pj_fwd(PJ_LP lp, PJ *P) {
PJ_XYZ pj_fwd3d(PJ_LPZ lpz, PJ *P) {
int last_errno;
PJ_COORD coo = {{0,0,0,0}};
coo.lpz = lpz;
last_errno = proj_errno_reset(P);
const int last_errno = P->ctx->last_errno;
P->ctx->last_errno = 0;
if (!P->skip_fwd_prepare)
coo = fwd_prepare (P, coo);
fwd_prepare (P, coo);
if (HUGE_VAL==coo.v[0])
return proj_coord_error ().xyz;
@@ -236,7 +240,7 @@ PJ_XYZ pj_fwd3d(PJ_LPZ lpz, PJ *P) {
return proj_coord_error ().xyz;
if (!P->skip_fwd_finalize)
coo = fwd_finalize (P, coo);
fwd_finalize (P, coo);
return error_or_coord(P, coo, last_errno).xyz;
}
@@ -244,10 +248,12 @@ PJ_XYZ pj_fwd3d(PJ_LPZ lpz, PJ *P) {
PJ_COORD pj_fwd4d (PJ_COORD coo, PJ *P) {
int last_errno = proj_errno_reset(P);
const int last_errno = P->ctx->last_errno;
P->ctx->last_errno = 0;
if (!P->skip_fwd_prepare)
coo = fwd_prepare (P, coo);
fwd_prepare (P, coo);
if (HUGE_VAL==coo.v[0])
return proj_coord_error ();
@@ -266,7 +272,7 @@ PJ_COORD pj_fwd4d (PJ_COORD coo, PJ *P) {
return proj_coord_error ();
if (!P->skip_fwd_finalize)
coo = fwd_finalize (P, coo);
fwd_finalize (P, coo);
return error_or_coord(P, coo, last_errno);
}
+155 -124
View File
@@ -76,6 +76,13 @@ static void swap_words(void *dataIn, size_t word_size, size_t word_count)
// ---------------------------------------------------------------------------
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;
}
@@ -126,6 +133,7 @@ static ExtentAndRes globalExtent() {
extent.north = M_PI / 2;
extent.resX = M_PI;
extent.resY = M_PI / 2;
extent.computeInvRes();
return extent;
}
@@ -249,6 +257,7 @@ GTXVerticalShiftGrid *GTXVerticalShiftGrid::open(PJ_CONTEXT *ctx,
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();
return new GTXVerticalShiftGrid(ctx, std::move(fp), name, columns, rows,
extent);
@@ -328,54 +337,30 @@ class BlockCache {
public:
void insert(uint32_t ifdIdx, uint32_t blockNumber,
const std::vector<unsigned char> &data);
std::shared_ptr<std::vector<unsigned char>> get(uint32_t ifdIdx,
uint32_t blockNumber);
const std::vector<unsigned char> *get(uint32_t ifdIdx,
uint32_t blockNumber);
private:
struct Key {
uint32_t ifdIdx;
uint32_t blockNumber;
Key(uint32_t ifdIdxIn, uint32_t blockNumberIn)
: ifdIdx(ifdIdxIn), blockNumber(blockNumberIn) {}
bool operator==(const Key &other) const {
return ifdIdx == other.ifdIdx && blockNumber == other.blockNumber;
}
};
struct KeyHasher {
std::size_t operator()(const Key &k) const {
return k.ifdIdx ^ (k.blockNumber << 16) ^ (k.blockNumber >> 16);
}
};
typedef uint64_t Key;
static constexpr int NUM_BLOCKS_AT_CROSSING_TILES = 4;
static constexpr int MAX_SAMPLE_COUNT = 3;
lru11::Cache<
Key, std::shared_ptr<std::vector<unsigned char>>, lru11::NullLock,
std::unordered_map<
Key,
typename std::list<lru11::KeyValuePair<
Key, std::shared_ptr<std::vector<unsigned char>>>>::iterator,
KeyHasher>>
cache_{NUM_BLOCKS_AT_CROSSING_TILES * MAX_SAMPLE_COUNT};
lru11::Cache<Key, std::vector<unsigned char>, lru11::NullLock> cache_{
NUM_BLOCKS_AT_CROSSING_TILES * MAX_SAMPLE_COUNT};
};
// ---------------------------------------------------------------------------
void BlockCache::insert(uint32_t ifdIdx, uint32_t blockNumber,
const std::vector<unsigned char> &data) {
cache_.insert(Key(ifdIdx, blockNumber),
std::make_shared<std::vector<unsigned char>>(data));
cache_.insert((static_cast<uint64_t>(ifdIdx) << 32) | blockNumber, data);
}
// ---------------------------------------------------------------------------
std::shared_ptr<std::vector<unsigned char>>
BlockCache::get(uint32_t ifdIdx, uint32_t blockNumber) {
std::shared_ptr<std::vector<unsigned char>> ret;
cache_.tryGet(Key(ifdIdx, blockNumber), ret);
return ret;
const std::vector<unsigned char> *BlockCache::get(uint32_t ifdIdx,
uint32_t blockNumber) {
return cache_.getPtr((static_cast<uint64_t>(ifdIdx) << 32) | blockNumber);
}
// ---------------------------------------------------------------------------
@@ -388,7 +373,7 @@ class GTiffGrid : public Grid {
uint32_t m_ifdIdx;
TIFFDataType m_dt;
uint16_t m_samplesPerPixel;
uint16_t m_planarConfig;
uint16_t m_planarConfig; // set to -1 if m_samplesPerPixel == 1
bool m_bottomUp;
toff_t m_dirOffset;
bool m_tiled;
@@ -397,18 +382,19 @@ class GTiffGrid : public Grid {
mutable std::vector<unsigned char> m_buffer{};
unsigned m_blocksPerRow = 0;
unsigned m_blocksPerCol = 0;
std::map<int, double> m_mapOffset{};
std::map<int, double> m_mapScale{};
unsigned m_blocks = 0;
std::vector<double> m_adfOffset{};
std::vector<double> m_adfScale{};
std::map<std::pair<int, std::string>, 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;
void getScaleOffset(double &scale, double &offset, uint16_t sample) const;
template <class T>
float readValue(const std::vector<unsigned char> &buffer,
uint32_t offsetInBlock, uint16_t sample) const;
@@ -446,7 +432,9 @@ GTiffGrid::GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache, File *fp,
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(planarConfig),
m_samplesPerPixel(samplesPerPixelIn),
m_planarConfig(samplesPerPixelIn == 1 ? static_cast<uint16_t>(-1)
: planarConfig),
m_bottomUp(bottomUpIn), m_dirOffset(TIFFCurrentDirOffset(hTIFF)),
m_tiled(TIFFIsTiled(hTIFF) != 0) {
@@ -460,10 +448,15 @@ GTiffGrid::GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache, File *fp,
m_blockHeight = m_height;
}
m_blockIs256Pixel = (m_blockWidth == 256) && (m_blockHeight == 256);
m_isSingleBlock = (m_blockWidth == static_cast<uint32_t>(m_width)) &&
(m_blockHeight == static_cast<uint32_t>(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
@@ -515,16 +508,26 @@ GTiffGrid::GTiffGrid(PJ_CONTEXT *ctx, TIFF *hTIFF, BlockCache &cache, File *fp,
break;
const auto role = tag.substr(rolePos, endQuote - rolePos);
if (role == "offset") {
if (sample >= 0) {
if (sample >= 0 &&
static_cast<unsigned>(sample) <= m_samplesPerPixel) {
try {
m_mapOffset[sample] = c_locale_stod(value);
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) {
if (sample >= 0 &&
static_cast<unsigned>(sample) <= m_samplesPerPixel) {
try {
m_mapScale[sample] = c_locale_stod(value);
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 &) {
}
}
@@ -555,33 +558,16 @@ GTiffGrid::~GTiffGrid() = default;
// ---------------------------------------------------------------------------
void GTiffGrid::getScaleOffset(double &scale, double &offset,
uint16_t sample) const {
{
auto iter = m_mapScale.find(sample);
if (iter != m_mapScale.end())
scale = iter->second;
}
{
auto iter = m_mapOffset.find(sample);
if (iter != m_mapOffset.end())
offset = iter->second;
}
}
// ---------------------------------------------------------------------------
template <class T>
float GTiffGrid::readValue(const std::vector<unsigned char> &buffer,
uint32_t offsetInBlock, uint16_t sample) const {
const auto ptr = reinterpret_cast<const T *>(buffer.data());
assert(offsetInBlock < buffer.size() / sizeof(T));
const auto val = ptr[offsetInBlock];
if (!m_hasNodata || static_cast<float>(val) != m_noData) {
double scale = 1;
double offset = 0;
getScaleOffset(scale, offset, sample);
if ((!m_hasNodata || static_cast<float>(val) != m_noData) &&
sample < m_adfScale.size()) {
double scale = m_adfScale[sample];
double offset = m_adfOffset[sample];
return static_cast<float>(val * scale + offset);
} else {
return static_cast<float>(val);
@@ -595,27 +581,41 @@ bool GTiffGrid::valueAt(uint16_t sample, int x, int yFromBottom,
assert(x >= 0 && yFromBottom >= 0 && x < m_width && yFromBottom < m_height);
assert(sample < m_samplesPerPixel);
const int blockX = x / m_blockWidth;
// 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;
const int blockY = yTIFF / m_blockHeight;
uint32_t blockId = blockY * m_blocksPerRow + blockX;
if (m_planarConfig == PLANARCONFIG_SEPARATE) {
blockId += sample * m_blocksPerCol * m_blocksPerRow;
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;
}
auto cachedBuffer = m_cache.get(m_ifdIdx, blockId);
std::vector<unsigned char> *pBuffer = &m_buffer;
if (cachedBuffer != nullptr) {
// Safe as we don't access the cache before pBuffer is used
pBuffer = cachedBuffer.get();
} else {
if (m_planarConfig == PLANARCONFIG_SEPARATE) {
blockId += sample * m_blocks;
}
const std::vector<unsigned char> *pBuffer = m_cache.get(m_ifdIdx, blockId);
if (pBuffer == nullptr) {
if (TIFFCurrentDirOffset(m_hTIFF) != m_dirOffset &&
!TIFFSetSubDirectory(m_hTIFF, m_dirOffset)) {
return false;
@@ -643,6 +643,7 @@ bool GTiffGrid::valueAt(uint16_t sample, int x, int yFromBottom,
}
}
pBuffer = &m_buffer;
try {
m_cache.insert(m_ifdIdx, blockId, m_buffer);
} catch (const std::exception &e) {
@@ -651,8 +652,11 @@ bool GTiffGrid::valueAt(uint16_t sample, int x, int yFromBottom,
}
}
uint32_t offsetInBlock =
(x % m_blockWidth) + (yTIFF % m_blockHeight) * m_blockWidth;
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;
@@ -1053,6 +1057,7 @@ std::unique_ptr<GTiffGrid> GTiffDataset::nextGrid() {
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);
@@ -1451,7 +1456,7 @@ const VerticalShiftGrid *VerticalShiftGrid::gridAt(double lon,
const VerticalShiftGrid *VerticalShiftGridSet::gridAt(double lon,
double lat) const {
for (const auto &grid : m_grids) {
if (dynamic_cast<NullVerticalShiftGrid *>(grid.get())) {
if (grid->isNullGrid()) {
return grid.get();
}
const auto &extent = grid->extentAndRes();
@@ -1604,6 +1609,8 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
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 &&
@@ -1616,9 +1623,9 @@ NTv1Grid *NTv1Grid::open(PJ_CONTEXT *ctx, std::unique_ptr<File> fp,
return nullptr;
}
const int columns = static_cast<int>(
fabs((extent.east - extent.west) / extent.resX + 0.5) + 1);
fabs((extent.east - extent.west) * extent.invResX + 0.5) + 1);
const int rows = static_cast<int>(
fabs((extent.north - extent.south) / extent.resY + 0.5) + 1);
fabs((extent.north - extent.south) * extent.invResY + 0.5) + 1);
return new NTv1Grid(ctx, std::move(fp), filename, columns, rows, extent);
}
@@ -1948,6 +1955,7 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx,
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 &&
@@ -1961,9 +1969,9 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx,
return nullptr;
}
const int columns = static_cast<int>(
fabs((extent.east - extent.west) / extent.resX + 0.5) + 1);
fabs((extent.east - extent.west) * extent.invResX + 0.5) + 1);
const int rows = static_cast<int>(
fabs((extent.north - extent.south) / extent.resY + 0.5) + 1);
fabs((extent.north - extent.south) * extent.invResY + 0.5) + 1);
pj_log(ctx, PJ_LOG_TRACE,
"NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)", gridName.c_str(),
@@ -2429,7 +2437,7 @@ const HorizontalShiftGrid *HorizontalShiftGrid::gridAt(double lon,
const HorizontalShiftGrid *HorizontalShiftGridSet::gridAt(double lon,
double lat) const {
for (const auto &grid : m_grids) {
if (dynamic_cast<NullHorizontalShiftGrid *>(grid.get())) {
if (grid->isNullGrid()) {
return grid.get();
}
const auto &extent = grid->extentAndRes();
@@ -2760,7 +2768,7 @@ const GenericShiftGrid *GenericShiftGrid::gridAt(double x, double y) const {
const GenericShiftGrid *GenericShiftGridSet::gridAt(double x, double y) const {
for (const auto &grid : m_grids) {
if (dynamic_cast<NullGenericShiftGrid *>(grid.get())) {
if (grid->isNullGrid()) {
return grid.get();
}
const auto &extent = grid->extentAndRes();
@@ -3196,7 +3204,7 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
}
/* Interpolation of a location within the grid */
double grid_x = (input.lam - extent.west) / extent.resX;
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
@@ -3205,7 +3213,7 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
grid->width(),
grid->width());
} else {
grid_x = (input.lam + 2 * M_PI - extent.west) / extent.resX;
grid_x = (input.lam + 2 * M_PI - extent.west) * extent.invResX;
}
} else if (input.lam > extent.east) {
if (extent.fullWorldLongitude()) {
@@ -3215,10 +3223,10 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
grid->width(),
grid->width());
} else {
grid_x = (input.lam - 2 * M_PI - extent.west) / extent.resX;
grid_x = (input.lam - 2 * M_PI - extent.west) * extent.invResX;
}
}
double grid_y = (input.phi - extent.south) / extent.resY;
double grid_y = (input.phi - extent.south) * extent.invResY;
int grid_ix = static_cast<int>(lround(floor(grid_x)));
if (!(grid_ix >= 0 && grid_ix < grid->width())) {
// in the unlikely case we end up here...
@@ -3262,39 +3270,60 @@ static double read_vgrid_value(PJ_CONTEXT *ctx, const ListOfVGrids &grids,
return HUGE_VAL;
}
double total_weight = 0.0;
int n_weights = 0;
double value = 0.0f;
double value = 0.0;
if (!grid->isNodata(value_a, vmultiplier)) {
double weight = (1.0 - grid_x) * (1.0 - grid_y);
value += value_a * weight;
total_weight += weight;
n_weights++;
}
if (!grid->isNodata(value_b, vmultiplier)) {
double weight = (grid_x) * (1.0 - grid_y);
value += value_b * weight;
total_weight += weight;
n_weights++;
}
if (!grid->isNodata(value_c, vmultiplier)) {
double weight = (1.0 - grid_x) * (grid_y);
value += value_c * weight;
total_weight += weight;
n_weights++;
}
if (!grid->isNodata(value_d, vmultiplier)) {
double weight = (grid_x) * (grid_y);
value += value_d * weight;
total_weight += weight;
n_weights++;
}
if (n_weights == 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<int>(a_valid) + static_cast<int>(b_valid) +
static_cast<int>(c_valid) + static_cast<int>(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 if (n_weights != 4)
} 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;
}
@@ -3364,8 +3393,10 @@ double pj_vgrid_value(PJ *P, const ListOfVGrids &grids, PJ_LP lp,
double value;
value = read_vgrid_value(P->ctx, grids, lp, vmultiplier);
proj_log_trace(P, "proj_vgrid_value: (%f, %f) = %f", lp.lam * RAD_TO_DEG,
lp.phi * RAD_TO_DEG, value);
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;
}
@@ -3413,14 +3444,14 @@ bool pj_bilinear_interpolation_three_samples(
// 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.resX;
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.resX;
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.resX;
grid_x = (lp.lam - 2 * M_PI - extent.west) * extent.invResX;
}
double grid_y = (lp.phi - extent.south) / extent.resY;
double grid_y = (lp.phi - extent.south) * extent.invResY;
int ix = static_cast<int>(grid_x);
int iy = static_cast<int>(grid_y);
int ix2 = std::min(ix + 1, grid->width() - 1);
+4
View File
@@ -45,6 +45,10 @@ struct ExtentAndRes {
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;
+29 -33
View File
@@ -36,10 +36,11 @@
#define INPUT_UNITS P->right
#define OUTPUT_UNITS P->left
static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
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);
return proj_coord_error ();
coo = proj_coord_error ();
return;
}
/* The helmert datum shift will choke unless it gets a sensible 4D coordinate */
@@ -52,10 +53,10 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
/* Handle remaining possible input types */
switch (INPUT_UNITS) {
case PJ_IO_UNITS_WHATEVER:
return coo;
break;
case PJ_IO_UNITS_DEGREES:
return coo;
break;
/* de-scale and de-offset */
case PJ_IO_UNITS_CARTESIAN:
@@ -65,8 +66,7 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
if (P->is_geocent) {
coo = proj_trans (P->cart, PJ_INV, coo);
}
return coo;
break;
case PJ_IO_UNITS_PROJECTED:
case PJ_IO_UNITS_CLASSIC:
@@ -74,7 +74,7 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
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 coo;
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 */
@@ -82,23 +82,20 @@ static PJ_COORD inv_prepare (PJ *P, PJ_COORD coo) {
/* (CalCOFI avoids further scaling by stomping - but a better solution is possible) */
coo.xyz.x *= P->ra;
coo.xyz.y *= P->ra;
return coo;
break;
case PJ_IO_UNITS_RADIANS:
coo.lpz.z = P->vto_meter * coo.lpz.z - P->z0;
break;
}
/* Should not happen, so we could return pj_coord_err here */
return coo;
}
static PJ_COORD inv_finalize (PJ *P, PJ_COORD coo) {
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);
return proj_coord_error ();
coo = proj_coord_error ();
}
if (OUTPUT_UNITS==PJ_IO_UNITS_RADIANS) {
@@ -113,7 +110,7 @@ static PJ_COORD inv_finalize (PJ *P, PJ_COORD coo) {
if (P->vgridshift)
coo = proj_trans (P->vgridshift, PJ_INV, coo); /* Go geometric from orthometric */
if (coo.lp.lam==HUGE_VAL)
return coo;
return;
if (P->hgridshift)
coo = proj_trans (P->hgridshift, PJ_FWD, coo);
else if (P->helmert || (P->cart_wgs84 != nullptr && P->cart != nullptr)) {
@@ -123,35 +120,32 @@ static PJ_COORD inv_finalize (PJ *P, PJ_COORD coo) {
coo = proj_trans (P->cart_wgs84, PJ_INV, coo); /* Go back to angular using WGS84 ellps */
}
if (coo.lp.lam==HUGE_VAL)
return coo;
return;
/* If input latitude was geocentrical, convert back to geocentrical */
if (P->geoc)
coo = pj_geocentric_latitude (P, PJ_FWD, coo);
}
return coo;
}
static PJ_COORD error_or_coord(PJ *P, PJ_COORD coord, int last_errno) {
if (proj_errno(P))
static inline PJ_COORD error_or_coord(PJ *P, PJ_COORD coord, int last_errno) {
if (P->ctx->last_errno)
return proj_coord_error();
proj_errno_restore(P, last_errno);
P->ctx->last_errno = last_errno;
return coord;
}
PJ_LP pj_inv(PJ_XY xy, PJ *P) {
int last_errno;
PJ_COORD coo = {{0,0,0,0}};
coo.xy = xy;
last_errno = proj_errno_reset(P);
const int last_errno = P->ctx->last_errno;
P->ctx->last_errno = 0;
if (!P->skip_inv_prepare)
coo = inv_prepare (P, coo);
inv_prepare (P, coo);
if (HUGE_VAL==coo.v[0])
return proj_coord_error ().lp;
@@ -170,7 +164,7 @@ PJ_LP pj_inv(PJ_XY xy, PJ *P) {
return proj_coord_error ().lp;
if (!P->skip_inv_finalize)
coo = inv_finalize (P, coo);
inv_finalize (P, coo);
return error_or_coord(P, coo, last_errno).lp;
}
@@ -178,14 +172,14 @@ PJ_LP pj_inv(PJ_XY xy, PJ *P) {
PJ_LPZ pj_inv3d (PJ_XYZ xyz, PJ *P) {
int last_errno;
PJ_COORD coo = {{0,0,0,0}};
coo.xyz = xyz;
last_errno = proj_errno_reset(P);
const int last_errno = P->ctx->last_errno;
P->ctx->last_errno = 0;
if (!P->skip_inv_prepare)
coo = inv_prepare (P, coo);
inv_prepare (P, coo);
if (HUGE_VAL==coo.v[0])
return proj_coord_error ().lpz;
@@ -204,7 +198,7 @@ PJ_LPZ pj_inv3d (PJ_XYZ xyz, PJ *P) {
return proj_coord_error ().lpz;
if (!P->skip_inv_finalize)
coo = inv_finalize (P, coo);
inv_finalize (P, coo);
return error_or_coord(P, coo, last_errno).lpz;
}
@@ -212,10 +206,12 @@ PJ_LPZ pj_inv3d (PJ_XYZ xyz, PJ *P) {
PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P) {
int last_errno = proj_errno_reset(P);
const int last_errno = P->ctx->last_errno;
P->ctx->last_errno = 0;
if (!P->skip_inv_prepare)
coo = inv_prepare (P, coo);
inv_prepare (P, coo);
if (HUGE_VAL==coo.v[0])
return proj_coord_error ();
@@ -234,7 +230,7 @@ PJ_COORD pj_inv4d (PJ_COORD coo, PJ *P) {
return proj_coord_error ();
if (!P->skip_inv_finalize)
coo = inv_finalize (P, coo);
inv_finalize (P, coo);
return error_or_coord(P, coo, last_errno);
}
+172 -34
View File
@@ -825,6 +825,64 @@ bool CRS::mustAxisOrderBeSwitchedForVisualization() const {
//! @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_ = extensionProj4;
}
//! @endcond
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
CRSNNPtr CRS::normalizeForVisualization() const {
const auto createProperties = [this](const std::string &newName =
@@ -1079,8 +1137,24 @@ CRSNNPtr CRS::promoteTo3D(const std::string &newName,
return props;
};
const auto geogCRS = dynamic_cast<const GeographicCRS *>(this);
if (geogCRS) {
if (auto derivedGeogCRS =
dynamic_cast<const DerivedGeographicCRS *>(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<GeodeticCRS>(
derivedGeogCRS->baseCRS()->promoteTo3D(
std::string(), dbContext, verticalAxisIfNotAlreadyPresent));
return util::nn_static_pointer_cast<CRS>(
DerivedGeographicCRS::create(
createProperties(), NN_CHECK_THROW(baseGeog3DCRS),
derivedGeogCRS->derivingConversion(), cs));
}
}
else if (auto geogCRS = dynamic_cast<const GeographicCRS *>(this)) {
const auto &axisList = geogCRS->coordinateSystem()->axisList();
if (axisList.size() == 2) {
const auto &l_identifiers = identifiers();
@@ -1120,8 +1194,7 @@ CRSNNPtr CRS::promoteTo3D(const std::string &newName,
}
}
const auto projCRS = dynamic_cast<const ProjectedCRS *>(this);
if (projCRS) {
else if (auto projCRS = dynamic_cast<const ProjectedCRS *>(this)) {
const auto &axisList = projCRS->coordinateSystem()->axisList();
if (axisList.size() == 2) {
auto base3DCRS =
@@ -1137,15 +1210,14 @@ CRSNNPtr CRS::promoteTo3D(const std::string &newName,
}
}
const auto boundCRS = dynamic_cast<const BoundCRS *>(this);
if (boundCRS) {
else if (auto boundCRS = dynamic_cast<const BoundCRS *>(this)) {
auto base3DCRS = boundCRS->baseCRS()->promoteTo3D(
newName, dbContext, verticalAxisIfNotAlreadyPresent);
auto transf = boundCRS->transformation();
try {
transf->getTOWGS84Parameters();
return BoundCRS::create(
base3DCRS,
createProperties(), base3DCRS,
boundCRS->hubCRS()->promoteTo3D(std::string(), dbContext),
transf->promoteTo3D(std::string(), dbContext));
} catch (const io::FormattingException &) {
@@ -1174,18 +1246,21 @@ CRSNNPtr CRS::promoteTo3D(const std::string &newName,
*/
CRSNNPtr CRS::demoteTo2D(const std::string &newName,
const io::DatabaseContextPtr &dbContext) const {
const auto geogCRS = dynamic_cast<const GeographicCRS *>(this);
if (geogCRS) {
if (auto derivedGeogCRS =
dynamic_cast<const DerivedGeographicCRS *>(this)) {
return derivedGeogCRS->demoteTo2D(newName, dbContext);
}
else if (auto geogCRS = dynamic_cast<const GeographicCRS *>(this)) {
return geogCRS->demoteTo2D(newName, dbContext);
}
const auto projCRS = dynamic_cast<const ProjectedCRS *>(this);
if (projCRS) {
else if (auto projCRS = dynamic_cast<const ProjectedCRS *>(this)) {
return projCRS->demoteTo2D(newName, dbContext);
}
const auto boundCRS = dynamic_cast<const BoundCRS *>(this);
if (boundCRS) {
else if (auto boundCRS = dynamic_cast<const BoundCRS *>(this)) {
auto base2DCRS = boundCRS->baseCRS()->demoteTo2D(newName, dbContext);
auto transf = boundCRS->transformation();
try {
@@ -1199,8 +1274,7 @@ CRSNNPtr CRS::demoteTo2D(const std::string &newName,
}
}
const auto compoundCRS = dynamic_cast<const CompoundCRS *>(this);
if (compoundCRS) {
else if (auto compoundCRS = dynamic_cast<const CompoundCRS *>(this)) {
const auto &components = compoundCRS->componentReferenceSystems();
if (components.size() >= 2) {
return components[0];
@@ -1594,8 +1668,6 @@ GeodeticCRS::create(const util::PropertyMap &properties,
GeodeticCRS::nn_make_shared<GeodeticCRS>(datum, datumEnsemble, cs));
crs->assignSelf(crs);
crs->setProperties(properties);
properties.getStringValue("EXTENSION_PROJ4",
crs->CRS::getPrivate()->extensionProj4_);
return crs;
}
@@ -1641,8 +1713,7 @@ GeodeticCRS::create(const util::PropertyMap &properties,
GeodeticCRS::nn_make_shared<GeodeticCRS>(datum, datumEnsemble, cs));
crs->assignSelf(crs);
crs->setProperties(properties);
properties.getStringValue("EXTENSION_PROJ4",
crs->CRS::getPrivate()->extensionProj4_);
return crs;
}
@@ -2558,8 +2629,6 @@ GeographicCRS::create(const util::PropertyMap &properties,
GeographicCRS::nn_make_shared<GeographicCRS>(datum, datumEnsemble, cs));
crs->assignSelf(crs);
crs->setProperties(properties);
properties.getStringValue("EXTENSION_PROJ4",
crs->CRS::getPrivate()->extensionProj4_);
crs->CRS::getPrivate()->setImplicitCS(properties);
return crs;
}
@@ -4033,8 +4102,6 @@ ProjectedCRS::create(const util::PropertyMap &properties,
crs->assignSelf(crs);
crs->setProperties(properties);
crs->setDerivingConversionCRS();
properties.getStringValue("EXTENSION_PROJ4",
crs->CRS::getPrivate()->extensionProj4_);
crs->CRS::getPrivate()->setImplicitCS(properties);
return crs;
}
@@ -5224,6 +5291,37 @@ BoundCRS::transformation() PROJ_PURE_DEFN {
// ---------------------------------------------------------------------------
/** \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<BoundCRS>(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.
*
@@ -5235,15 +5333,7 @@ BoundCRS::transformation() PROJ_PURE_DEFN {
BoundCRSNNPtr
BoundCRS::create(const CRSNNPtr &baseCRSIn, const CRSNNPtr &hubCRSIn,
const operation::TransformationNNPtr &transformationIn) {
auto crs = BoundCRS::nn_make_shared<BoundCRS>(baseCRSIn, hubCRSIn,
transformationIn);
crs->assignSelf(crs);
const auto &l_name = baseCRSIn->nameStr();
if (!l_name.empty()) {
crs->setProperties(util::PropertyMap().set(
common::IdentifiedObject::NAME_KEY, l_name));
}
return crs;
return create(util::PropertyMap(), baseCRSIn, hubCRSIn, transformationIn);
}
// ---------------------------------------------------------------------------
@@ -5348,6 +5438,7 @@ void BoundCRS::_exportToWKT(io::WKTFormatter *formatter) const {
formatter->setAbridgedTransformation(true);
d->transformation()->_exportToWKT(formatter);
formatter->setAbridgedTransformation(false);
ObjectUsage::baseExportToWKT(formatter);
formatter->endNode();
} else {
@@ -5388,8 +5479,21 @@ void BoundCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("BoundCRS", !identifiers().empty()));
const auto &l_name = nameStr();
if ((formatter->outputUsage(true) && !domains().empty()) ||
(formatter->outputId() && !identifiers().empty()) ||
!remarks().empty() ||
(!l_name.empty() && l_name != d->baseCRS()->nameStr())) {
// Only upgrades to v0.3 schema if needed
formatter->setSchema(io::JSONFormatter::PROJJSON_v0_3);
}
auto objectContext(formatter->MakeObjectContext("BoundCRS", false));
if (!l_name.empty() && l_name != d->baseCRS()->nameStr()) {
writer->AddObjKey("name");
writer->Add(l_name);
}
writer->AddObjKey("source_crs");
d->baseCRS()->_exportToJSON(formatter);
@@ -5402,6 +5506,8 @@ void BoundCRS::_exportToJSON(
formatter->setAbridgedTransformation(true);
d->transformation()->_exportToJSON(formatter);
formatter->setAbridgedTransformation(false);
ObjectUsage::baseExportToJSON(formatter);
}
//! @endcond
@@ -5898,6 +6004,38 @@ bool DerivedGeographicCRS::_isEquivalentTo(
// ---------------------------------------------------------------------------
/** \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<GeodeticCRS>(
baseCRS()->demoteTo2D(std::string(), dbContext));
return DerivedGeographicCRS::create(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
!newName.empty() ? newName : nameStr()),
NN_CHECK_THROW(baseGeog2DCRS), derivingConversion(), cs);
}
return NN_NO_CHECK(std::dynamic_pointer_cast<DerivedGeographicCRS>(
shared_from_this().as_nullable()));
}
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
std::list<std::pair<CRSNNPtr, int>>
+2 -3
View File
@@ -1145,9 +1145,8 @@ std::vector<std::string> DatabaseContext::Private::getDatabaseStructure() {
: "db_0.");
const auto sqlBegin("SELECT sql||';' FROM " + dbNamePrefix +
"sqlite_master WHERE type = ");
const char *const objectTypes[] = {"'table' AND "
"name NOT LIKE 'sqlite_stat%'",
"'view'", "'trigger'"};
const char *tableType = "'table' AND name NOT LIKE 'sqlite_stat%'";
const char *const objectTypes[] = {tableType, "'view'", "'trigger'"};
std::vector<std::string> res;
for (const auto &objectType : objectTypes) {
const auto sqlRes = run(sqlBegin + objectType);
+39 -17
View File
@@ -89,10 +89,6 @@ using json = nlohmann::json;
//! @cond Doxygen_Suppress
static const std::string emptyString{};
// If changing that value, change it in data/projjson.schema.json as well
#define PROJJSON_CURRENT_VERSION \
"https://proj.org/schemas/v0.2/projjson.schema.json"
//! @endcond
#if 0
@@ -109,6 +105,18 @@ template<> nn<std::unique_ptr<NS_PROJ::io::WKTNode, std::default_delete<NS_PROJ:
NS_PROJ_START
namespace io {
//! @cond Doxygen_Suppress
const char *JSONFormatter::PROJJSON_v0_2 =
"https://proj.org/schemas/v0.2/projjson.schema.json";
const char *JSONFormatter::PROJJSON_v0_3 =
"https://proj.org/schemas/v0.3/projjson.schema.json";
// v0.2 is our base version. We only upgrade to 0.3 for usage node in BoundCRS
#define PROJJSON_DEFAULT_VERSION JSONFormatter::PROJJSON_v0_2
//! @endcond
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
@@ -4593,8 +4601,8 @@ BoundCRSNNPtr WKTParser::Private::buildBoundCRS(const WKTNodeNNPtr &node) {
NN_NO_CHECK(targetCRS), nullptr, buildProperties(methodNode),
parameters, values, std::vector<PositionalAccuracyNNPtr>());
return BoundCRS::create(NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS),
transformation);
return BoundCRS::create(buildProperties(node), NN_NO_CHECK(sourceCRS),
NN_NO_CHECK(targetCRS), transformation);
}
// ---------------------------------------------------------------------------
@@ -5057,7 +5065,8 @@ class JSONParser {
IdentifierNNPtr buildId(const json &j, bool removeInverseOf);
static ObjectDomainPtr buildObjectDomain(const json &j);
PropertyMap buildProperties(const json &j, bool removeInverseOf = false);
PropertyMap buildProperties(const json &j, bool removeInverseOf = false,
bool nameRequired = true);
GeographicCRSNNPtr buildGeographicCRS(const json &j);
GeodeticCRSNNPtr buildGeodeticCRS(const json &j);
@@ -5358,13 +5367,17 @@ IdentifierNNPtr JSONParser::buildId(const json &j, bool removeInverseOf) {
// ---------------------------------------------------------------------------
PropertyMap JSONParser::buildProperties(const json &j, bool removeInverseOf) {
PropertyMap JSONParser::buildProperties(const json &j, bool removeInverseOf,
bool nameRequired) {
PropertyMap map;
std::string name(getName(j));
if (removeInverseOf && starts_with(name, "Inverse of ")) {
name = name.substr(strlen("Inverse of "));
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);
}
map.set(IdentifiedObject::NAME_KEY, name);
if (j.contains("ids")) {
auto idsJ = getArray(j, "ids");
@@ -5782,7 +5795,10 @@ BoundCRSNNPtr JSONParser::buildBoundCRS(const json &j) {
nullptr, buildProperties(methodJ), parameters, values,
std::vector<PositionalAccuracyNNPtr>());
return BoundCRS::create(sourceCRS, targetCRS, transformation);
return BoundCRS::create(buildProperties(j,
/* removeInverseOf= */ false,
/* nameRequired=*/false),
sourceCRS, targetCRS, transformation);
}
// ---------------------------------------------------------------------------
@@ -7409,6 +7425,8 @@ const std::string &PROJStringFormatter::toString() const {
} else if (step.name == "pop" && step.inverted) {
step.name = "push";
step.inverted = false;
} else if (step.name == "noop" && d->steps_.size() > 1) {
iter = d->steps_.erase(iter);
} else {
++iter;
}
@@ -10529,7 +10547,7 @@ struct JSONFormatter::Private {
bool allowIDInImmediateChild_ = false;
bool omitTypeInImmediateChild_ = false;
bool abridgedTransformation_ = false;
std::string schema_ = PROJJSON_CURRENT_VERSION;
std::string schema_ = PROJJSON_DEFAULT_VERSION;
std::string result_{};
@@ -10580,7 +10598,10 @@ JSONFormatter &JSONFormatter::setIndentationWidth(int width) noexcept {
* If set to empty string, it will not be written.
*/
JSONFormatter &JSONFormatter::setSchema(const std::string &schema) noexcept {
d->schema_ = schema;
// Upgrade only to v0.3 if the default was v0.2
if (schema != PROJJSON_v0_3 || d->schema_ == PROJJSON_v0_2) {
d->schema_ = schema;
}
return *this;
}
@@ -10604,8 +10625,9 @@ bool JSONFormatter::outputId() const { return d->outputIdStack_.back(); }
// ---------------------------------------------------------------------------
bool JSONFormatter::outputUsage() const {
return outputId() && d->outputIdStack_.size() == 2;
bool JSONFormatter::outputUsage(bool calledBeforeObjectContext) const {
return outputId() &&
d->outputIdStack_.size() == (calledBeforeObjectContext ? 1U : 2U);
}
// ---------------------------------------------------------------------------
@@ -335,13 +335,26 @@ void ConcatenatedOperation::fixStepsDirection(
}
}
} else if (conv && i > 0 && i < operationsInOut.size() - 1) {
// For an intermediate conversion, use the target CRS of the
// previous step and the source CRS of the next step
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) {
op->setCRSs(NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK(l_targetCRS),
nullptr);
// 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 (dynamic_cast<const crs::ProjectedCRS *>(
l_sourceCRS.get()) &&
dynamic_cast<const crs::GeographicCRS *>(
l_targetCRS.get())) {
op->setCRSs(NN_NO_CHECK(l_targetCRS),
NN_NO_CHECK(l_sourceCRS), nullptr);
op = op->inverse();
} else {
op->setCRSs(NN_NO_CHECK(l_sourceCRS),
NN_NO_CHECK(l_targetCRS), nullptr);
}
} else if (l_sourceCRS && l_targetCRS == nullptr &&
conv->method()->getEPSGCode() ==
EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) {
@@ -380,6 +393,11 @@ void ConcatenatedOperation::fixStepsDirection(
// 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<int>(i)));
}
if (compareStepCRS(l_sourceCRS.get(), prevOpTarget.get())) {
// do nothing
} else if (compareStepCRS(l_targetCRS.get(), prevOpTarget.get())) {
File diff suppressed because it is too large Load Diff
@@ -3121,7 +3121,8 @@ void CoordinateOperationFactory::Private::createOperationsFromProj4Ext(
projFormatter->setLegacyCRSToCRSContext(true);
projFormatter->startInversion();
sourceProjExportable->_exportToPROJString(projFormatter.get());
auto geogSrc = dynamic_cast<const crs::GeographicCRS *>(sourceCRS.get());
auto geogSrc = dynamic_cast<const crs::GeographicCRS *>(
boundSrc ? boundSrc->baseCRS().get() : sourceCRS.get());
if (geogSrc) {
auto tmpFormatter = io::PROJStringFormatter::create();
geogSrc->addAngularUnitConvertAndAxisSwap(tmpFormatter.get());
@@ -3131,7 +3132,8 @@ void CoordinateOperationFactory::Private::createOperationsFromProj4Ext(
projFormatter->stopInversion();
targetProjExportable->_exportToPROJString(projFormatter.get());
auto geogDst = dynamic_cast<const crs::GeographicCRS *>(targetCRS.get());
auto geogDst = dynamic_cast<const crs::GeographicCRS *>(
boundDst ? boundDst->baseCRS().get() : targetCRS.get());
if (geogDst) {
auto tmpFormatter = io::PROJStringFormatter::create();
geogDst->addAngularUnitConvertAndAxisSwap(tmpFormatter.get());
@@ -3476,7 +3478,7 @@ CoordinateOperationFactory::Private::createOperationsGeogToVertFromGeoid(
vertDst->datum(), vertDst->datumEnsemble(),
cs::VerticalCS::createGravityRelatedHeight(
common::UnitOfMeasure::METRE)));
const auto properties = util::PropertyMap().set(
auto properties = util::PropertyMap().set(
common::IdentifiedObject::NAME_KEY,
buildOpName("Transformation", vertCRSMetre, geogSrcCRS));
@@ -3485,14 +3487,21 @@ CoordinateOperationFactory::Private::createOperationsGeogToVertFromGeoid(
std::vector<metadata::PositionalAccuracyNNPtr> accuracies;
const auto &modelAccuracies =
model->coordinateOperationAccuracies();
std::vector<CoordinateOperationNNPtr> transformationsForGrid;
double accuracy = -1;
size_t idx = static_cast<size_t>(-1);
if (modelAccuracies.empty()) {
if (authFactory) {
const auto transformationsForGrid =
transformationsForGrid =
io::DatabaseContext::getTransformationsForGridName(
authFactory->databaseContext(), projFilename);
double accuracy = -1;
for (const auto &transf : transformationsForGrid) {
accuracy = std::max(accuracy, getAccuracy(transf));
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(
@@ -3502,6 +3511,31 @@ CoordinateOperationFactory::Private::createOperationsGeogToVertFromGeoid(
}
}
// 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 (transformationsForGrid.empty()) {
transformationsForGrid =
io::DatabaseContext::getTransformationsForGridName(
authFactory->databaseContext(), projFilename);
}
if (idx != static_cast<size_t>(-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);
@@ -5314,6 +5348,12 @@ CoordinateOperationFactory::createOperations(
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() ==
+35 -25
View File
@@ -730,8 +730,9 @@ static TransformationNNPtr createFifteenParamsTransform(
* the sign of
* the rotation terms is inverted.
*
* This method is defined as [EPSG:1053]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1053)
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_1053/index.html">
* EPSG:1053</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
@@ -806,8 +807,9 @@ TransformationNNPtr Transformation::createTimeDependentPositionVector(
* of
* the rotation terms is inverted.
*
* This method is defined as [EPSG:1056]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1056)
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_1056/index.html">
* EPSG:1056</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
@@ -913,8 +915,9 @@ static TransformationNNPtr _createMolodensky(
*
* @see createAbridgedMolodensky() for a related method.
*
* This method is defined as [EPSG:9604]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9604)
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9604/index.html">
* EPSG:9604</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
@@ -949,8 +952,9 @@ TransformationNNPtr Transformation::createMolodensky(
*
* @see createdMolodensky() for a related method.
*
* This method is defined as [EPSG:9605]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9605)
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9605/index.html">
* EPSG:9605</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
@@ -1144,9 +1148,10 @@ buildAccuracyZero() {
/** \brief Instantiate a transformation with method Longitude rotation
*
* This method is defined as [EPSG:9601]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9601)
* *
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9601/index.html">
* EPSG:9601</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
* @param sourceCRSIn Source CRS.
@@ -1179,9 +1184,10 @@ bool Transformation::isLongitudeRotation() const {
/** \brief Instantiate a transformation with method Geographic 2D offsets
*
* This method is defined as [EPSG:9619]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9619)
* *
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9619/index.html">
* EPSG:9619</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
* @param sourceCRSIn Source CRS.
@@ -1209,9 +1215,10 @@ TransformationNNPtr Transformation::createGeographic2DOffsets(
/** \brief Instantiate a transformation with method Geographic 3D offsets
*
* This method is defined as [EPSG:9660]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9660)
* *
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9660/index.html">
* EPSG:9660</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
* @param sourceCRSIn Source CRS.
@@ -1243,9 +1250,10 @@ TransformationNNPtr Transformation::createGeographic3DOffsets(
* height
* offsets
*
* This method is defined as [EPSG:9618]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9618)
* *
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9618/index.html">
* EPSG:9618</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
* @param sourceCRSIn Source CRS.
@@ -1276,9 +1284,10 @@ TransformationNNPtr Transformation::createGeographic2DWithHeightOffsets(
/** \brief Instantiate a transformation with method Vertical Offset.
*
* This method is defined as [EPSG:9616]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9616)
* *
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_9616/index.html">
* EPSG:9616</a>.
*
* @param properties See \ref general_properties of the Transformation.
* At minimum the name should be defined.
* @param sourceCRSIn Source CRS.
@@ -1303,8 +1312,9 @@ TransformationNNPtr Transformation::createVerticalOffset(
/** \brief Instantiate a transformation based on the Change of Vertical Unit
* method.
*
* This method is defined as [EPSG:1069]
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1069)
* This method is defined as
* <a href="https://epsg.org/coord-operation-method_1069/index.html">
* EPSG:1069</a> [DEPRECATED].
*
* @param properties See \ref general_properties of the conversion. If the name
* is not provided, it is automatically set.
+2 -1
View File
@@ -398,7 +398,8 @@ target_link_libraries(proj PRIVATE ${SQLITE3_LIBRARY})
if(NLOHMANN_JSON STREQUAL "external")
target_compile_definitions(proj PRIVATE EXTERNAL_NLOHMANN_JSON)
target_link_libraries(proj PRIVATE nlohmann_json::nlohmann_json)
target_link_libraries(proj
PRIVATE $<BUILD_INTERFACE:nlohmann_json::nlohmann_json>)
endif()
if(TIFF_ENABLED)
+31 -25
View File
@@ -46,25 +46,36 @@ void pj_stderr_logger( void *app_data, int level, const char *msg )
}
/************************************************************************/
/* pj_vlog() */
/* pj_log_active() */
/************************************************************************/
void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args );
void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args )
bool pj_log_active( PJ_CONTEXT *ctx, int level )
{
char *msg_buf;
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;
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;
@@ -72,7 +83,15 @@ void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args )
if( msg_buf == nullptr )
return;
vsnprintf( msg_buf, BUF_SIZE, fmt, args );
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 );
@@ -80,7 +99,6 @@ void pj_vlog( PJ_CONTEXT *ctx, int level, const char *fmt, va_list args )
free( msg_buf );
}
/************************************************************************/
/* pj_log() */
/************************************************************************/
@@ -94,7 +112,7 @@ void pj_log( PJ_CONTEXT *ctx, int level, const char *fmt, ... )
return;
va_start( args, fmt );
pj_vlog( ctx, level, fmt, args );
pj_vlog( ctx, level, nullptr, fmt, args );
va_end( args );
}
@@ -117,18 +135,6 @@ PJ_LOG_LEVEL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level) {
return previous;
}
/*****************************************************************************/
static std::string add_short_name_prefix(const PJ* P, const char* fmt)
/*****************************************************************************/
{
if( P->short_name == nullptr )
return fmt;
std::string ret(P->short_name);
ret += ": ";
ret += fmt;
return ret;
}
/*****************************************************************************/
void proj_log_error (const PJ *P, const char *fmt, ...) {
/******************************************************************************
@@ -136,7 +142,7 @@ void proj_log_error (const PJ *P, const char *fmt, ...) {
******************************************************************************/
va_list args;
va_start( args, fmt );
pj_vlog (pj_get_ctx ((PJ*)P), PJ_LOG_ERROR , add_short_name_prefix(P, fmt).c_str(), args);
pj_vlog (pj_get_ctx ((PJ*)P), PJ_LOG_ERROR, P, fmt, args);
va_end( args );
}
@@ -148,7 +154,7 @@ void proj_log_debug (PJ *P, const char *fmt, ...) {
******************************************************************************/
va_list args;
va_start( args, fmt );
pj_vlog (pj_get_ctx (P), PJ_LOG_DEBUG , add_short_name_prefix(P, fmt).c_str(), args);
pj_vlog (pj_get_ctx (P), PJ_LOG_DEBUG, P, fmt, args);
va_end( args );
}
@@ -159,7 +165,7 @@ void proj_context_log_debug (PJ_CONTEXT *ctx, const char *fmt, ...) {
******************************************************************************/
va_list args;
va_start( args, fmt );
pj_vlog (ctx, PJ_LOG_DEBUG , fmt, args);
pj_vlog (ctx, PJ_LOG_DEBUG, nullptr, fmt, args);
va_end( args );
}
@@ -170,7 +176,7 @@ void proj_log_trace (PJ *P, const char *fmt, ...) {
******************************************************************************/
va_list args;
va_start( args, fmt );
pj_vlog (pj_get_ctx (P), PJ_LOG_TRACE , add_short_name_prefix(P, fmt).c_str(), args);
pj_vlog (pj_get_ctx (P), PJ_LOG_TRACE, P, fmt, args);
va_end( args );
}
+2 -2
View File
@@ -172,7 +172,7 @@ extern "C" {
/* The version numbers should be updated with every release! **/
#define PROJ_VERSION_MAJOR 8
#define PROJ_VERSION_MINOR 1
#define PROJ_VERSION_PATCH 0
#define PROJ_VERSION_PATCH 1
/* Note: the following 3 defines have been introduced in PROJ 8.0.1 */
/* Macro to compute a PROJ version number from its components */
@@ -559,7 +559,7 @@ PJ PROJ_DLL *proj_create_crs_to_crs_from_pj(PJ_CONTEXT *ctx,
const PJ *target_crs,
PJ_AREA *area,
const char* const *options);
/*! @endcond Doxygen_Suppress */
/*! @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);
+1
View File
@@ -918,6 +918,7 @@ void pj_acquire_lock(void);
void pj_release_lock(void);
void pj_cleanup_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 * );
+1
View File
@@ -71,6 +71,7 @@
#define pj_is_latlong internal_pj_is_latlong
#define pj_latlong_from_proj internal_pj_latlong_from_proj
#define pj_log internal_pj_log
#define pj_log_active internal_pj_log_active
#define pj_malloc internal_pj_malloc
#define pj_open_lib internal_pj_open_lib
#define pj_pr_list internal_pj_pr_list

Some files were not shown because too many files have changed in this diff Show More