Compare commits

...
92 Commits
Author SHA1 Message Date
Kristian Evers 45b36ca276 Update version numbers for 6.2.1 2019-10-28 18:50:18 +01:00
Kristian Evers 0ff8ccf939 Update NEWS for 6.2.1 2019-10-28 18:37:05 +01:00
Kristian Evers d6bacb9197 Update man-pages from Sphinx-docs 2019-10-28 17:58:07 +01:00
Kristian Evers c206d14f68 Update ABI version numbers for 6.2.1 release 2019-10-28 17:53:05 +01:00
Kristian Evers e53e4c761c Merge pull request #1695 from OSGeo/backport-1681-to-6.2
[Backport 6.2] Add code of conduct
2019-10-26 17:04:19 +02:00
Even Rouault 9e1e248cbb Merge pull request #1692 from OSGeo/backport-1691-to-6.2
[Backport 6.2] importFromWkt(): fix axis orientation for non-standard ESRI WKT (fixes #1690)
2019-10-25 19:45:39 +02:00
Kristian Evers e5b6a41f19 Add code of conduct 2019-10-25 15:03:34 +00:00
Even Rouault f96f8ef4ff importFromWkt(): fix axis orientation for non-standard ESRI WKT (fixes #1690) 2019-10-25 09:04:16 +00:00
Kristian Evers 6976050e23 Merge pull request #1685 from OSGeo/backport-1683-to-6.2
[Backport 6.2] createOperations(): fix double vertical unit conversion from CompoundCRS to other CRS when the horizontal part of the projected CRS uses non-metre unit
2019-10-19 07:40:20 +02:00
backporting[bot] f94f1ddeaa [Backport 6.2] Fix segfaults in case of out-of-memory situations (#1684) (fixes #1678) 2019-10-18 22:40:53 +02:00
Even Rouault 00bac075a1 createOperations(): fix double vertical unit conversion from CompoundCRS to other CRS when the horizontal part of the projected CRS uses non-metre unit
Fix issue reported on https://lists.osgeo.org/pipermail/proj/2019-October/008939.html
2019-10-18 19:55:22 +00:00
Even Rouault 117ddfdc7f Merge pull request #1676 from OSGeo/backport-1675-to-6.2
[Backport 6.2] Use dedicated logo for website
2019-10-16 19:09:36 +02:00
Kristian Evers 9d29cd4901 Use dedicated logo for website
Fixes #1670
2019-10-16 12:02:33 +00:00
Even Rouault 5a641f872b Merge pull request #1668 from OSGeo/backport-1653-to-6.2
[Backport 6.2] ob_tran doc: fix/clarify semantics of o_lat_p/o_lon_p
2019-10-13 12:59:42 +02:00
Even Rouault c9c72da7a8 Merge pull request #1667 from rouault/backport-1665-to-6.2
[Backport 6.2] createOperations(): allow transforming from a compoundCRS of a bound verticalCRS to a 2D CRS
2019-10-12 14:52:58 +02:00
Even Rouault 572433ec4d createOperations(): allow transforming from a compoundCRS of a bound verticalCRS to a 2D CRS 2019-10-12 11:09:48 +02:00
Kristian Evers ad2ae23edc [Backport 6.2] Add logo to website (#1661)
[Backport 6.2] Add logo to website
2019-10-07 13:52:29 +02:00
Kristian Evers 0edea5f44f Add logo to website 2019-10-07 11:44:13 +00:00
Kristian Evers dca0125b0d Add PROJ log
Courtesy of Sylvain Beorchia. The logo is put under the CC-0 license.
2019-10-07 11:42:49 +00:00
Even Rouault 02f0500dbf Merge pull request #1658 from OSGeo/backport-1655-to-6.2
[Backport 6.2] aeqd: for spherical forward path, go to higher precision ellipsoidal case when the point coordinates are super close to the origin (fixes #1654)
2019-10-04 14:17:27 +02:00
Kristian Evers 91bcfd3e00 Doc: Update conda install procedure
The PROJ Conda package is now simply called "proj". Also mention that the grid packages can be installed with Conda.
2019-10-04 13:51:57 +02:00
Even Rouault 29b17b5e38 aeqd: for spherical forward path, go to higher precision ellipsoidal case when the point coordinates are super close to the origin (fixes #1654) 2019-10-03 18:49:26 +00:00
Even Rouault c1ef192087 ob_tran.cpp: add comment to link maths with Snyder's formulas 2019-10-03 12:05:44 +00:00
Even Rouault 168e5d4b53 ob_tran doc: fix/clarify semantics of o_lat_p/o_lon_p
This is a super confusing topic, but from experiments, and in particular with
the example of Fairgrieve projection, o_lat_p and o_lon_p are the coordinates
of the North pole of the unrotated geographic CRS expressed in the rotated
geographic CRS.
This is different from defining a 'new pole', which would be the coordinates
of the rotated North pole expressed in the unrotated CRS.
2019-10-03 11:58:19 +00:00
Even Rouault 07bbf14615 Merge pull request #1652 from OSGeo/backport-1651-to-6.2
[Backport 6.2] Only call pkg-config in configure when necessary
2019-10-03 11:33:42 +02:00
Jakob Egger 43ee3c7f54 Only call pkg-config in configure when necessary
Only call pkg-config in the configure script when the variables $SQLITE3_CFLAGS and $SQLITE3_LIBS are not set.

This allows building PROJ when pkg-config is not available.
2019-10-03 07:28:57 +00:00
Even Rouault 8238b66c07 Merge pull request #1646 from OSGeo/backport-1645-to-6.2
[Backport 6.2] PROJ string CRS ingester: recognize more unit-less parameters, and general handling of +key=string_value parameters
2019-09-30 20:55:59 +02:00
Even Rouault 8e461c373a PROJ string CRS ingester: recognize more unit-less parameters, and general handling of +key=string_value parameters 2019-09-28 10:48:17 +00:00
Even Rouault f0c148abf3 Merge pull request #1636 from OSGeo/backport-1633-to-6.2
Backport #1633 to 6.2
2019-09-28 10:19:50 +02:00
Even Rouault 9ddf2d4ced createOperations() sorting: sort operations that cannot be exported as PROJ pipelines at end 2019-09-28 01:48:18 +02:00
Even Rouault 1f66818745 Database: update to EPSG 9.8.2
With limitation of https://github.com/OSGeo/PROJ/issues/1632 regarding
concatenated operations with more than 3 steps.
2019-09-28 01:47:40 +02:00
Even Rouault b0b21db45f Merge pull request #1643 from rouault/backport-1641-to-6.2
[Backport 6.2] proj_create_crs_to_crs(): fix when there are only transformations with ballpark steps
2019-09-26 17:34:21 +02:00
Even Rouault 668d882938 proj_create_crs_to_crs(): fix when there are only transformations with ballpark steps
Currently we would discard all operations, resulting in a PJ object with
zero candidates. Better use those operations if nothing better is available.

Was seen on transforming from ETRS89 / UTM zone 31N + EGM96 height to WGS 84 (G1762).
The horizontal transformation from ETRS89 to WGS 84 (G1762) is a ballpark one.
2019-09-26 13:28:54 +02:00
Kristian Evers 36fb1cb5d7 Merge pull request #1639 from OSGeo/backport-1637-to-6.2
[Backport 6.2] io.cpp: fix build on Solaris
2019-09-26 07:17:58 +02:00
Even Rouault be819a1340 isea: avoid shadowing warning on 'quad' on Solaris
Patch proj-6.2.0-isea.gpatch by Eric Dechaux
2019-09-25 13:56:17 +00:00
Even Rouault 7806af71e8 hatano/mbtfpp: do not use CS to fix Solaris build issue
Patches proj-6.2.0-hanato.gpatch and proj-6.2.0-mbtfpp.gpatch from Eric Dechaux
2019-09-25 13:55:33 +00:00
Even Rouault 3854668626 io.cpp: fix build on Solaris
Rename CS template argument, to avoid conflict with macro in Solaris system headers.

Similar to 2f8bd93486
2019-09-24 13:35:01 +00:00
Even Rouault 3671063a1c Merge pull request #1628 from OSGeo/backport-1627-to-6.2
[Backport 6.2] Travis linux_gcc: force sphinxcontrib-bibtex version to avoid issue with installing sphinx >= 2.0
2019-09-22 14:00:51 +02:00
Even Rouault ae22375bb4 Travis linux_gcc: force sphinxcontrib-bibtex version to avoid issue with installing sphinx >= 2.0 2019-09-22 11:29:58 +00:00
Even Rouault a2a098dd9d Merge pull request #1622 from OSGeo/backport-1620-to-6.2
[Backport 6.2] Assorted set of fixes for boring oss-fuzz related errors (mostly divisions by zero in odd situations)
2019-09-19 13:08:02 +02:00
Even Rouault 02919fb712 ell_set.cpp: avoid division by zero in R_lat_a case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16130 2019-09-17 19:48:46 +00:00
Even Rouault 39ed5dda17 helmert: validate scale parameter to avoid later division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=16106 2019-09-17 19:41:15 +00:00
Even Rouault b66081ceef aea_e_inverse(): avoid calling asin() with invalid argument which results in NaN being propagated. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15336 2019-09-17 19:34:46 +00:00
Even Rouault f38eb52f1f pj_Convert_Geocentric_To_Geodetic(): avoid division by zero on weird input coordinates and ellipsoid values. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15148& 2019-09-17 19:10:56 +00:00
Even Rouault 2d783ecc18 isea: avoid undefined behaviour on left shift of negative value. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15009 2019-09-17 19:08:41 +00:00
Even Rouault bf53610d87 pj_Convert_Geocentric_To_Geodetic(): avoid division by zero on weird input coordinates and ellipsoid values. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14766 2019-09-17 19:01:04 +00:00
Even Rouault 374f934014 standard_fuzzer.cpp: tweak to be able to compile it against libproj.so 2019-09-17 19:00:24 +00:00
Even Rouault 9fc5330398 geos: avoid division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14666 2019-09-17 18:45:06 +00:00
Even Rouault d2ba2915ed eqdc: avoid potential division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=17190 2019-09-17 17:53:13 +00:00
Kristian Evers ae6f1a1760 Update link to Austrian grid files. Fixes #1546 2019-09-17 11:20:21 +02:00
Kristian Evers 03a01adf6c [Backport 6.2] Debug Bertin1953 (#1617)
[Backport 6.2] Debug Bertin1953
2019-09-17 09:47:37 +02:00
Kristian Evers bc662fef4c Update doc image for bertin1953 2019-09-16 08:13:55 +00:00
Kristian Evers 355f43ca41 [6.2 backport] cs2cs: autopromote CRS to 3D when there's a mix… (#1615)
[6.2 backport] cs2cs: autopromote CRS to 3D when there's a mix of 2D and 3D (fixes #1563)
2019-09-16 09:23:00 +02:00
Even Rouault 1aaca77c2a Merge pull request #1616 from OSGeo/backport-1614-to-6.2
[Backport 6.2] Fixes related to #1597
2019-09-15 22:38:14 +02:00
Even Rouault 83a14b87ae cs2cs: autopromote CRS to 3D when there's a mix of 2D and 3D (fixes #1563) 2019-09-15 18:39:46 +02:00
Even Rouault e35aa372af API: add CRS::promoteTo3D(), proj_crs_promote_to_3D() and proj_crs_create_projected_3D_crs_from_2D() (fixes #1587)
(projinfo changes adding --3d from master removed)
2019-09-15 18:39:07 +02:00
Even Rouault 73042b0139 Doc: add a section to document backward incompatibilies regarding the support of +init=epsg:XXXX syntax (relates to #1597) 2019-09-15 11:39:37 +00:00
Even Rouault e5a1ea29ca DatabaseContext::lookForGridInfo(): avoid setting PROJ context errno. Fixes issue with test/gigs/5208.gie with previous commit when ntf_r93.gsb grid is not available 2019-09-15 11:20:43 +00:00
Even Rouault 9e5807499c createFromPROJString(): ignore +no_defs when instanciating a '+init=epsg:xxxx +no_defs' string (related to #1597) 2019-09-15 11:20:43 +00:00
Even Rouault b7e7a3bd4a Ingestion of +proj=somerc +type=crs: avoid adding twice alpha, gamma, lon_0 (related to #1597) 2019-09-15 11:20:43 +00:00
Kristian Evers eb5906bb14 [Backport 6.2] Improve vertical transforms (#1613)
[Backport 6.2] Improve vertical transforms
2019-09-15 13:08:36 +02:00
Even Rouault bb1cac55e3 Merge pull request #1612 from OSGeo/backport-1610-to-6.2
[Backport 6.2] Fix support for +proj=ob_tran +o_proj=lonlat/latlong/latlon (only +o_proj=longlat worked) (fixes #1601)
2019-09-13 13:20:14 +02:00
Even Rouault f168e2397e createOperations(): when tranforming from a compoundCRS whose vertical component is a BoundCRS, do not apply the horizontal transformation twice 2019-09-13 12:19:57 +02:00
Even Rouault 29a5cae676 createOperations(): use more candidates when transforming between a geographic and vertical CRS
For example when transforming from NAD83+NAVD88 height to WGS84, there
is no transformation between NAVD88 height to WGS84. In that case,
use all potential transformations from NAVD88 height to another geographic CRS
for the vertical part.
2019-09-13 12:16:36 +02:00
Even Rouault 0316dc2b42 createOperations(): make sure sorting function is transitive (a < b and b < c --> a < c), to get consistent results 2019-09-13 12:05:10 +02:00
Even Rouault 8fb0f77ca5 Fix support for +proj=ob_tran +o_proj=lonlat/latlong/latlon (only +o_proj=longlat worked) (fixes #1601) 2019-09-13 00:28:24 +00:00
Even Rouault db6fdacc11 Merge pull request #1609 from OSGeo/backport-1603-to-6.2
[Backport 6.2] Improve migration code examples
2019-09-13 01:48:41 +02:00
Kai Pastor ea185460fa Improve migration code examples 2019-09-12 19:15:53 +00:00
Even Rouault f2d44f3a2e Merge pull request #1607 from OSGeo/backport-1604-to-6.2
[Backport 6.2] proj_trans_generic(): properly set coordinate time to HUGE_VAL when no value is passed to the function
2019-09-12 17:57:45 +02:00
Even Rouault 947b4ae116 Merge pull request #1606 from OSGeo/backport-1602-to-6.2
[Backport 6.2] createOperations(): fix conversion from/to PROJ.4 CRS strings with non-ISO-cosher options and towgs84/nadgrids
2019-09-12 17:57:11 +02:00
Even Rouault c87d0016e4 proj_trans_generic(): properly set coordinate time to HUGE_VAL when no value is passed to the function 2019-09-12 10:30:26 +00:00
Even Rouault 3f07b9e0fa createOperations(): fix conversion from/to PROJ.4 CRS strings with non-ISO-cosher options and towgs84/nadgrids
This actually fixes a regression introduced in PROJ 6.2.0
per 78302efb70
that made a conversion like EPSG:4326 to "+proj=something +towgs84/+nadgrids +over +type=crs"
apply the towgs84/nadgrids operation twice.
2019-09-11 17:25:35 +00:00
Kristian Evers 9e1e008830 [Backport 6.2] Make migration code examples compile (#1599)
[Backport 6.2] Make migration code examples compile
2019-09-11 15:00:02 +02:00
Kai Pastor 5172637ea7 Make migration code examples compile 2019-09-11 06:57:34 +00:00
Kristian Evers 8d914ab177 Fix gie test after applying fix to bertin1953 2019-09-10 07:23:03 +00:00
Even Rouault 3eb5780832 Merge pull request #1594 from OSGeo/backport-1589-to-6.2
[Backport 6.2] PROJStringParser::createFromPROJString(): avoid potential infinite recursion (fixes #1574)
2019-09-06 15:34:32 +02:00
Even Rouault 99a32f5734 Merge pull request #1593 from OSGeo/backport-1590-to-6.2
[Backport 6.2] BUG: add SANITIZE_CTX for coordoperation is_instantiable and has_ballpark_transformation
2019-09-06 15:33:27 +02:00
Even Rouault 03bb6478e4 Merge pull request #1592 from OSGeo/backport-1588-to-6.2
[Backport 6.2] Add link to Rust bindings
2019-09-06 11:29:33 +02:00
snowman2 cbb4a78920 BUG: add SANITIZE_CTX for coordoperation is_instantiable and has_ballpark_transformation 2019-09-06 01:37:49 +00:00
Even Rouault b0c17a4075 PROJStringParser::createFromPROJString(): avoid potential infinite recursion (fixes #1574)
The exact circumstances are a bit difficult to explain, but they involve
using a non-default context, enabling proj_context_use_proj4_init_rules() on it,
using proj_create(ctxt, "+init=epsg:XXXX +type=crs"), whereas PROJ_LIB is
defined to a directory that has a 'epsg' file in it.
2019-09-05 16:01:42 +00:00
Stephan Hügel 04cd73cab9 Add link to Rust bindings 2019-09-05 15:42:07 +00:00
Even Rouault 87c90fcaa8 Merge pull request #1586 from OSGeo/backport-1583-to-6.2
[Backport 6.2] proj_create_crs_to_crs_from_pj(): make the PJ* arguments const PJ*
2019-09-05 14:23:07 +02:00
Even Rouault 75aa2e9d03 proj_create_crs_to_crs_from_pj(): make the PJ* arguments const PJ*
This will make the life of C++ users using the C API slightly easier.
There's no ABI or API backward compatibility issue in doing that change as
constness of arguments is not retained in the C ABI, and any non-const
object passed as argument is implicitly converted as a const object if
that is what is mentionned in the argument list.
2019-09-04 13:17:51 +00:00
Even Rouault ba0c3c3bf8 proj_experimental.h: fix wrong comment forPJ_ELLIPSOIDAL_CS_2D_TYPE enum 2019-09-04 14:10:44 +02:00
R. Schmunk 8db35665e0 Debug Bertin1953
Northern hemisphere "warp" implemented incorrectly. See #1579
2019-09-03 19:56:03 +00:00
Kristian Evers 1098a06c48 [Backport 6.2] Doc: add link to final WKT2:2019 document (#1577)
[Backport 6.2] Doc: add link to final WKT2:2019 document
2019-09-02 13:01:48 +03:00
Kristian Evers 31509e8ceb [Backport 6.2] Fix spelling of Potsdam datum (#1575)
[Backport 6.2] Fix spelling of Potsdam datum
2019-09-01 19:41:02 +03:00
Kristian Evers 6ef8650a60 Update download links in the docs 2019-09-01 11:21:45 +02:00
Kristian Evers 973190a95a Add release notes for 6.2.0 to website 2019-09-01 09:38:51 +02:00
Kristian Evers 89d9cc6aa9 Make sure that website is build from the 6.2 branch 2019-09-01 09:28:30 +02:00
Kai Pastor 38119a4f2b Fix spelling of potsdam datum 2019-08-30 05:02:54 +00:00
Even Rouault 9e4088ac96 Doc: add link to final WKT2:2019 document 2019-08-27 20:45:56 +00:00
83 changed files with 2407 additions and 443 deletions
+2 -2
View File
@@ -95,9 +95,9 @@ colormsg(_HIBLUE_ "Configuring PROJ:")
#PROJ version information
################################################################################
include(ProjVersion)
proj_version(MAJOR 6 MINOR 2 PATCH 0)
proj_version(MAJOR 6 MINOR 2 PATCH 1)
set(PROJ_API_VERSION "17")
set(PROJ_BUILD_VERSION "17.0.2")
set(PROJ_BUILD_VERSION "17.1.2")
################################################################################
# Build features and variants
+77
View File
@@ -0,0 +1,77 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to make participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies within all project spaces, and it also applies when
an individual is representing the project or its community in public spaces.
Examples of representing a project or community include using an official
project e-mail address, posting via an official social media account, or acting
as an appointed representative at an online or offline event. Representation of
a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [kristianevers@gmail.com](mailto:kristianevers@gmail.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
+80
View File
@@ -1,3 +1,83 @@
6.2.1 Release Notes
-------------------
Updates
-------
o Update the EPSG database to version 9.8.2
Bug fixes
-------
o Fixed erroneous spelling of "Potsdam" (#1573)
o Calculate y-coordinate correctly in bertin1953 in all cases (#1579)
o proj_create_crs_to_crs_from_pj(): make the PJ* arguments const PJ* (#1583)
o PROJStringParser::createFromPROJString(): avoid potential infinite
recursion (#1574)
o Avoid core dump when setting ctx==NULL in functions
proj_coordoperation_is_instantiable and
proj_coordoperation_has_ballpark_transformation (#1590)
o createOperations(): fix conversion from/to PROJ.4 CRS strings with
non-ISO-kosher options and +towgs84/+nadgrids (#1602)
o proj_trans_generic(): properly set coordinate time to HUGE_VAL when no
value is passed to the function (#1604)
o Fix support for +proj=ob_tran +o_proj=lonlat/latlong/latlon instead of only
only allowing +o_proj=longlat (#1601)
o Improve backwards compatibility of vertical transforms (#1613)
o Improve emulation of deprecated +init style initialization (#1614)
o cs2cs: autopromote CRS to 3D when there's a mix of 2D and 3D (#1563)
o Avoid divisions by zero in odd situations (#1620)
o Avoid compile error on Solaris (#1639)
o proj_create_crs_to_crs(): fix when there are only transformations with
ballpark steps (#1643)
o PROJ string CRS ingester: recognize more unit-less parameters, and general
handling of +key=string_value parameters (#1645)
o Only call pkg-config in configure when necessary (#1652)
o aeqd: for spherical forward path, go to higher precision ellipsoidal
case when the point coordinates are super close to the origin (#1654)
o proj_create_crs_to_crs(): remove elimination of Ballpark operations
that caused transformation failures in some cases (#1665)
o createOperations(): allow transforming from a compoundCRS of a bound
verticalCRS to a 2D CRS (#1667)
o Avoid segfaults in case of out-of-memory situations (#1679)
o createOperations(): fix double vertical unit conversion from CompoundCRS
to other CRS when the horizontal part of the projected CRS uses non-metre
unit (#1683)
o importFromWkt(): fix axis orientation for non-standard ESRI WKT (#1690)
THANKS TO
---------
R. Schmunk
Jakob Egger
Alan D. Snow
Stephan Hügel
Kai Pastor
Kristian Evers
Even Rouault
6.2.0 Release Notes
-------------------
+1
View File
@@ -5,6 +5,7 @@
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/PROJ/badge.svg?branch=master)](https://coveralls.io/github/OSGeo/PROJ?branch=master)
[![Gitter](https://badges.gitter.im/OSGeo/proj.4.svg)](https://gitter.im/OSGeo/proj.4)
[![Mailing List](https://img.shields.io/badge/PROJ-mailing%20list-4eb899.svg)](http://lists.osgeo.org/mailman/listinfo/proj)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](code-of-conduct.md)
PROJ is a generic coordinate transformation software, that transforms
coordinates from one coordinate reference system (CRS) to another.
+4 -2
View File
@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([PROJ], [6.2.0],
AC_INIT([PROJ], [6.2.1],
[https://github.com/OSGeo/PROJ/issues], proj, [https://proj.org])
AC_CONFIG_MACRO_DIR([m4])
AC_LANG(C)
@@ -307,7 +307,9 @@ dnl ---------------------------------------------------------------------------
dnl Check for sqlite3 library and binary
dnl ---------------------------------------------------------------------------
PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.7])
if test "x$SQLITE3_CFLAGS$SQLITE3_LIBS" = "x" ; then
PKG_CHECK_MODULES([SQLITE3], [sqlite3 >= 3.7])
fi
AC_SUBST(SQLITE3_CFLAGS,$SQLITE3_CFLAGS)
AC_SUBST(SQLITE3_LIBS,$SQLITE3_LIBS)
+11 -1
View File
@@ -8,7 +8,7 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6211','Genuk','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6218','Bogota','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6222','South Africa','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6227','Levant','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83 (1986)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83(1986)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6272','GD49','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6308','Rikets koordinatsystem 1938','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5100','MSL','EPSG');
@@ -418,9 +418,13 @@ INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1215','SVS2010','EPSG')
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1036','RGM04','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1038','RGSPM06','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1216','SRB_VRS12','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6220','Camacupa','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1219','MVGC','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1218','MGD-2000','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1218','MTRF-2000','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1220','Rede Permanentes de Estaciones GNSS de Angola','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1220','RSAO13','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1220','REPANGOL','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1205','Zero Depth Point (ZDP)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1223','RGWF96','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1224','TWVD 2001','EPSG');
@@ -463,8 +467,14 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1035','REGCAN95','EPSG'
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6761','HTRS96','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1047','RRAF91','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1251','KOSOVAREF12','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83(Original)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1221','NAD83(MARP00)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1249','NAD83(PACP00)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1064','SIRGAS-Chile 2002','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1251','KOSOVAREF01','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1251','KOSOVAREF01 (2012)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1252','SIRGAS-Chile 2013','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1253','SIRGAS-Chile 2016','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1042','Red Geodesica Nacional 1992','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1046','Morro do Papagaio','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1046','Island of Principe datum','EPSG');
+40 -12
View File
@@ -299,7 +299,7 @@ INSERT INTO "area" VALUES('EPSG','1319','Venezuela - Maracaibo area','Venezuela
INSERT INTO "area" VALUES('EPSG','1320','Venezuela - Maturin','Venezuela - Maturin area.',9.1,10.13,-64.3,-63.0,0);
INSERT INTO "area" VALUES('EPSG','1321','Europe - Austria and former Yugoslavia onshore','Austria. Bosnia and Herzegovina. Croatia - onshore. Kosovo. Montenegro - onshore. North Macedonia. Serbia. Slovenia - onshore.',40.85,49.02,9.53,23.04,0);
INSERT INTO "area" VALUES('EPSG','1322','Trinidad and Tobago - Tobago - onshore','Trinidad and Tobago - Tobago - onshore.',11.08,11.41,-60.9,-60.44,0);
INSERT INTO "area" VALUES('EPSG','1323','USA - CONUS - onshore','United States (USA) - onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',24.41,49.38,-124.79,-66.91,0);
INSERT INTO "area" VALUES('EPSG','1323','USA - CONUS - onshore','United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',24.41,49.38,-124.79,-66.91,0);
INSERT INTO "area" VALUES('EPSG','1324','USA (all states)','United States (USA) - onshore and offshore - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',15.56,74.71,167.65,-65.69,0);
INSERT INTO "area" VALUES('EPSG','1325','North America - Canada and USA (CONUS, Alaska mainland)','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. United States (USA) - Alabama; Alaska (mainland); Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',23.81,86.46,-172.54,-47.74,0);
INSERT INTO "area" VALUES('EPSG','1326','France - mainland onshore','France - mainland onshore.',42.33,51.14,-4.87,8.23,0);
@@ -583,7 +583,7 @@ INSERT INTO "area" VALUES('EPSG','1603','Colombia - offshore Caribbean west of 7
INSERT INTO "area" VALUES('EPSG','1604','Angola - Angola proper - offshore','Angola - Angola proper - offshore.',-17.26,-6.01,8.2,13.86,0);
INSERT INTO "area" VALUES('EPSG','1605','Angola - offshore block 15','Angola - offshore block 15.',-6.59,-6.03,10.83,11.67,0);
INSERT INTO "area" VALUES('EPSG','1606','Angola - Angola proper - offshore - west of 12°E','Angola - Angola proper - offshore - west of 12°E.',-17.26,-6.03,8.2,12.0,0);
INSERT INTO "area" VALUES('EPSG','1607','Angola - 12°E to 18°E','Angola - Angola proper between 12°E and 18°E.',-17.44,-5.82,12.0,18.0,0);
INSERT INTO "area" VALUES('EPSG','1607','Angola - Angola proper - 12°E to 18°E','Angola - Angola proper between 12°E and 18°E.',-17.44,-5.82,12.0,18.0,0);
INSERT INTO "area" VALUES('EPSG','1608','Argentina - west of 70.5°W','Argentina - west of 70°30''W.',-52.0,-36.16,-73.59,-70.5,0);
INSERT INTO "area" VALUES('EPSG','1609','Argentina - 70.5°W to 67.5°W onshore','Argentina - between 70°30''W and 67°30''W, onshore.',-54.9,-24.08,-70.5,-67.49,0);
INSERT INTO "area" VALUES('EPSG','1610','Argentina - 67.5°W to 64.5°W onshore','Argentina - between 67°30''W and 64°30''W, onshore.',-55.11,-21.78,-67.5,-64.49,0);
@@ -1949,14 +1949,14 @@ INSERT INTO "area" VALUES('EPSG','2969','Mauritania - east of 6°W','Mauritania
INSERT INTO "area" VALUES('EPSG','2970','Mauritania - 12°W to 6°W','Mauritania - between 12°W and 6°W.',14.75,27.3,-12.0,-6.0,0);
INSERT INTO "area" VALUES('EPSG','2971','Mauritania - west of 12°W onshore','Mauritania - onshore west of 12°W.',14.72,23.46,-17.08,-12.0,0);
INSERT INTO "area" VALUES('EPSG','2972','Mauritania - Nouakchutt','Mauritania - Nouakchutt.',17.89,18.25,-16.11,-15.83,0);
INSERT INTO "area" VALUES('EPSG','2973','USA - CONUS south of 41°N, west of 112°W - onshore','United States (USA) - CONUS south of 41°N and west of 112°W - onshore - Arizona; California; Nevada; Utah.',31.64,41.0,-124.45,-112.0,0);
INSERT INTO "area" VALUES('EPSG','2974','USA - CONUS south of 41°N, 112°W to 95°W - onshore','United States (USA) - CONUS south of 41°N and between 112°W and 95°W - onshore - Arizona; Colorado; Iowa; Kansas; Missouri; Nebraska; New Mexico; Oklahoma; Texas; Utah.',25.83,41.01,-112.0,-94.99,0);
INSERT INTO "area" VALUES('EPSG','2975','USA - CONUS south of 41°N, 95°W to 78°W - onshore','United States (USA) - CONUS south of 41°N and between 95°W and 78°W - onshore - Alabama; Arkansas; Florida; Georgia; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maryland; Mississippi; Missouri; North Carolina; Ohio; Oklahoma; Pennsylvania; South Carolina; Tennessee; Texas; Virginia; West Virginia.',24.41,41.01,-95.0,-77.99,0);
INSERT INTO "area" VALUES('EPSG','2976','USA - CONUS south of 41°N, east of 78°W - onshore','United States (USA) - CONUS south of 41°N and east of 78°W - onshore - Delaware; Maryland; New Jersey; New York; North Carolina; Pennsylvania; Virginia; West Virginia.',33.84,41.01,-78.0,-71.9,0);
INSERT INTO "area" VALUES('EPSG','2977','USA - CONUS north of 41°N, west of 112°W - onshore','United States (USA) - CONUS north of 41°N and west of 112°W - onshore - California; Idaho; Montana; Nevada; Oregon; Utah; Washington.',41.0,49.05,-124.79,-112.0,0);
INSERT INTO "area" VALUES('EPSG','2978','USA - CONUS north of 41°N, 112°W to 95°W','United States (USA) - CONUS north of 41°N and between 112°W and 95°W. Idaho; Iowa; Minnesota; Montana; Nebraska; North Dakota; South Dakota; Utah; Wyoming.',41.0,49.38,-112.0,-95.0,0);
INSERT INTO "area" VALUES('EPSG','2979','USA - CONUS north of 41°N, 95°W to 78°W','United States (USA) - CONUS north of 41°N and between 95°W and 78°W. Illinois; Indiana; Iowa; Michigan; Minnesota; New York; Ohio; Pennsylvania; Wisconsin.',41.0,49.37,-95.0,-77.99,0);
INSERT INTO "area" VALUES('EPSG','2980','USA - CONUS north of 41°N, east of 78°W - onshore','United States (USA) - CONUS north of 41°N and east of 78°W - onshore - Connecticut; Maine; Massachusetts; New Hampshire; New Jersey; New York; Pennsylvania; Rhode Island; Vermont.',41.0,47.47,-78.0,-66.91,0);
INSERT INTO "area" VALUES('EPSG','2973','USA - CONUS south of 41°N, west of 112°W - onshore','United States (USA) - CONUS onshore south of 41°N and west of 112°W - Arizona west of 112°W; California and Nevada south of 41°N; Utah south of 41°N and west of 112°W.',31.64,41.0,-124.45,-112.0,0);
INSERT INTO "area" VALUES('EPSG','2974','USA - CONUS south of 41°N, 112°W to 95°W - onshore','United States (USA) - CONUS onshore south of 41°N and between 112°W and 95°W - Colorado and New Mexico; Arizona east of 112°W; Utah south of 41°N and east of 112°W; Nebraska south of 41°N; Iowa south of 41°N and west of 95°W; Kansas, Missouri, Oklahoma and Texas west of 95°W.',25.83,41.01,-112.0,-94.99,0);
INSERT INTO "area" VALUES('EPSG','2975','USA - CONUS south of 41°N, 95°W to 78°W - onshore','United States (USA) - CONUS onshore south of 41°N and between 95°W and 78°W - Alabama, Arkansas, Florida, Georgia, Kentucky, Louisiana, Mississippi, South Carolina and Tennessee; Kansas, Missouri, Oklahoma and Texas east of 95°W; Iowa south of 41°N and east of 95°W; Illinois, Indiana and Ohio south of 41°N; Pennsylvania south of 41°N and west of 78°W; Maryland, North Carolina, Virginia and West Virginia west of 78°W.',24.41,41.01,-95.0,-77.99,0);
INSERT INTO "area" VALUES('EPSG','2976','USA - CONUS south of 41°N, east of 78°W - onshore','United States (USA) - CONUS onshore - south of 41°N and east of 78°W - Delaware; Maryland, North Carolina, Virginia and West Virginia east of 78°W; Pennsylvania south of 41°N and east of 78°W; New Jersey and New York south of 41°N.',33.84,41.01,-78.0,-71.9,0);
INSERT INTO "area" VALUES('EPSG','2977','USA - CONUS north of 41°N, west of 112°W - onshore','United States (USA) - CONUS onshore north of 41°N and west of 112°W - Oregon and Washington; California and Nevada north of 41°N; Utah north of 41°N and west of 112°W; Idaho and Montana west of 112°W.',41.0,49.05,-124.79,-112.0,0);
INSERT INTO "area" VALUES('EPSG','2978','USA - CONUS north of 41°N, 112°W to 95°W','United States (USA) - CONUS north of 41°N and between 112°W and 95°W - North Dakota, South Dakota and Wyoming; Idaho and Montana east of 112°W; Utah north of 41°N and east of 112°W; Nebraska north of 41°N; Iowa north of 41°N and west of 95°W; Minnesota west of 95°W.',41.0,49.38,-112.0,-95.0,0);
INSERT INTO "area" VALUES('EPSG','2979','USA - CONUS north of 41°N, 95°W to 78°W','United States (USA) - CONUS north of 41°N and between 95°W and 78°W - Michigan and Wisconsin; Minnesota east of 95°W; Iowa north of 41°N and east of 95°W; Illinois, Indiana and Ohio north of 41°N; Pennsylvania north of 41°N and west of 78°W; New York west of 78°W.',41.0,49.37,-95.0,-77.99,0);
INSERT INTO "area" VALUES('EPSG','2980','USA - CONUS north of 41°N, east of 78°W - onshore','United States (USA) - CONUS onshore north of 41°N and east of 78°W - Connecticut, Maine, Massachusetts, New Hampshire, Rhode Island and Vermont; New Jersey north of 41°N; New York and Pennsylvania north of 41°N and east of 78°W.',41.0,47.47,-78.0,-66.91,0);
INSERT INTO "area" VALUES('EPSG','2981','Nigeria - offshore','Nigeria - offshore.',1.92,6.38,2.66,8.49,0);
INSERT INTO "area" VALUES('EPSG','2982','Pakistan - Karachi','Pakistan - Karachi licence area.',24.69,25.76,66.83,68.0,0);
INSERT INTO "area" VALUES('EPSG','2983','Pakistan - East Sind','Pakistan - East Sind.',24.16,28.61,68.27,71.14,0);
@@ -3194,7 +3194,7 @@ INSERT INTO "area" VALUES('EPSG','4214','Papua New Guinea - mainland onshore','P
INSERT INTO "area" VALUES('EPSG','4215','Vietnam - 103.5°E to 106.5°E onshore','Vietnam - between 103°30''E and 106°30''E, onshore.',8.5,23.33,103.5,106.51,0);
INSERT INTO "area" VALUES('EPSG','4216','Papua New Guinea - North Fly','Papua New Guinea - North Fly area (between 5°04''S and 6°36''S and west of 141°32''E).',-6.6,-5.05,140.89,141.54,0);
INSERT INTO "area" VALUES('EPSG','4217','Vietnam - east of 106.5°E onshore','Vietnam - onshore east of 106°30''E.',8.58,22.94,106.5,109.52,0);
INSERT INTO "area" VALUES('EPSG','4218','Vietnam - Da Nang','Vietnam - Da Nang municipality.',15.9,16.25,107.81,108.4,0);
INSERT INTO "area" VALUES('EPSG','4218','Vietnam - Quang Ninh; Da Nang, Quang Nam; Ba Ria-Vung Tau, Dong Nai, Lam Dong','Vietnam - Quang Ninh province; Da Nang municipality and Quang Nam province; Ba Ria-Vung Tau, Dong Nai and Lam Dong provinces.',8.57,21.67,106.43,108.76,0);
INSERT INTO "area" VALUES('EPSG','4219','USA - Iowa - Mason City','United States (USA) - Iowa - counties of Cerro Gordo; Chickasaw; Floyd; Hancock; Howard; Mitchell; Winnebago; Winneshiek; Worth.',42.9,43.51,-93.98,-91.6,0);
INSERT INTO "area" VALUES('EPSG','4220','Equatorial Guinea - Bioko','Equatorial Guinea - Bioko onshore.',3.14,3.82,8.37,9.02,0);
INSERT INTO "area" VALUES('EPSG','4221','Chile - onshore 36°S to 43.5°S','Chile - onshore between 36°S and 43°30''S.',-43.5,-35.99,-74.48,-70.39,0);
@@ -3492,7 +3492,7 @@ INSERT INTO "area" VALUES('EPSG','4512','USA - Kansas - Coffeyville','United Sta
INSERT INTO "area" VALUES('EPSG','4513','USA - Kansas - Pittsburg','United States (USA) - Kansas - counties of Allen; Anderson; Bourbon; Cherokee; Crawford; Franklin; Labette; Linn; Miami; Neosho.',36.99,38.74,-95.53,-94.6,0);
INSERT INTO "area" VALUES('EPSG','4514','Pacific - Guam and NMI west of 144°E','Guam and Northern Mariana Islands; offshore west of 144°E.',10.95,23.9,141.19,144.01,0);
INSERT INTO "area" VALUES('EPSG','4515','USA - FBN','American Samoa - Tutuila, Aunu''u, Ofu, Olesega, Ta''u and Rose islands - onshore. Guam - onshore. Northern Mariana Islands - onshore. Puerto Rico - onshore. United States (USA) – CONUS - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming - onshore plus Gulf of Mexico offshore continental shelf (GoM OCS). US Virgin Islands - onshore.',-14.59,49.38,144.58,-64.51,0);
INSERT INTO "area" VALUES('EPSG','4516','USA - CONUS and GoM','United States (USA) – CONUS - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming - onshore plus Gulf of Mexico offshore continental shelf (GoM OCS).',23.82,49.38,-124.79,-66.91,0);
INSERT INTO "area" VALUES('EPSG','4516','USA - CONUS and GoM','United States (USA) - CONUS onshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico offshore continental shelf (GoM OCS).',23.82,49.38,-124.79,-66.91,0);
INSERT INTO "area" VALUES('EPSG','4517','Canada - NAD27','Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast.',40.04,83.17,-141.01,-47.74,0);
INSERT INTO "area" VALUES('EPSG','4518','Pacific - Guam and NMI east of 144°E','Guam and Northern Mariana Islands; onshore and offshore east of 144°E.',11.05,23.9,144.0,149.55,0);
INSERT INTO "area" VALUES('EPSG','4519','Algeria - 32°N to 34°39''N','Algeria - 35.6 grads to 38.5 grads North (32°N to 34°39''N).',31.99,34.66,-2.95,9.09,0);
@@ -3508,6 +3508,34 @@ INSERT INTO "area" VALUES('EPSG','4528','Saudi Arabia - 48°E to 54°E','Saudi A
INSERT INTO "area" VALUES('EPSG','4530','Latin America - Central America and South America','Latin America - Central America and South America, onshore and offshore.',-59.87,32.72,-122.19,-25.28,0);
INSERT INTO "area" VALUES('EPSG','4531','Costa Rica - offshore Caribbean','Costa Rica - offshore - Caribbean sea.',9.6,11.77,-83.6,-81.43,0);
INSERT INTO "area" VALUES('EPSG','4532','Costa Rica - offshore Pacific','Costa Rica - offshore Pacific ocean and onshore Coco Island.',2.15,11.11,-90.45,-82.92,0);
INSERT INTO "area" VALUES('EPSG','4533','Canada - British Columbia - CRD','Canada - British Columbia - Vancouver Island - Capital Regional District.',48.25,49.06,-124.52,-123.0,0);
INSERT INTO "area" VALUES('EPSG','4534','Canada - British Columbia - north Vancouver Is','Canada - British Columbia - north Vancouver Island.',48.48,50.93,-128.5,-123.49,0);
INSERT INTO "area" VALUES('EPSG','4535','Canada - British Columbia - mainland','Canada - British Columbia - mainland and Graham Island.',48.99,60.01,-139.04,-114.08,0);
INSERT INTO "area" VALUES('EPSG','4536','Canada - Ontario - Toronto','Canada - Ontario - Toronto.',43.58,43.86,-79.64,-79.11,0);
INSERT INTO "area" VALUES('EPSG','4537','Canada - Ontario ex. Toronto','Canada - Ontario excluding Toronto.',41.67,56.9,-95.16,-74.35,0);
INSERT INTO "area" VALUES('EPSG','4538','Vietnam - Son La','Vietnam - Son La province.',20.57,22.04,103.21,105.03,0);
INSERT INTO "area" VALUES('EPSG','4539','Angola - east of 18°E','Angola - east of 18°E.',-18.02,-6.91,17.99,24.09,0);
INSERT INTO "area" VALUES('EPSG','4540','Africa - South Africa, Lesotho and Eswatini.','Eswatini (Swaziland); Lesotho; South Africa - onshore and offshore.',-50.32,-22.13,13.33,42.85,0);
INSERT INTO "area" VALUES('EPSG','4541','Vietnam - Dien Bien and Lai Chau','Vietnam - Dien Bien and Lai Chau provinces.',20.89,22.82,102.14,103.99,0);
INSERT INTO "area" VALUES('EPSG','4542','Kosovo','Kosovo.',41.85,43.25,19.97,21.8,0);
INSERT INTO "area" VALUES('EPSG','4543','Serbia','Serbia including Vojvodinja.',42.23,46.19,18.81,23.01,0);
INSERT INTO "area" VALUES('EPSG','4544','North America - Canada, US (Conus+AK), PRVI','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands.',14.92,86.46,167.65,-47.74,0);
INSERT INTO "area" VALUES('EPSG','4545','Vietnam - Ca Mau and Kien Giang','Vietnam - Ca Mau and Kien Giang provinces.',8.33,10.55,103.4,105.54,0);
INSERT INTO "area" VALUES('EPSG','4546','Vietnam - An Giang, Lao Cai, Nghe An, Phu Tho, Yen Bai','Vietnam - An Giang, Lao Cai, Nghe An, Phu Tho and Yen Bai provinces.',10.18,22.85,103.53,105.86,0);
INSERT INTO "area" VALUES('EPSG','4547','Vietnam - 104°20''E to 106°10''E by province - Hanoi','Vietnam - Ha Noi city, Ha Nam, Ha Tay, Ninh Binh, Thanh Hoa and Vinh Phuc provinces; Can Tho city, Bac Lieu, Dong Thap and Hau Giang provinces.',8.97,21.58,104.37,106.19,0);
INSERT INTO "area" VALUES('EPSG','4548','Vietnam - 104°20''E to 106°40''E by province','Vietnam - Bac Ninh, Ha Giang, Ha Tinh, Hai Duong, Hung Yen, Nam Dinh, Soc Trang, Tay Ninh, Thai Binh, Tra Vinh and Vinh Long provinces.',9.19,23.4,104.33,106.69,0);
INSERT INTO "area" VALUES('EPSG','4549','Vietnam - 105°15''E to 107°50''E by province - HCMC','Vietnam - Hai Phong and Ho Chi Minh cities; Ben Tre, Binh Duong, Cao Bang, Long An and Tien Giang provinces.',9.75,23.12,105.26,107.8,0);
INSERT INTO "area" VALUES('EPSG','4550','Vietnam - Hoa Binh, Quang Binh and Tuyen Quang','Vietnam - Hoa Binh, Quang Binh and Tuyen Quang provinces.',16.92,22.7,104.83,107.03,0);
INSERT INTO "area" VALUES('EPSG','4551','Angola - west of 12°E','Angola - west of 12°E, onshore and offshore.',-17.28,-5.03,8.2,12.01,0);
INSERT INTO "area" VALUES('EPSG','4552','Vietnam - Binh Phuoc and Quang Tri','Vietnam - Binh Phuoc and Quang Tri provinces.',11.3,17.22,106.41,107.43,0);
INSERT INTO "area" VALUES('EPSG','4553','Vietnam - Bac Kan and Thai Nguyen','Vietnam - Bac Kan and Thai Nguyen provinces.',21.32,22.75,105.43,106.25,0);
INSERT INTO "area" VALUES('EPSG','4554','Vietnam - Bac Giang and Thua Thien-Hue','Vietnam - Bac Giang and Thua Thien-Hue provinces.',15.99,21.63,105.88,108.24,0);
INSERT INTO "area" VALUES('EPSG','4555','Angola - 12°E to 18°E','Angola - between 12°E and 18°E, onshore and offshore.',-17.44,-4.38,12.0,18.0,0);
INSERT INTO "area" VALUES('EPSG','4556','Vietnam - Lang Son','Vietnam - Lang Son province.',21.32,22.47,106.09,107.37,0);
INSERT INTO "area" VALUES('EPSG','4557','Vietnam - Kon Tum','Vietnam - Kon Tum province.',13.92,15.42,107.33,108.55,0);
INSERT INTO "area" VALUES('EPSG','4558','Vietnam - Quang Ngai','Vietnam - Quang Ngai province.',14.53,15.49,108.23,109.2,0);
INSERT INTO "area" VALUES('EPSG','4559','Vietnam - Binh Dinh, Khanh Hoa, Ninh Thuan','Vietnam - Binh Dinh, Khanh Hoa and Ninh Thuan provinces.',11.25,14.71,108.55,109.53,0);
INSERT INTO "area" VALUES('EPSG','4560','Vietnam - Binh Thuan, Dak Lak, Dak Nong, Gia Lai, Phu Yen','Vietnam - Binh Thuan, Dak Lak, Dak Nong, Gia Lai and Phu Yen provinces.',10.43,14.61,107.2,109.52,0);
INSERT INTO "area" VALUES('EPSG','4566','Europe - offshore North Sea - Germany and Netherlands east of 5°E','Germany - offshore North Sea. Netherlands - offshore east of 5E.',53.49,55.92,3.34,8.88,0);
INSERT INTO "area" VALUES('EPSG','4567','South Africa - mainland - onshore and offshore','South Africa - mainland - onshore and offshore.',-38.17,-22.13,13.33,36.54,0);
INSERT INTO "area" VALUES('EPSG','4568','South Africa - Prince Edward islands - onshore and offshore','South Africa - Marion Island and Prince Edward Island - onshore and offshore.',-50.32,-43.26,32.71,42.85,0);
+18 -1
View File
@@ -207,7 +207,7 @@ INSERT INTO "conversion" VALUES('EPSG','5889','JAXA Snow Depth Polar Stereograph
INSERT INTO "conversion" VALUES('EPSG','5892','Vietnam TM-3 zone 481',NULL,NULL,'EPSG','4193','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',102.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5893','Vietnam TM-3 zone 482',NULL,NULL,'EPSG','4215','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',105.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5894','Vietnam TM-3 zone 491',NULL,NULL,'EPSG','4217','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',108.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5895','Vietnam TM-3 Da Nang zone',NULL,NULL,'EPSG','4218','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5895','Vietnam TM-3 107-45',NULL,NULL,'EPSG','4218','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5901','EPSG Alaska Polar Stereographic',NULL,NULL,'EPSG','1996','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-150.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5902','EPSG Canada Polar Stereographic',NULL,NULL,'EPSG','1996','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-100.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','5903','EPSG Greenland Polar Stereographic',NULL,NULL,'EPSG','1996','EPSG','9810','Polar Stereographic (variant A)','EPSG','8801','Latitude of natural origin',90.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',-33.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.994,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',2000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
@@ -860,6 +860,23 @@ INSERT INTO "conversion" VALUES('EPSG','8825','Idaho Transverse Mercator',NULL,N
INSERT INTO "conversion" VALUES('EPSG','8854','Equal Earth Greenwich',NULL,NULL,'EPSG','1262','EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','8855','Equal Earth Americas',NULL,NULL,'EPSG','1262','EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','8856','Equal Earth Asia-Pacific',NULL,NULL,'EPSG','1262','EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9058','Vietnam TM-3 103-00',NULL,NULL,'EPSG','4541','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',103.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9190','NIWA Albers',NULL,NULL,'EPSG','3508','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',175.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-30.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-50.0,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9192','Vietnam TM-3 104-00',NULL,NULL,'EPSG','4538','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',104.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9193','Vietnam TM-3 104-30',NULL,NULL,'EPSG','4545','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',104.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9194','Vietnam TM-3 104-45',NULL,NULL,'EPSG','4546','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',104.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9195','Vietnam TM-3 105-30',NULL,NULL,'EPSG','4548','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9196','Vietnam TM-3 105-45',NULL,NULL,'EPSG','4549','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',105.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9197','Vietnam TM-3 106-00',NULL,NULL,'EPSG','4550','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',106.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9198','Vietnam TM-3 106-15',NULL,NULL,'EPSG','4552','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',106.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9199','Vietnam TM-3 106-30',NULL,NULL,'EPSG','4553','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',106.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9200','Vietnam TM-3 107-00',NULL,NULL,'EPSG','4554','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9201','Vietnam TM-3 107-15',NULL,NULL,'EPSG','4556','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9202','Vietnam TM-3 107-30',NULL,NULL,'EPSG','4557','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',107.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9203','Vietnam TM-3 108-15',NULL,NULL,'EPSG','4559','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',108.15,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9204','Vietnam TM-3 108-30',NULL,NULL,'EPSG','4560','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',108.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9219','South Africa Basic Survey Unit Albers 25E',NULL,NULL,'EPSG','4567','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-30.0,'EPSG','9102','EPSG','8822','Longitude of false origin',25.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-22.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-38.0,'EPSG','9102','EPSG','8826','Easting at false origin',1400000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9220','South Africa Basic Survey Unit Albers 44E',NULL,NULL,'EPSG','4568','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-42.0,'EPSG','9102','EPSG','8822','Longitude of false origin',44.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-34.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-50.0,'EPSG','9102','EPSG','8826','Easting at false origin',1200000.0,'EPSG','9001','EPSG','8827','Northing at false origin',1300000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','10101','Alabama CS27 East zone',NULL,NULL,'EPSG','2154','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','10102','Alabama CS27 West zone',NULL,NULL,'EPSG','2155','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','10131','SPCS83 Alabama East zone (meters)',NULL,NULL,'EPSG','2154','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+26 -4
View File
@@ -160,7 +160,7 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','4215','Belge 1950',NULL,NULL,'geograph
INSERT INTO "geodetic_crs" VALUES('EPSG','4216','Bermuda 1957',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6216','EPSG','3221',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4218','Bogota 1975',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6218','EPSG','3686',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4219','Bukit Rimpah',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6219','EPSG','1287',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4220','Camacupa',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6220','EPSG','1288',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4220','Camacupa 1948',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6220','EPSG','1029',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4221','Campo Inchauspe',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6221','EPSG','3843',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4222','Cape',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6222','EPSG','1290',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4223','Carthage',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6223','EPSG','1236',NULL,0);
@@ -664,9 +664,9 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','5342','POSGAR 2007',NULL,NULL,'geograp
INSERT INTO "geodetic_crs" VALUES('EPSG','5352','MARGEN',NULL,NULL,'geocentric','EPSG','6500','EPSG','1063','EPSG','1049',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5353','MARGEN',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1063','EPSG','1049',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5354','MARGEN',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1063','EPSG','1049',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5358','SIRGAS-Chile',NULL,NULL,'geocentric','EPSG','6500','EPSG','1064','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5359','SIRGAS-Chile',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1064','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5360','SIRGAS-Chile',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1064','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5358','SIRGAS-Chile 2002',NULL,NULL,'geocentric','EPSG','6500','EPSG','1064','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5359','SIRGAS-Chile 2002',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1064','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5360','SIRGAS-Chile 2002',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1064','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5363','CR05',NULL,NULL,'geocentric','EPSG','6500','EPSG','1065','EPSG','1074',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5364','CR05',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1065','EPSG','1074',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','5365','CR05',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1065','EPSG','1074',NULL,0);
@@ -892,6 +892,10 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','8545','NAD83(HARN Corrected)',NULL,NUL
INSERT INTO "geodetic_crs" VALUES('EPSG','8683','SRB_ETRS89',NULL,NULL,'geocentric','EPSG','6500','EPSG','1214','EPSG','4543',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8684','SRB_ETRS89',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1214','EPSG','4543',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8685','SRB_ETRS89',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1214','EPSG','4543',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8694','Camacupa 2015',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1217','EPSG','1029',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8697','RSAO13',NULL,NULL,'geocentric','EPSG','6500','EPSG','1220','EPSG','1029',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8698','RSAO13',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1220','EPSG','1029',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8699','RSAO13',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1220','EPSG','1029',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8816','MTRF-2000',NULL,NULL,'geocentric','EPSG','6500','EPSG','1218','EPSG','1206',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8817','MTRF-2000',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1218','EPSG','1206',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8818','MTRF-2000',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1218','EPSG','1206',NULL,0);
@@ -937,6 +941,9 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','8943','SIRGAS-CON SIR15P01',NULL,NULL,
INSERT INTO "geodetic_crs" VALUES('EPSG','8944','SIRGAS-CON SIR15P01',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1241','EPSG','4530',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8945','SIRGAS-CON SIR17P01',NULL,NULL,'geocentric','EPSG','6500','EPSG','1242','EPSG','4530',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8946','SIRGAS-CON SIR17P01',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1242','EPSG','4530',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8947','SIRGAS-Chile 2010',NULL,NULL,'geocentric','EPSG','6500','EPSG','1243','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8948','SIRGAS-Chile 2010',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1243','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8949','SIRGAS-Chile 2010',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1243','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8972','SIRGAS-CON DGF00P01',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1227','EPSG','4530',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8973','SIRGAS-CON DGF01P01',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1228','EPSG','4530',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','8974','SIRGAS-CON DGF01P02',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1229','EPSG','4530',NULL,0);
@@ -1001,6 +1008,21 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','9066','ETRF97',NULL,NULL,'geographic 2
INSERT INTO "geodetic_crs" VALUES('EPSG','9067','ETRF2000',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1186','EPSG','1298',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9068','ETRF2005',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1204','EPSG','1298',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9069','ETRF2014',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1206','EPSG','1298',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9070','NAD83(MARP00)',NULL,NULL,'geocentric','EPSG','6500','EPSG','1221','EPSG','4167',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9071','NAD83(MARP00)',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1221','EPSG','4167',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9072','NAD83(MARP00)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1221','EPSG','4167',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9073','NAD83(PACP00)',NULL,NULL,'geocentric','EPSG','6500','EPSG','1249','EPSG','4162',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9074','NAD83(PACP00)',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1249','EPSG','4162',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9075','NAD83(PACP00)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1249','EPSG','4162',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9138','KOSOVAREF01',NULL,NULL,'geocentric','EPSG','6500','EPSG','1251','EPSG','4542',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9139','KOSOVAREF01',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1251','EPSG','4542',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9140','KOSOVAREF01',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1251','EPSG','4542',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9146','SIRGAS-Chile 2013',NULL,NULL,'geocentric','EPSG','6500','EPSG','1252','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9147','SIRGAS-Chile 2013',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1252','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9148','SIRGAS-Chile 2013',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1252','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9151','SIRGAS-Chile 2016',NULL,NULL,'geocentric','EPSG','6500','EPSG','1253','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9152','SIRGAS-Chile 2016',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1253','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9153','SIRGAS-Chile 2016',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1253','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9182','SIRGAS-Chile',NULL,NULL,'geocentric','EPSG','6500','EPSG','1254','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9183','SIRGAS-Chile',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1254','EPSG','1066',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9184','SIRGAS-Chile',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1254','EPSG','1066',NULL,0);
+10 -2
View File
@@ -30,7 +30,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1060','Islands Net 2004',NULL,NULL,'
INSERT INTO "geodetic_datum" VALUES('EPSG','1061','International Terrestrial Reference Frame 2008',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1062','Posiciones Geodesicas Argentinas 2007',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1033',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1063','Marco Geodesico Nacional de Bolivia',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1049',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1064','SIRGAS-Chile',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1064','SIRGAS-Chile realization 1 epoch 2002',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1065','Costa Rica 2005',NULL,NULL,'EPSG','7030','EPSG','8901','EPSG','1074',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1066','Sistema Geodesico Nacional de Panama MACARIO SOLIS',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1186',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1067','Peru96',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1189',0);
@@ -115,7 +115,10 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1209','Hong Kong Geodetic',NULL,NULL
INSERT INTO "geodetic_datum" VALUES('EPSG','1211','NAD83 (Federal Base Network)',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4515',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1212','NAD83 (High Accuracy Reference Network - Corrected)',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','3634',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1214','Serbian Spatial Reference System 2000',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4543',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1217','Camacupa 2015',NULL,NULL,'EPSG','7012','EPSG','8901','EPSG','1029',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1218','MOMRA Terrestrial Reference Frame 2000',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1206',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1220','Reference System de Angola 2013',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1029',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1221','North American Datum of 1983 (MARP00)',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4167',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1223','Reseau Geodesique de Wallis et Futuna 1996',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1255',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1225','CR-SIRGAS',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1074',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1227','SIRGAS Continuously Operating Network DGF00P01',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4530',0);
@@ -134,12 +137,17 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1239','SIRGAS Continuously Operating
INSERT INTO "geodetic_datum" VALUES('EPSG','1240','SIRGAS Continuously Operating Network SIR14P01',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4530',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1241','SIRGAS Continuously Operating Network SIR15P01',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4530',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1242','SIRGAS Continuously Operating Network SIR17P01',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4530',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1243','SIRGAS-Chile realization 2 epoch 2010.00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1244','IGS97',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1245','IGS00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1246','IGb00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1247','IGS05',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1248','IGb08',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1249','North American Datum of 1983 (PACP00)',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4162',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1251','Kosovo Reference System 2001',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4542',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1252','SIRGAS-Chile realization 3 epoch 2013.00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1253','SIRGAS-Chile realization 4 epoch 2016.00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1254','SIRGAS-Chile',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6001','Not specified (based on Airy 1830 ellipsoid)',NULL,NULL,'EPSG','7001','EPSG','8901','EPSG','1263',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6002','Not specified (based on Airy Modified 1849 ellipsoid)',NULL,NULL,'EPSG','7002','EPSG','8901','EPSG','1263',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6003','Not specified (based on Australian National Spheroid)',NULL,NULL,'EPSG','7003','EPSG','8901','EPSG','1263',0);
@@ -279,7 +287,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','6215','Reseau National Belge 1950',N
INSERT INTO "geodetic_datum" VALUES('EPSG','6216','Bermuda 1957',NULL,NULL,'EPSG','7008','EPSG','8901','EPSG','3221',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6218','Bogota 1975',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','3686',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6219','Bukit Rimpah',NULL,NULL,'EPSG','7004','EPSG','8901','EPSG','1287',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6220','Camacupa',NULL,NULL,'EPSG','7012','EPSG','8901','EPSG','1288',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6220','Camacupa 1948',NULL,NULL,'EPSG','7012','EPSG','8901','EPSG','1288',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6221','Campo Inchauspe',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','3843',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6222','Cape',NULL,NULL,'EPSG','7013','EPSG','8901','EPSG','1290',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6223','Carthage',NULL,NULL,'EPSG','7011','EPSG','8901','EPSG','1236',0);
+5 -5
View File
@@ -372,7 +372,7 @@ INSERT INTO grid_alternatives(original_grid_name,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('g2012Bu0.bin',
VALUES ('g2012bu0.bin',
'g2012bu0.gtx',
'GTX',
'vgridshift',
@@ -388,7 +388,7 @@ INSERT INTO grid_alternatives(original_grid_name,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('g2012Ba0.bin',
VALUES ('g2012ba0.bin',
'g2012ba0.gtx',
'GTX',
'vgridshift',
@@ -404,7 +404,7 @@ INSERT INTO grid_alternatives(original_grid_name,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('g2012Bp0.bin',
VALUES ('g2012bp0.bin',
'g2012bp0.gtx',
'GTX',
'vgridshift',
@@ -420,7 +420,7 @@ INSERT INTO grid_alternatives(original_grid_name,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('g2012Bg0.bin',
VALUES ('g2012bg0.bin',
'g2012bg0.gtx',
'GTX',
'vgridshift',
@@ -436,7 +436,7 @@ INSERT INTO grid_alternatives(original_grid_name,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('g2012Bs0.bin',
VALUES ('g2012bs0.bin',
'g2012bs0.gtx',
'GTX',
'vgridshift',
+62 -24
View File
@@ -61,9 +61,9 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1554','NAD83 to NAD83(HARN) (39
INSERT INTO "grid_transformation" VALUES('EPSG','1559','AGD84 to GDA94 (3)','Withdrawn and replaced by AGD84 to GDA94 (4) (code 1593) due to binary file format error. Input expects longitudes to be positive west; EPSG GeogCRS AGD84 (code 4203) and GDA94 (code 4283) have longitudes positive east.','0.1m accuracy.','EPSG','9615','NTv2','EPSG','4203','EPSG','4283','EPSG','1280',0.1,'EPSG','8656','Latitude and longitude difference file','wa_0400.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'DOLA-Aus WA 0.1m old',1);
INSERT INTO "grid_transformation" VALUES('EPSG','1568','NZGD49 to NZGD2000 (3)','These same parameter values may be used to transform to WGS 84 - see NZGD49 to WGS 84 (4) (code 1670).','0.2m accuracy.','EPSG','9615','NTv2','EPSG','4272','EPSG','4167','EPSG','3285',0.2,'EPSG','8656','Latitude and longitude difference file','nzgd2kgrid0005.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSG-Nzl 1m',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1572','NAD83 to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS98) (code 4140) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4269','EPSG','4140','EPSG','1368',NULL,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1);
INSERT INTO "grid_transformation" VALUES('EPSG','1573','NAD27 to NAD83 (6)','Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4267','EPSG','4269','EPSG','1368',1.5,'EPSG','8656','Latitude and longitude difference file','QUE27-83.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1573','NAD27 to NAD83 (6)','Also distributed with file name QUE27-83.gsb. Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4267','EPSG','4269','EPSG','1368',1.5,'EPSG','8656','Latitude and longitude difference file','NA27NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1574','NAD27 to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83(CSRS98) (code 4140) have longitudes positive east. Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1692.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4267','EPSG','4140','EPSG','1368',NULL,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1);
INSERT INTO "grid_transformation" VALUES('EPSG','1575','NAD27(CGQ77) to NAD83 (2)','Replaces NAD27(CGQ77) to NAD83 (1) (code 1451). Uses NT method which expects longitudes positive west; EPSG GeogCRSs CGQ77 and NAD83 (codes 4609 and 4269) have longitudes positive east. Can be taken as approx transformation to WGS 84 - see code 1691.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4609','EPSG','4269','EPSG','1368',1.5,'EPSG','8656','Latitude and longitude difference file','CGQ77-83.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1575','NAD27(CGQ77) to NAD83 (2)','Also distributed with file name CGQ77-83.gsb. Replaces NAD27(CGQ77) to NAD83 (1) (code 1451). Can be taken as approx transformation to WGS 84 - see code 1691.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4609','EPSG','4269','EPSG','1368',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1576','NAD27(CGQ77) to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS98) (code 4140) have 1691longitudes positive east. Can be taken as an approximate transformation NAD27(CGQ77) to WGS 84 - see code 1691.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4609','EPSG','4140','EPSG','1368',NULL,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1);
INSERT INTO "grid_transformation" VALUES('EPSG','1578','American Samoa 1962 to NAD83(HARN) (1)','NADCON method which expects longitudes positive west; EPSG GeogCRSs American Samoa 1962 and NAD83(HARN) (codes 4169 and 4152) have longitudes positive east. NADCON expects latitudes in northern hemisphere and values must be made positive prior to input.','Geodetic survey. No accuracy stated.','EPSG','9613','NADCON','EPSG','4169','EPSG','4152','EPSG','2288',5.0,'EPSG','8657','Latitude difference file','wshpgn.las','EPSG','8658','Longitude difference file','wshpgn.los',NULL,NULL,'NGS-Asm W',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1579','American Samoa 1962 to NAD83(HARN) (2)','NADCON method which expects longitudes positive west; EPSG GeogCRSs American Samoa 1962 and NAD83(HARN) (codes 4169 and 4152) have longitudes positive east. NADCON expects latitudes in northern hemisphere and values must be made positive prior to input.','Geodetic survey. No accuracy stated.','EPSG','9613','NADCON','EPSG','4169','EPSG','4152','EPSG','2289',5.0,'EPSG','8657','Latitude difference file','eshpgn.las','EPSG','8658','Longitude difference file','eshpgn.los',NULL,NULL,'NGS-Asm E',0);
@@ -77,12 +77,12 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1670','NZGD49 to WGS 84 (3)','P
INSERT INTO "grid_transformation" VALUES('EPSG','1688','ATS77 to WGS 84 (1)','Parameter file is from ATS77 to NAD83(CSRS) (1) (code 1841) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4122','EPSG','4326','EPSG','1447',1.0,'EPSG','8656','Latitude and longitude difference file','NB7783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can NB',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1689','ATS77 to WGS 84 (2)','Parameter file is from ATS77 to NAD83(CSRS) (2) (code 1846) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4122','EPSG','4326','EPSG','1533',1.0,'EPSG','8656','Latitude and longitude difference file','PE7783V2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can PEI',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1690','NAD27(76) to WGS 84 (1)','Parameter file is from NAD27(76) to NAD83 (1) (code 1463) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4608','EPSG','4326','EPSG','1367',1.0,'EPSG','8656','Latitude and longitude difference file','May76v20.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can On',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1691','NAD27(CGQ77) to WGS 84 (3)','Parameter file is from NAD27(CGQ77) to NAD83(CSRS) (1) (code 1845) assuming that NAD83(CSRS98) is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4609','EPSG','4326','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can Qc NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1692','NAD27 to WGS 84 (34)','Parameter file is from NAD27 to NAD83(CSRS) (1) (code 1844) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1691','NAD27(CGQ77) to WGS 84 (3)','Parameter file is from NAD27(CGQ77) to NAD83(CSRS) (1) (code 1845) assuming that NAD83(CSRS98) is equivalent to WGS 84 within the accuracy of the transformation. Also distributed with file name CGQ77-98.gsb.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4609','EPSG','4326','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can Qc NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1692','NAD27 to WGS 84 (34)','Parameter file is from NAD27 to NAD83(CSRS) (1) (code 1844) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation. Also distributed as QUE27-98.gsb.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','NA27SCRS.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1693','NAD27 to WGS 84 (33)','Parameter file is from NAD27 to NAD83 (4) (code 1313) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326','EPSG','4517',1.0,'EPSG','8656','Latitude and longitude difference file','NTv2_0.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1694','American Samoa 1962 to WGS 84 (2)','Parameter files are from American Samoa 1962 to NAD83(HARN) (1) (code 1578), but for many purposes NAD83(HARN) can be considered to be coincident with WGS 84 within the accuracy of the transformation.','No accuracy stated for source transformation.','EPSG','9613','NADCON','EPSG','4169','EPSG','4326','EPSG','2288',5.0,'EPSG','8657','Latitude difference file','wshpgn.las','EPSG','8658','Longitude difference file','wshpgn.los',NULL,NULL,'EPSG-Asm W',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1695','American Samoa 1962 to WGS 84 (3)','Parameter files are from American Samoa 1962 to NAD83(HARN) (2) (code 1579), but for many purposes NAD83(HARN) can be considered to be coincident with WGS 84 within the accuracy of the transformation.','No accuracy stated for source transformation.','EPSG','9613','NADCON','EPSG','4169','EPSG','4326','EPSG','2289',5.0,'EPSG','8657','Latitude difference file','eshpgn.las','EPSG','8658','Longitude difference file','eshpgn.los',NULL,NULL,'EPSG-Asm E',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1696','NAD83 to WGS 84 (6)','Parameter file is from NAD83 to NAD83(CSRS) (1) (code 1843) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1696','NAD83 to WGS 84 (6)','Parameter file is from NAD83 to NAD83(CSRS) (1) (code 1843) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation. Also distributed with file name NAD83-98.gsb.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','NA83SCRS.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1697','NAD83 to WGS 84 (7)','Parameter file is from NAD83 to NAD83(CSRS8) (2) (code 1848) assuming that NAD83(CSRS) is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1m level.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326','EPSG','2375',1.0,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1698','St. George Island to WGS 84 (1)','Parameter files are from St. George Island to NAD83 (1) (code 1457) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1 to 2m level.','EPSG','9613','NADCON','EPSG','4138','EPSG','4326','EPSG','1331',1.5,'EPSG','8657','Latitude difference file','stgeorge.las','EPSG','8658','Longitude difference file','stgeorge.los',NULL,NULL,'EPSG-Usa AK StG',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1699','St. Lawrence Island to WGS 84 (1)','Parameter files are from St. Lawrence Island to NAD83 (1) (code 1455) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','Approximation at the +/- 1 to 2m level.','EPSG','9613','NADCON','EPSG','4136','EPSG','4326','EPSG','1332',1.5,'EPSG','8657','Latitude difference file','stlrnc.las','EPSG','8658','Longitude difference file','stlrnc.los',NULL,NULL,'EPSG-Usa AK StL',0);
@@ -193,8 +193,8 @@ INSERT INTO "grid_transformation" VALUES('EPSG','6140','CIGD11 to CBVD61 height
INSERT INTO "grid_transformation" VALUES('EPSG','6188','Lisbon to ETRS89 (4)','Derived from 1129 common stations in the national geodetic network. Residuals at 130 further test points average 0.09m, maximum 0.30m.','Decimetre accuracy.','EPSG','9615','NTv2','EPSG','4207','EPSG','4258','EPSG','1294',0.1,'EPSG','8656','Latitude and longitude difference file','DLx_ETRS89_geo.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt 0.1m',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6189','Datum 73 to ETRS89 (6)','Derived from 1129 common stations in the national geodetic network. Residuals at 130 further test points average 0.06m, maximum 0.16m.','Decimetre accuracy.','EPSG','9615','NTv2','EPSG','4274','EPSG','4258','EPSG','1294',0.1,'EPSG','8656','Latitude and longitude difference file','D73_ETRS89_geo.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IGP-Prt 0.1m',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6209','NAD27 to NAD83(CSRS) (4)','Introduced in 2011. Precision of 20 cm in area covered by the input data set and 40 cm anywhere else, with the exception of the northwest area of the province (near the border with Quebec) where the precision deteriorates to 80 cm.','Used in the GeoNB Coordinate Transformation Service.','EPSG','9615','NTv2','EPSG','4267','EPSG','4617','EPSG','1447',0.8,'EPSG','8656','Latitude and longitude difference file','NB2783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SNB-Can NB',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6326','NAD83(2011) to NAVD88 height (1)','Uses Geoid12B hybrid model. Renamed from Geoid12A but with no data changes. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','5703','EPSG','1323',0.1,'EPSG','8666','Geoid (height correction) model file','g2012Bu0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6327','NAD83(2011) to NAVD88 height (2)','Uses Geoid12B hybrid model. Renamed from Geoid12A but with no data changes. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','5703','EPSG','1330',0.2,'EPSG','8666','Geoid (height correction) model file','g2012Ba0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6326','NAD83(2011) to NAVD88 height (1)','Uses Geoid12B hybrid model. Renamed from Geoid12A but with no data changes. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','5703','EPSG','1323',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bu0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6327','NAD83(2011) to NAVD88 height (2)','Uses Geoid12B hybrid model. Renamed from Geoid12A but with no data changes. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','5703','EPSG','1330',0.02,'EPSG','8666','Geoid (height correction) model file','g2012ba0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6648','NAD83(CSRS) to CGVD2013 height (1)','Uses CGG2013 model which uses bi-quadratic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time.','Derivation of gravity-related heights from GPS observations.','EPSG','1060','Geographic3D to GravityRelatedHeight (CGG2013)','EPSG','4955','EPSG','6647','EPSG','1061',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013n83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6712','Tokyo to JGD2000 (2)','NTv2 grid derived by ESRI from that supplied by GSI in application tky2jgd. After Tohoku earthquake of 2011 accuracy in northern Honshu reduced to 1-5m and in this area replaced by Tokyo to JGD2011 (tfm code 6714).','Surveying, mapping and civil engineering.','EPSG','9615','NTv2','EPSG','4301','EPSG','4612','EPSG','3957',0.2,'EPSG','8656','Latitude and longitude difference file','tky2jgd.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0);
INSERT INTO "grid_transformation" VALUES('EPSG','6713','JGD2000 to JGD2011 (1)','NTv2 grid derived by ESRI from that supplied by GSI in application patchjgd.','Surveying, mapping and civil engineering purposes','EPSG','9615','NTv2','EPSG','4612','EPSG','6668','EPSG','4170',0.2,'EPSG','8656','Latitude and longitude difference file','touhokutaiheiyouoki2011.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn N Honshu',0);
@@ -204,11 +204,11 @@ INSERT INTO "grid_transformation" VALUES('EPSG','6947','TM75 to WGS 84 (4)','Par
INSERT INTO "grid_transformation" VALUES('EPSG','6948','RD/83 to ETRS89 (2)','Recommended by Saxony State Spatial Data and Land Survey Corporation for transformations based on official geospatial data of Saxony. See www.landesvermessung.sachsen.de/inhalt/etrs/method/method.html#ntv2.','Cadastre. Accuracy 3mm within Saxony; within the rest of RD/83 definition area results at least coincide with EPSG transformation code15868.','EPSG','9615','NTv2','EPSG','4745','EPSG','4258','EPSG','2545',0.03,'EPSG','8656','Latitude and longitude difference file','NTv2_SN.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GeoSN-Deu SN',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7000','Amersfoort to ETRS89 (7)','Consistent to within 1mm with official RNAPTRANS(TM)2008 at ground level onshore and at MSL offshore. The horizontal deviation using this NTv2 grid is approximately 1mm per 50m height difference from ground level or MSL.','Approximation of horizontal component of official 3D RDNAPTRANS(TM) transformation, which since 1st October 2000 has defined Amersfoort geodetic datum.','EPSG','9615','NTv2','EPSG','4289','EPSG','4258','EPSG','1275',0.001,'EPSG','8656','Latitude and longitude difference file','rdtrans2008.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'RDNAP-Nld 2008',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7001','ETRS89 to NAP height (1)','Alternative to vertical component of official 3D RDNAPTRANS(TM)2008. The naptrans2008 correction grid incorporates the NLGEO2004 geoid model plus a fixed offset.','Derivation of gravity-related heights from GPS observations. When used in conjunction with transformation Amersfoort to ETRS89 (7) (code 7000), this transformation is reversible.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4937','EPSG','5709','EPSG','1275',0.01,'EPSG','8666','Geoid (height correction) model file','naptrans2008.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'RDNAP-Nld 2008',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7646','NAD83(2011) to PRVD02 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','6641','EPSG','3294',0.1,'EPSG','8666','Geoid (height correction) model file','g2012Bp0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7647','NAD83(2011) to VIVD09 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','6642','EPSG','3330',0.1,'EPSG','8666','Geoid (height correction) model file','g2012Bp0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7648','NAD83(MA11) to GUVD04 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6323','EPSG','6644','EPSG','3255',0.1,'EPSG','8666','Geoid (height correction) model file','g2012Bg0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Gum 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7649','NAD83(MA11) to NMVD03 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6323','EPSG','6640','EPSG','4171',0.1,'EPSG','8666','Geoid (height correction) model file','g2012Bg0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Mnp 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7650','NAD83(PA11) to ASVD02 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6320','EPSG','6643','EPSG','2288',0.1,'EPSG','8666','Geoid (height correction) model file','g2012Bs0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Asm 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7646','NAD83(2011) to PRVD02 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','6641','EPSG','3294',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bp0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7647','NAD83(2011) to VIVD09 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','6642','EPSG','3330',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bp0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7648','NAD83(MA11) to GUVD04 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6323','EPSG','6644','EPSG','3255',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bg0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Gum 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7649','NAD83(MA11) to NMVD03 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6323','EPSG','6640','EPSG','4171',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bg0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Mnp 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7650','NAD83(PA11) to ASVD02 height (1)','Uses Geoid12B hybrid model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6320','EPSG','6643','EPSG','2288',0.02,'EPSG','8666','Geoid (height correction) model file','g2012bs0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Asm 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7655','PNG94 to PNG08 height (1)','','Derivation of gravity-related heights from GPS observations.','EPSG','1059','Geographic3D to GravityRelatedHeight (PNG)','EPSG','5545','EPSG','7447','EPSG','4384',0.2,'EPSG','8666','Geoid (height correction) model file','PNG08.DAT',NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7673','CH1903 to CHTRF95 (1)','Equivalent to concatenation of transformations 15486 and 1509 to within 2cm. Also used as transformation between CH1903 and ETRS89 (see code 7674).','Approximation (to better than 2m) using NTv2 method of results of FINELTRA programme concatenated with LV-95 parameters.','EPSG','9615','NTv2','EPSG','4149','EPSG','4151','EPSG','1286',0.25,'EPSG','8656','Latitude and longitude difference file','CHENyx06_ETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che NTv2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7674','CH1903 to ETRS89 (2)','Replaces tfm code 1646. Equivalent to concatenation of transformations 15486 and 1647 to within 2cm. Also used as transformation between CH1903 and CHTRF95 (see code 7673). May be used as approximate tfm CH1903 to WGS 84 - see code 7788.','Approximation (to better than 2cm) using NTv2 method of results of FINELTRA programme concatenated with LV-95 parameters.','EPSG','9615','NTv2','EPSG','4149','EPSG','4258','EPSG','1286',0.25,'EPSG','8656','Latitude and longitude difference file','CHENyx06_ETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che NTv2',0);
@@ -242,9 +242,9 @@ INSERT INTO "grid_transformation" VALUES('EPSG','7891','SHGD2015 to SHVD2015 hei
INSERT INTO "grid_transformation" VALUES('EPSG','7957','Canada velocity grid v6','NOTE: Before being deprecated this record had a second parameter (code 1048, value 8251) which has been removed due to being non-compliant with the data model.','Change of coordinate epoch for points referenced to NAD83(CSRS)v6.','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8251','EPSG','8251','EPSG','1061',0.01,'EPSG','1050','Point motion velocity grid file','cvg60.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',1);
INSERT INTO "grid_transformation" VALUES('EPSG','7958','ETRS89 to Belfast height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Belfast height (1) (tfm code 5334).','Derivation of gravity-related heights from OSGM15 geoid model.','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','5732','EPSG','2530',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI 2015',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7959','ETRS89 to Malin Head height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Malin Head height (1) (tfm code 5335).','Derivation of gravity-related heights from OSGM15 geoid model.','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','5731','EPSG','1305',0.023,'EPSG','8666','Geoid (height correction) model file','OSGM15_Malin.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire 2015',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7969','NGVD29 height (m) to NAVD88 height (1)','In this area the NGVD29 vertical reference surface is approximately 0.6 to 1.6m below the NAVD88 datum surface. Interpolation within the gridded data file may be made using either NAD27 or any of the realizations of NAD83 applicable to US conus.','Change of height to a different vertical reference surface, accuracy 2cm.','EPSG','9658','VERTCON','EPSG','7968','EPSG','5703','EPSG','2950',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7970','NGVD29 height (m) to NAVD88 height (2)','In the SE of this area the NGVD29 surface is 0 to 0.1m above the NAVD88 surface; in the W it is 0.6 to 0.9m below the NAVD88 surface. Interpolation in the data file may be made using either NAD27 or any of the NAD83 realizations applicable to US conus.','Change of height to a different vertical reference surface, accuracy 2cm.','EPSG','9658','VERTCON','EPSG','7968','EPSG','5703','EPSG','2949',0.02,'EPSG','8732','Vertical offset file','vertconc.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus C',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7971','NGVD29 height (m) to NAVD88 height (3)','In this area the NGVD29 vertical reference surface is approximately 0 to 0.5m above the NAVD88 surface. Interpolation within the gridded data file may be made using either NAD27 or any of the realisations of NAD83 applicable to US conus.','Change of height to a different vertical reference surface, accuracy 2cm.','EPSG','9658','VERTCON','EPSG','7968','EPSG','5703','EPSG','2948',0.02,'EPSG','8732','Vertical offset file','vertcone.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus E',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7969','NGVD29 height (m) to NAVD88 height (1)','In this area the NGVD29 vertical reference surface is approximately 0.6 to 1.6m below the NAVD88 datum surface. Interpolation within the gridded data file may be made using either NAD27 or any of the realizations of NAD83 applicable to US conus.','Change of height to a different vertical reference surface.','EPSG','9658','VERTCON','EPSG','7968','EPSG','5703','EPSG','2950',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7970','NGVD29 height (m) to NAVD88 height (2)','In the SE of this area the NGVD29 surface is 0 to 0.1m above the NAVD88 surface; in the W it is 0.6 to 0.9m below the NAVD88 surface. Interpolation in the data file may be made using either NAD27 or any of the NAD83 realizations applicable to US conus.','Change of height to a different vertical reference surface.','EPSG','9658','VERTCON','EPSG','7968','EPSG','5703','EPSG','2949',0.02,'EPSG','8732','Vertical offset file','vertconc.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus C',0);
INSERT INTO "grid_transformation" VALUES('EPSG','7971','NGVD29 height (m) to NAVD88 height (3)','In this area the NGVD29 vertical reference surface is approximately 0 to 0.5m above the NAVD88 surface. Interpolation within the gridded data file may be made using either NAD27 or any of the realisations of NAD83 applicable to US conus.','Change of height to a different vertical reference surface.','EPSG','9658','VERTCON','EPSG','7968','EPSG','5703','EPSG','2948',0.02,'EPSG','8732','Vertical offset file','vertcone.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus E',0);
INSERT INTO "grid_transformation" VALUES('EPSG','8037','WGS 84 to MSL height (1)','Parameter values are from WGS 84 to EGM2008 height (2) (tfm code 3859) assuming that the EGM2008 height surface approximates to MSL height within the accuracy of the transformation.','Derivation of gravity-related heights referenced to an unspecified mean sea level from GPS observations.','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4979','EPSG','5714','EPSG','1262',0.5,'EPSG','8666','Geoid (height correction) model file','Und_min1x1_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-World',0);
INSERT INTO "grid_transformation" VALUES('EPSG','8268','GR96 to GVR2000 height (1)','Defines GVR2000. File is also available in NOAA VDatum format (ggeoid2000.gtx) and GeoTIFF format (ggeoid2000.tif).','Derivation of gravity-related heights from GNSS observations.','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4909','EPSG','8266','EPSG','4461',0.1,'EPSG','8666','Geoid (height correction) model file','gr2000g.gri',NULL,NULL,NULL,NULL,NULL,NULL,'SDFE-Grl',0);
INSERT INTO "grid_transformation" VALUES('EPSG','8269','GR96 to GVR2016 height (1)','Defines GVR2016. File is also available in NOAA VDatum format (ggeoid2016.gtx) and GeoTIFF format (ggeoid2016.tif).','Derivation of gravity-related heights from GNSS observations.','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4909','EPSG','8267','EPSG','4454',0.1,'EPSG','8666','Geoid (height correction) model file','ggeoid16.gri',NULL,NULL,NULL,NULL,NULL,NULL,'SDFE-Grl',0);
@@ -263,6 +263,27 @@ INSERT INTO "grid_transformation" VALUES('EPSG','8447','GDA94 to GDA2020 (2)','S
INSERT INTO "grid_transformation" VALUES('EPSG','8451','GDA2020 to AHD height (1)','Uncertainties given in accompanying file AUSGeoid2020_windows_binary_uncertainty.gsb','Derivation of gravity-related heights from GNSS observations.','EPSG','1048','Geographic3D to GravityRelatedHeight (Ausgeoid v2)','EPSG','7843','EPSG','5711','EPSG','4493',0.03,'EPSG','8666','Geoid (height correction) model file','AUSGeoid2020_windows_binary.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus 2020',0);
INSERT INTO "grid_transformation" VALUES('EPSG','8676','Canada velocity grid v6','','Change of coordinate epoch for points referenced to NAD83(CSRS)v6.','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8251','EPSG','8251','EPSG','1061',0.01,'EPSG','1050','Point motion velocity grid file','cvg60.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',0);
INSERT INTO "grid_transformation" VALUES('EPSG','8885','RGF93 to NGF IGN69 height (3)','Replaces RGF93 to NGF IGN69 height (2) (code 8371). Accuracy at each 0.0333333333333° in longitude and 0.025° in latitude grid node is given within the geoid model file. Recommended interpolation method is bilinear.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4965','EPSG','5720','EPSG','1326',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18.tac',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 18',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9105','ATS77 to NAD83 (1)','','Spatial referencing.','EPSG','9615','NTv2','EPSG','4122','EPSG','4269','EPSG','2313',0.5,'EPSG','8656','Latitude and longitude difference file','GS7783.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9106','ATS77 to NAD83(CSRS)v6 (4)','Derived through NAD83(CSRS)v6 but within accuracy of transformation may be assumed to apply to any version.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4122','EPSG','8252','EPSG','2313',0.06,'EPSG','8656','Latitude and longitude difference file','NS778302.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS v2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9107','NAD27 to NAD83(CSRS)v3 (5)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version. For Toronto use NAD27 to NAD83(CSRS) (6) (CT code 9108).','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240','EPSG','4537',1.5,'EPSG','8656','Latitude and longitude difference file','ON27CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont ex Tor',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9108','NAD27 to NAD83(CSRS)v3 (6)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version. For Ontario excluding Toronto use NAD27 to NAD83(CSRS) (5) (CT code 9107).','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240','EPSG','4536',1.0,'EPSG','8656','Latitude and longitude difference file','TOR27CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont Tor',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9109','NAD27(76) to NAD83(CSRS)v3 (1)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4608','EPSG','8240','EPSG','1367',1.0,'EPSG','8656','Latitude and longitude difference file','ON76CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9110','NAD83 to NAD83(CSRS)v3 (5)','Derived through NAD83(CSRS)v3 but within accuracy of transformation may be assumed to apply to any version.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240','EPSG','1367',0.1,'EPSG','8656','Latitude and longitude difference file','ON83CSv1.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'LIO-Can Ont',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9111','NAD27 to NAD83 (9)','','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','4269','EPSG','2375',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-83.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ISC-Can SK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9112','NAD27 to NAD83(CSRS)v2 (7)','Derived through NAD83(CSRS)v2. Replaced by NAD27 to NAD83(CSRS) (8) (CT code 9113) for CRD, NAD27 to NAD83(CSRS) (9) (CT code 9114) forn north Vancouver Island and NAD27 to NAD83(CSRS) (10) (CT code 9115) for mainland.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237','EPSG','2832',1.5,'EPSG','8656','Latitude and longitude difference file','BC_27_98.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CSRSv2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9113','NAD27 to NAD83(CSRS)v3 (8)','Derived through NAD83(CSRS)v3.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240','EPSG','4533',1.5,'EPSG','8656','Latitude and longitude difference file','CRD27_00.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CRD',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9114','NAD27 to NAD83(CSRS)v3 (9)','Derived through NAD83(CSRS)v3.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240','EPSG','4534',1.5,'EPSG','8656','Latitude and longitude difference file','NVI27_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9115','NAD27 to NAD83(CSRS)v4 (10)','Derived through NAD83(CSRS)v4.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4267','EPSG','8246','EPSG','4535',1.5,'EPSG','8656','Latitude and longitude difference file','BC_27_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9116','NAD83 to NAD83(CSRS)v2 (6)','Derived through NAD83(CSRS)v2. Replaced by NAD83 to NAD83(CSRS) (7) (CT code 9117) for CRD, NAD83 to NAD83(CSRS) (8) (CT code 9118) for north Vancouver Island and NAD83 to NAD83(CSRS) (9) (CT code 9119) for mainland.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237','EPSG','2832',0.1,'EPSG','8656','Latitude and longitude difference file','BC_93_98.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CSRSv2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9117','NAD83 to NAD83(CSRS)v3 (7)','Derived through NAD83(CSRS)v3.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240','EPSG','4533',0.1,'EPSG','8656','Latitude and longitude difference file','CRD93_00.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CRD',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9118','NAD27 to NAD83(CSRS)v3 (8)','Derived through NAD83(CSRS)v3.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240','EPSG','4534',0.1,'EPSG','8656','Latitude and longitude difference file','NVI93_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9119','NAD83 to NAD83(CSRS)v4 (9)','Derived through NAD83(CSRS)v4.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4269','EPSG','8246','EPSG','4535',0.1,'EPSG','8656','Latitude and longitude difference file','BC_93_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9120','NAD83(CSRS)v2 to NAD83(CSRS)v3 (1)','','Spatial referencing.','EPSG','9615','NTv2','EPSG','8237','EPSG','8240','EPSG','4533',0.1,'EPSG','8656','Latitude and longitude difference file','CRD98_00.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC CRD',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9121','NAD83(CSRS)v2 to NAD83(CSRS)v3 (2)','','Spatial referencing.','EPSG','9615','NTv2','EPSG','8237','EPSG','8240','EPSG','4534',0.1,'EPSG','8656','Latitude and longitude difference file','NVI98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9122','NAD83(CSRS)v2 to NAD83(CSRS)v4 (1)','','Spatial referencing.','EPSG','9615','NTv2','EPSG','8237','EPSG','8240','EPSG','4535',0.1,'EPSG','8656','Latitude and longitude difference file','BC_98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9123','NAD83(CSRS) to CGVD28 height (1)','Derived through NAD83(CSRS)v3.','Derivation of gravity-related heights from GPS observations.','EPSG','1060','Geographic3D to GravityRelatedHeight (CGG2013)','EPSG','4955','EPSG','5713','EPSG','1061',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_0.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2000',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9124','ITRF2008 to CGVD2013 height (1)','Uses CGG2013 model derived through NAD83(CSRS)v6 which uses bi-quadratic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time. Replaced by model CGG2013a (CT code 9125).','Derivation of gravity-related heights from GPS observations.','EPSG','1060','Geographic3D to GravityRelatedHeight (CGG2013)','EPSG','7911','EPSG','6647','EPSG','1061',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013i83.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9125','ITRF2008 to CGVD2013 height (2)','Uses CGG2013a model derived through NAD83(CSRS)v6 which uses bi-quadratic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time. Replaces model CGG2013 (CT code 9124).','Derivation of gravity-related heights from GPS observations.','EPSG','1060','Geographic3D to GravityRelatedHeight (CGG2013)','EPSG','7911','EPSG','6647','EPSG','1061',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013i08a.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013a',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9131','RGAF09 to IGN 2008 LD height (1)','Replaces RGAF09 to IGN 1992 LD height (1) (CT code 5507). Accuracy 0.1-0.2m within onshore area.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','9130','EPSG','2893',0.2,'EPSG','8666','Geoid (height correction) model file','RALD2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Glp Des',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9132','RRAF 1991 to IGN 2008 LD height (1)','Replaces RRAF 1991 to IGN 1992 LD height (1) (CT code 4566). Accuracy 0.1-0.2m within onshore area.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4557','EPSG','9130','EPSG','2893',0.2,'EPSG','8666','Geoid (height correction) model file','RALDW842016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp Des',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9133','RGAF09 to Guadeloupe 1988 height (2)','Replaces RGAF09 to Guadeloupe 1988 height (1) (CT code 5503). Accuracy 0.01-0.05m within onshore areas.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5757','EPSG','2892',0.05,'EPSG','8666','Geoid (height correction) model file','RAGTBT2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp GT 2016',0);
@@ -270,6 +291,23 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9134','RGAF09 to IGN 1988 LS he
INSERT INTO "grid_transformation" VALUES('EPSG','9135','RGAF09 to IGN 1988 MG height (2)','Replaces RGAF09 to IGN 1988 MG height (1), CT code 5504. Accuracy 0.0.5-0.1m within onshore area.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5617','EPSG','2894',0.1,'EPSG','8666','Geoid (height correction) model file','RAMG2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG 2016',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9136','RGAF09 to Martinique 1987 height (2)','Replaces RGAF09 to Martinique 1987 height (1) (CT code 5502). Accuracy 0.01m to 0.05m within onshore area.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5756','EPSG','3276',0.05,'EPSG','8666','Geoid (height correction) model file','RAMART2016.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Mtq 2016',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9137','RGSPM06 to Danger 1950 height (1)','Accuracy 0.10m to 0.20m within onshore area.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4466','EPSG','5792','EPSG','1220',0.2,'EPSG','8666','Geoid (height correction) model file','GGSPM06v1.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-SPM',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9160','NAD83(HARN) to NAVD88 height (1)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2977',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9161','NAD83(HARN) to NAVD88 height (2)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2978',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u02.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9162','NAD83(HARN) to NAVD88 height (3)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2979',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u03.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9163','NAD83(HARN) to NAVD88 height (4)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2980',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u04.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9164','NAD83(HARN) to NAVD88 height (5)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2973',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u05.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9165','NAD83(HARN) to NAVD88 height (6)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2974',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u06.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9166','NAD83(HARN) to NAVD88 height (7)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2975',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u07.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9167','NAD83(HARN) to NAVD88 height (8)','Uses Geoid99 hybrid model. Replaced by 2003 model (CT code 9168).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','2976',0.05,'EPSG','8666','Geoid (height correction) model file','g1999u08.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9168','NAD83(FBN) to NAVD88 height (1)','Uses Geoid03 hybrid model. Replaced by 2009 model (CT code 9173).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','8542','EPSG','5703','EPSG','1323',0.02,'EPSG','8666','Geoid (height correction) model file','geoid03_conus.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9169','NAD83(HARN) to NAVD88 height (9)','Uses Geoid06 hybrid model. Replaced by Geoid09 model (CT code 9174).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4957','EPSG','5703','EPSG','1330',0.02,'EPSG','8666','Geoid (height correction) model file','geoid06_ak.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9170','NAD83(FBN) to ASVD02 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7650).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','8542','EPSG','6643','EPSG','2288',0.05,'EPSG','8666','Geoid (height correction) model file','g2009s01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Asm 09',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9171','NAD83(FBN) to GUVD04 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7648).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','8542','EPSG','6644','EPSG','3255',0.05,'EPSG','8666','Geoid (height correction) model file','g2009g01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Gum 09',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9172','NAD83(FBN) to NMVD03 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7649).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','8542','EPSG','6640','EPSG','4171',0.05,'EPSG','8666','Geoid (height correction) model file','g2009g01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Mnp 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9173','NAD83(NSRS2007) to NAVD88 height (1)','Uses Geoid09 hybrid model. Replaced by 2012 model (CT code 6326).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4893','EPSG','5703','EPSG','1323',0.05,'EPSG','8666','Geoid (height correction) model file','geoid09_conus.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus 09',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9174','NAD83(NSRS2007) to NAVD88 height (2)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 6327).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4893','EPSG','5703','EPSG','1330',0.05,'EPSG','8666','Geoid (height correction) model file','geoid09_ak.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US AK 09',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9175','NAD83(NSRS2007) to PRVD02 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7646).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4893','EPSG','6641','EPSG','3294',0.05,'EPSG','8666','Geoid (height correction) model file','g2009p01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 09',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9176','NAD83(NSRS2007) to VIVD09 height (1)','Uses Geoid09 hybrid model. Replaced by Geoid12 model (CT code 7647).','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4893','EPSG','6642','EPSG','3330',0.05,'EPSG','8666','Geoid (height correction) model file','g2009p01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 09',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9187','RGAF09 to IGN 1988 SB height (2)','Accuracy 0.05m to 0.1m. Replaces RGAF09 to IGN 1988 SB height (1), transformation code 5508.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5619','EPSG','2891',0.1,'EPSG','8666','Geoid (height correction) model file','gg10_sbv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StB',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9188','RGAF09 to IGN 1988 SM height (2)','Accuracy 0.05m to 0.1m. Replaces RGAF09 to IGN 1988 SM height (1), transformation code 5505.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','5488','EPSG','5620','EPSG','2890',0.1,'EPSG','8666','Geoid (height correction) model file','gg10_smv2.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10000','RGF93 to NGF IGN69 height (1)','May be used for transformations from WGS 84 to NGF IGN69. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5720','EPSG','1326',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0);
@@ -285,14 +323,14 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10009','RRAF 1991 to Guadeloupe
INSERT INTO "grid_transformation" VALUES('EPSG','10010','RRAF 1991 to Guadeloupe 1988 height (6)','May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5757','EPSG','2890',998.0,'EPSG','8666','Geoid (height correction) model file','ggg00_sm.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp StM',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10011','RGFG95 to NGG1977 height (1)','May be used for transformations from WGS 84 to NGG1977. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4967','EPSG','5755','EPSG','3146',998.0,'EPSG','8666','Geoid (height correction) model file','ggguy00.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Guf',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10012','RGR92 to Reunion 1989 height (1)','May be used for transformations from WGS 84 to IGN 1989. Accuracy at each 0.02 deg x 0.02 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4971','EPSG','5758','EPSG','3337',0.1,'EPSG','8666','Geoid (height correction) model file','ggr99.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Reu',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10013','NAD83 to NAVD88 height (1)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2977',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10014','NAD83 to NAVD88 height (2)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2978',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u02.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10015','NAD83 to NAVD88 height (3)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2979',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u03.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10016','NAD83 to NAVD88 height (4)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2980',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u04.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10017','NAD83 to NAVD88 height (5)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2973',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u05.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10018','NAD83 to NAVD88 height (6)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2974',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u06.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSW',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10019','NAD83 to NAVD88 height (7)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2975',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u07.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10020','NAD83 to NAVD88 height (8)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2976',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u08.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SE',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10013','NAD83 to NAVD88 height (1)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2977',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u01.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NW',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10014','NAD83 to NAVD88 height (2)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2978',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u02.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNW',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10015','NAD83 to NAVD88 height (3)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2979',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u03.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CNE',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10016','NAD83 to NAVD88 height (4)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2980',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u04.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus NE',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10017','NAD83 to NAVD88 height (5)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2973',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u05.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SW',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10018','NAD83 to NAVD88 height (6)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2974',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u06.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSW',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10019','NAD83 to NAVD88 height (7)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2975',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u07.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus CSE',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10020','NAD83 to NAVD88 height (8)','Uses Geoid03 hybrid model. See information source for further information. Note: Source CRS is 2D, used in this application of the method as a pseudo-3D CRS.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','4269','EPSG','5703','EPSG','2976',0.05,'EPSG','8666','Geoid (height correction) model file','g2003u08.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus SE',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10021','ETRS89 to Newlyn height (1)','May be used for transformations from WGS 84 to Newlyn.','Derivation of gravity-related heights from GPS observations.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5701','EPSG','2792',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Gbr',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10022','ETRS89 to Belfast height (1)','May be used for transformations from WGS 84 to Belfast.','Derivation of gravity-related heights from GPS observations.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5732','EPSG','2530',0.03,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI',1);
INSERT INTO "grid_transformation" VALUES('EPSG','10023','ETRS89 to Douglas height (1)','May be used for transformations from WGS 84 to Douglas.','Derivation of gravity-related heights from GPS observations.','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5750','EPSG','2803',0.02,'EPSG','8666','Geoid (height correction) model file','OSTN02_OSGM02_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Man',0);
@@ -385,7 +423,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','15941','NTF to ETRS89 (3)','The
INSERT INTO "grid_transformation" VALUES('EPSG','15942','NTF to WGS 84 (3)','These parameter values are taken from NTF to RGR93 (2) (code 15940) as RGR93 may be considered equivalent to WGS 84 within the accuracy of the transformation. Emulation of France Geocentric Interpolation method tfm code 15939.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4275','EPSG','4326','EPSG','1326',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',1);
INSERT INTO "grid_transformation" VALUES('EPSG','15944','NEA74 Noumea to RGNC91-93 (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 15943).','Accuracy 5-10cm.','EPSG','9615','NTv2','EPSG','4644','EPSG','4749','EPSG','2823',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_NEA74Noumea.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',1);
INSERT INTO "grid_transformation" VALUES('EPSG','15947','IGN72 Grande Terre to RGNC91-93 (6)','Emulation using NTv2 method of tfm IGN72 Grande Terre to RGNC91-93 (4) (code 15945).','Accuracy better than +/- 0.1 metre.','EPSG','9615','NTv2','EPSG','4662','EPSG','4749','EPSG','2822',0.1,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.1m',1);
INSERT INTO "grid_transformation" VALUES('EPSG','15948','DHDN to ETRS89 (8)','Developed for ATKIS (Amtliches Topographisch-Kartographisches Informationssystem [Official Topographic and Cartographic Information System]). Provides a uniform transformation across the whole country. May be used as tfm to WGS84 - see tfm code 15949.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4314','EPSG','4258','EPSG','3339',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu BeTA2007',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15948','DHDN to ETRS89 (8)','Developed for ATKIS (Amtliches Topographisch-Kartographisches Informationssystem [Official Topographic and Cartographic Information System]). Provides a uniform transformation across the whole country. May be used as tfm to WGS84 - see tfm code 15949.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4314','EPSG','4258','EPSG','3339',0.9,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu BeTA2007',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15949','DHDN to WGS 84 (4)','These parameter values are taken from DHDN to ETRS89 (8) (code 15948) as ETRS89 may be considered equivalent to WGS 84 within the accuracy of the transformation.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4314','EPSG','4326','EPSG','3339',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu BeTA2007',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15954','RD/83 to WGS 84 (1)','These parameter values are taken from DHDN to ETRS89 (8) (code 15948) as RD/83 and ETRS89 may be considered equivalent to DHDN and WGS 84 respectively within the accuracy of the transformation.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4745','EPSG','4326','EPSG','2545',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu BeTA2007',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15955','PD/83 to WGS 84 (1)','These parameter values are taken from DHDN to ETRS89 (8) (code 15948) as PD/83 and ETRS89 may be considered equivalent to DHDN and WGS 84 respectively within the accuracy of the transformation.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4746','EPSG','4326','EPSG','2544',1.0,'EPSG','8656','Latitude and longitude difference file','BETA2007.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu BeTA2007',0);
+49 -28
View File
@@ -241,17 +241,17 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1311','ED50 to WGS 84 (18)',
INSERT INTO "helmert_transformation" VALUES('EPSG','1314','OSGB 1936 to WGS 84 (6)','For a more accurate transformation see OSGB 1936 / British National Grid to ETRS89 (2) (code 1039): contact the Ordnance Survey of Great Britain (http://www.gps.gov.uk/gpssurveying.asp) for details.','Oil exploration. Accuracy better than 4m and generally better than 2m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4277','EPSG','4326','EPSG','1264',2.0,446.448,-125.157,542.06,'EPSG','9001',0.15,0.247,0.842,'EPSG','9104',-20.489,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKOOA-Pet',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1315','OSGB 1936 to ED50 (UKOOA)','This transformation is concatenated from OSGB36 to WGS 84 (Petroleum) (code 1314) minus ED50 to WGS 84 (Common Offshore) (code 1311).','For oil exploration. Accuracy better than 4m and generally better than 2m.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4277','EPSG','4230','EPSG','1264',2.0,535.948,-31.357,665.16,'EPSG','9001',0.15,0.247,0.998,'EPSG','9104',-21.689,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKOOA-UKCS',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1316','Manoca to WGS 84 (1)','','?','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4260','EPSG','4326','EPSG','1060',999.0,-70.9,-151.8,-41.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SCS-Cmr',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','1317','Camacupa to WGS 72BE (1)','Derived by Geophysical Services Inc. in 1979 from mean of Transit results at 7 stations.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4324','EPSG','1604',10.0,-37.2,-370.6,-228.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1318','Camacupa to WGS 84 (1)','','Used for oil exploration by Conoco.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2316',10.0,-42.01,-332.21,-229.75,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CON-Ago B5',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1319','Camacupa to WGS 84 (2)','','Used for oil exploration by Texaco.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2317',25.0,-40.0,-354.0,-224.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TEX-Ago B2',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1320','Camacupa to WGS 84 (3)','Replaced by Camacupa to WGS 84 (9). Used by Shell prior to 1994.','Oil exploration prior to 1994.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2321',10.0,-37.2,-370.6,-224.0,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Ago old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1321','Camacupa to WGS 84 (4)','Derived as mean of 123 Transit passes at station Cabo Ledo NE base in November 1990. Used by Elf for block 7 up to December 1992 then replaced by Camacupa to WGS 84 (7). Used by Total in block 8, ExxonMobil block 24, Western Geophysical for spec. data.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2320',10.0,-41.8,-342.2,-228.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1322','Camacupa to WGS 84 (5)','Derived at station Djeno during coordination of platform PAL F2 in February 1992. Used by Elf for block 3 up to December 1992 then replaced by Camacupa to WGS 84 (7).','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2318',3.0,-55.5,-348.0,-229.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B3 old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1323','Camacupa to WGS 84 (6)','Derived at Luanda observatory December 1992.','Used for oil exploration by Elf for 1993 block 7 shallow water survey.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2319',8.0,-43.0,-337.0,-233.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B7 old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1324','Camacupa to WGS 84 (7)','Derived at platform PAL F2 in December 1992. For use in blocks 3, 7 and 17, replaced by Camacupa to WGS 84 (10) (code 1327).','Used for oil exploration by Elf for blocks 3, 7 and 17 between December 1992 and 1994 then superseded by Camacupa to WGS 84 (10). Used by Exxon for block 15 since 1993.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2322',3.0,-48.0,-345.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B15',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1325','Camacupa to WGS 84 (8)','Derived at platform PAL F2 in December 1992. Used by Total for block 2 between December 1992 and 1994 then replaced by Camacupa to WGS 84 (10).','Oil exploration between December 1992 and 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2317',3.0,-48.6,-345.1,-230.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B2 old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1326','Camacupa to WGS 84 (9)','Derived by GPS on two Topnav DGPS reference stations at Djeno and Luanda. Replaces Camacupa to WGS 84 (3). In block 18 replaced by BP from 1999 by Camacupa to WGS 84 (10).','Used by Shell since 1994.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2323',10.0,-41.057,-374.564,-226.287,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Ago B16',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1327','Camacupa to WGS 84 (10)','Derived at platform PAL F2 in 1994 by Topnav using Doris.','Used for oil exploration by Elf in blocks 3 and 17 since 1994. Used by Total in block 2 since 1994. Adopted by BP-Amoco Elf and Exxon for blocks 18 and 31-33 in 1999.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2324',5.0,-50.9,-347.6,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago N',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1317','Camacupa 1948 to WGS 72BE (1)','Derived by Geophysical Services Inc. in 1979 from mean of Transit results at 7 stations.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4324','EPSG','1604',10.0,-37.2,-370.6,-228.5,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1318','Camacupa 1948 to WGS 84 (1)','','Used for oil exploration by Conoco.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2316',10.0,-42.01,-332.21,-229.75,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CON-Ago B5',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1319','Camacupa 1948 to WGS 84 (2)','','Used for oil exploration by Texaco.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2317',25.0,-40.0,-354.0,-224.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TEX-Ago B2',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1320','Camacupa 1948 to WGS 84 (3)','Replaced by Camacupa 1948 to WGS 84 (9). Used by Shell prior to 1994.','Oil exploration prior to 1994.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2321',10.0,-37.2,-370.6,-224.0,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Ago old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1321','Camacupa 1948 to WGS 84 (4)','Mean of 123 Transit passes at station Cabo Ledo NE base in November 1990. Used by Elf for block 7 up to December 1992 then replaced by Camacupa 1948 to WGS 84 (7). Used by Total in block 8, ExxonMobil block 24, Western Geophysical for spec. data.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2320',10.0,-41.8,-342.2,-228.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1322','Camacupa 1948 to WGS 84 (5)','Derived at station Djeno during coordination of platform PAL F2 in February 1992. Used by Elf for block 3 up to December 1992 then replaced by Camacupa 1948 to WGS 84 (7).','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2318',3.0,-55.5,-348.0,-229.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B3 old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1323','Camacupa 1948 to WGS 84 (6)','Derived at Luanda observatory December 1992.','Used for oil exploration by Elf for 1993 block 7 shallow water survey.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2319',8.0,-43.0,-337.0,-233.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B7 old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1324','Camacupa 1948 to WGS 84 (7)','Derived at platform PAL F2 in December 1992. For use in blocks 3, 7 and 17, replaced by Camacupa 1948 to WGS 84 (10) (code 1327).','Used for oil exploration by Elf for blocks 3, 7 and 17 between December 1992 and 1994 then superseded by Camacupa (offshore) to WGS 84 (10). Used by Exxon for block 15 since 1993.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2322',3.0,-48.0,-345.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B15',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1325','Camacupa 1948 to WGS 84 (8)','Derived at platform PAL F2 in December 1992. Used by Total for block 2 between December 1992 and 1994 then replaced by Camacupa 1948 to WGS 84 (10).','Oil exploration between December 1992 and 1994.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2317',3.0,-48.6,-345.1,-230.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B2 old',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1326','Camacupa 1948 to WGS 84 (9)','Derived by GPS on two Topnav DGPS reference stations at Djeno and Luanda. Replaces Camacupa 1948 to WGS 84 (3). In block 18 replaced by BP from 1999 by Camacupa 1948 to WGS 84 (10).','Used by Shell since 1994.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2323',10.0,-41.057,-374.564,-226.287,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.219,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SHL-Ago B16',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1327','Camacupa 1948 to WGS 84 (10)','Derived at platform PAL F2 in 1994 by Topnav using Doris.','Used for oil exploration by Elf in blocks 3 and 17 since 1994. Used by Total in block 2 since 1994. Adopted by BP-Amoco Elf and Exxon for blocks 18 and 31-33 in 1999.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','4326','EPSG','2324',5.0,-50.9,-347.6,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago N',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1328','Malongo 1987 to Mhast (1)','Malongo 1987 is an offshore extension of Mhast adopted by Chevron in 1987.','Used for oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','4264','EPSG','1317',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','1329','Mhast to WGS 84 (1)','Superseded in 1990 by trf Malongo 1987 to WGS 84 (2), code 1557. Malongo 1987 is an offshore extension of the Mhast cooordinate system.','Used for oil exploration by Chevron until superseded in 1990 by trf Malongo 1987 to WGS 84 (2), code 1557.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4264','EPSG','4326','EPSG','1317',10.0,-252.95,-4.11,-96.38,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','1330','Malongo 1987 to WGS 84 (1)','Derived at Station Y in April 1989 using 572 transit satellite passes. Computed value for dZ was -96.42 but -96.38 has been utilised. Replaced Malongo 1987 to WGS 84 (3) (code 15791) in 1989. Replaced by Malongo 1987 to WGS 84 (2) (code 1557) in 1990.','Offshore oil exploration and production between April 1989 and June 1990.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4259','EPSG','4326','EPSG','3180',10.0,-252.95,-4.11,-96.38,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CHV-Ago Cab89',0);
@@ -438,9 +438,9 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1774','POSGAR 98 to SIRGAS 1
INSERT INTO "helmert_transformation" VALUES('EPSG','1775','Pulkovo 1942(83) to ETRS89 (2)','Derived at 35 points of the German GPS Network DREF. From 2001 replaces Pulkovo 1942(83) to ETRS89 (1) (code 1674) within Mecklenburg-Vorpommern and Sachsen-Anhalt. From 2009 replaces tfm 1674 in all other states of former East Germany.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4178','EPSG','4258','EPSG','1343',0.1,24.9,-126.4,-93.2,'EPSG','9001',-0.063,-0.247,-0.041,'EPSG','9104',1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu E 0.1m',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1776','DHDN to ETRS89 (2)','Mean of 109 stations. Replaces DHDN to ETRS89 (1) (tfm code 1309). May be taken as approximate transformation DHDN to WGS 84 - see code 1777.','For applications with an accuracy at 3 m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2326',3.0,598.1,73.7,418.2,'EPSG','9001',0.202,0.045,-2.455,'EPSG','9104',6.7,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W 3m',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1777','DHDN to WGS 84 (2)','Parameter values from DHDN to ETRS89 (2) (code 1776) assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. Replaces DHDN to WGS 84 (1) (tfm code 1673).','For applications with an accuracy at 3 m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326','EPSG','2326',3.0,598.1,73.7,418.2,'EPSG','9001',0.202,0.045,-2.455,'EPSG','9104',6.7,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Deu W 3m',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1778','DHDN to ETRS89 (3)','Derived in 2001 at 41 points of the German GPS Network DREF.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2543',0.1,597.1,71.4,412.1,'EPSG','9001',0.894,0.068,-1.563,'EPSG','9104',7.58,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-S',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1779','DHDN to ETRS89 (4)','Derived at 27 points of the German GPS Network DREF.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2542',0.1,584.8,67.0,400.3,'EPSG','9001',0.105,0.013,-2.378,'EPSG','9104',10.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-cen',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1780','DHDN to ETRS89 (5)','Derived at 21 points of the German GPS Network DREF.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2541',0.1,590.5,69.5,411.6,'EPSG','9001',-0.796,-0.052,-3.601,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-N',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1778','DHDN to ETRS89 (3)','Derived in 2001 at 41 points of the German GPS Network DREF.','For applications with an accuracy at sub-metre level.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2543',1.0,597.1,71.4,412.1,'EPSG','9001',0.894,0.068,-1.563,'EPSG','9104',7.58,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-S',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1779','DHDN to ETRS89 (4)','Derived at 27 points of the German GPS Network DREF.','For applications with an accuracy at sub-metre level.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2542',1.0,584.8,67.0,400.3,'EPSG','9001',0.105,0.013,-2.378,'EPSG','9104',10.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-cen',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1780','DHDN to ETRS89 (5)','Derived at 21 points of the German GPS Network DREF.','For applications with an accuracy at sub-metre level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2541',1.0,590.5,69.5,411.6,'EPSG','9001',-0.796,-0.052,-3.601,'EPSG','9104',8.3,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu W-N',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1781','DHDN to ETRS89 (6)','Derived at 10 points of the German GPS Network DREF.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2544',0.1,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu Thur',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','1782','DHDN to ETRS89 (7)','Derived at 35 points of the German GPS Network DREF.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4258','EPSG','2545',0.1,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IfAG-Deu Sach',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','1783','ED50 to ETRS89 (9)','May be taken as approximate transformation ED50 to WGS 84 - see code 1784. Note: the ETRS89 CRS is not used in Turkey.','For applications to an accuracy of 2 metres.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258','EPSG','1237',2.0,-84.1,-101.8,-129.7,'EPSG','9001',0.0,0.0,0.468,'EPSG','9104',1.05,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'HGK-Tur',0);
@@ -763,7 +763,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','5333','ITRF2005 to ITRF2008
INSERT INTO "helmert_transformation" VALUES('EPSG','5350','Campo Inchauspe to POSGAR 2007 (1)','Adopted from U.S. Defense Mapping Agency values for Campo Inchauspe to WGS 84 (tfm code 1127) assuming that POSGAR 2007 is equivalent to WGS 84.','Accuracy 5m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4221','EPSG','5340','EPSG','3215',5.0,-148.0,136.0,90.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Arg',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5351','POSGAR 2007 to WGS 84 (1)','','Approximation at the sub meter level.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5340','EPSG','4326','EPSG','1033',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Arg',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5374','MARGEN to WGS 84 (1)','','Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5354','EPSG','4326','EPSG','1049',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Bol',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5375','SIRGAS-Chile to WGS 84 (1)','','Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5360','EPSG','4326','EPSG','1066',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Chl',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5375','SIRGAS-Chile to WGS 84 (1)','','Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9184','EPSG','4326','EPSG','1066',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Chl',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5376','CR05 to WGS 84 (1)','','Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5365','EPSG','4326','EPSG','1074',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Cri',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5377','MACARIO SOLIS to WGS 84 (1)','','Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5371','EPSG','4326','EPSG','1186',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Pan',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5378','Peru96 to WGS 84 (1)','','Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5373','EPSG','4326','EPSG','1189',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Per',0);
@@ -861,7 +861,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','6701','GDBD2009 to WGS 84 (1
INSERT INTO "helmert_transformation" VALUES('EPSG','6710','RDN2008 to ETRS89 (1)','May be taken as approximate transformation RDN2008 to WGS 84 - see code 6711.','RDN2008 is a national realization of ETRS89.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6706','EPSG','4258','EPSG','1127',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ita',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6711','RDN2008 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. RDN2008 is a regional realisation of ETRS89.','Accuracy +/- 1 metre.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6706','EPSG','4326','EPSG','1127',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ita',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6864','ITRF96 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Jointly derived by Canada and US at 12 North American VLBI stations. Replaced by tfm code 6865 from 2000-01-01. See tfm code 8259 for Canadian equivalent.','Geodesy. Definition of NAD83(CORS96) from 1st January 1997 through 31st December 1999 and is therefore treated as errorless.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4917','EPSG','6781','EPSG','1511',0.0,0.991,-1.9072,-0.5129,'EPSG','9001',25.79,9.65,11.66,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',0.0532,-0.7423,-0.0316,'EPSG','1032',0.0,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6865','ITRF97 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. 1996 derivation (see tfm 6864) concatenated with IGS value of ITRF96>ITRF97. Replaced by tfm code 6865 from 2000-01-01. See tfm code 8260 for Canadian equivalent.','Geodesy. Redefinition of NAD83(CORS96) from January 2000 through December 2001.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4918','EPSG','6781','EPSG','1511',0.06,0.9889,-1.9074,-0.503,'EPSG','9001',25.915,9.426,11.599,'EPSG','1031',-0.93,'EPSG','1028',0.0007,-0.0001,0.0019,'EPSG','1042',0.067,-0.757,-0.031,'EPSG','1032',-0.19,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6865','ITRF97 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. 1996 derivation (see tfm 6864) concatenated with IGS value of ITRF96>ITRF97. Replaced by tfm code 6865 from 2000-01-01. See tfm code 8260 for Canadian equivalent.','Geodesy. Redefinition of NAD83(CORS96) from January 2000 through December 2001.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4918','EPSG','6781','EPSG','1511',0.0,0.9889,-1.9074,-0.503,'EPSG','9001',25.915,9.426,11.599,'EPSG','1031',-0.93,'EPSG','1028',0.0007,-0.0001,0.0019,'EPSG','1042',0.067,-0.757,-0.031,'EPSG','1032',-0.19,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6866','ITRF2000 to NAD83(CORS96) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Joint derivation by Canada and US (tfm 6864) concatenated with IGS value for ITRF96>97 and IERS ITRF97>2000 transformations. See tfm 8261 for Canadian equivalent.','Geodesy. Definition of NAD83(CORS96) from 1st January 2002 through 6th September 2011 and is therefore treated as errorless.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','6781','EPSG','1511',0.0,0.9956,-1.9013,-0.5215,'EPSG','9001',25.915,9.426,11.599,'EPSG','1031',0.62,'EPSG','1028',0.0007,-0.0007,0.0005,'EPSG','1042',0.067,-0.757,-0.051,'EPSG','1032',-0.18,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-US CORS96',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6872','Abidjan 1987 to WGS 84 (2)','Derived and used by Western Geophysical for offshore surveys in the 1990s, but exact provenance uncertain. Used by OMV.','Accuracy uncertain but there is some evidence of unknown reliability that suggests accuracy of better than 2m throughout offshore.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4143','EPSG','4326','EPSG','2296',2.0,-123.1,53.2,465.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'WGC-Civ',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6873','Tananarive to WGS 84 (2)','Derived at 9 points throughout Madagascar. Adopted by OMV.','For applications with an accuracy of 3m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4297','EPSG','4326','EPSG','1149',3.0,-198.383,-240.517,-107.909,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ROG-Mdg',0);
@@ -901,16 +901,16 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','6942','AGD66 to PNG94 (7)','
INSERT INTO "helmert_transformation" VALUES('EPSG','6943','AGD66 to WGS 84 (21)','Parameter values taken from AGD66 to PNG94 (3) (code 6938). Approximation at the +/- 5m level assuming that PNG94 is equivalent to WGS 84 within the accuracy of the transformation.','Low accuracy transformation suitable for mapping and navigation purposes only.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326','EPSG','4214',5.0,-129.0,-58.0,152.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png Mainland',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6944','AGD66 to WGS 84 (22)','Parameter values taken from AGD66 to PNG94 (5) (code 6940). Approximation at the +/- 4m level assuming that PNG94 is equivalent to WGS 84 within the accuracy of the transformation.','Low accuracy transformation suitable for mapping and navigation purposes only.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326','EPSG','4013',4.0,-131.3,-55.3,151.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png PFTB 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6945','AGD66 to WGS 84 (23)','Parameter values taken from AGD66 to PNG94 (7) (code 6942). Approximation at the +/- 4m level assuming that PNG94 is equivalent to WGS 84 within the accuracy of the transformation.','Low accuracy transformation suitable for mapping and navigation purposes only.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4202','EPSG','4326','EPSG','4216',4.0,-137.4,-58.9,150.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Qcl-Png North Fly',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6949','PSAD56 to SIRGAS-Chile (1)','Also used as a transformation from PSAD56 to WGS 84 - see code 6971.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','5360','EPSG','4231',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6950','PSAD56 to SIRGAS-Chile (2)','Also used as a transformation from PSAD56 to WGS 84 - see code 6972.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','5360','EPSG','4222',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6951','PSAD56 to SIRGAS-Chile (3)','Also used as a transformation from PSAD56 to WGS 84 - see code 6973.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','5360','EPSG','4221',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6949','PSAD56 to SIRGAS-Chile (1)','Also used as a transformation from PSAD56 to WGS 84 - see code 6971.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9184','EPSG','4231',5.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6950','PSAD56 to SIRGAS-Chile (2)','Also used as a transformation from PSAD56 to WGS 84 - see code 6972.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9184','EPSG','4222',5.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6951','PSAD56 to SIRGAS-Chile (3)','Also used as a transformation from PSAD56 to WGS 84 - see code 6973.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','9184','EPSG','4221',5.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6960','VN-2000 to WGS 84 (2)','','Academic research not officially adopted.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4756','EPSG','4326','EPSG','3328',1.0,-191.90441429,-39.30318279,-111.45032835,'EPSG','9001',-0.00928836,0.01975479,-0.00427372,'EPSG','9104',0.252906278,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DoSM-Vnm',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6963','Albanian 1987 to ETRS89 (1)','Derived using 90 stations, mse 18cm. May be taken as approximate transformation from Albanian 1987 to WGS 84 (see code 6964).','Use only for horizontal coordinates; geoid heights must be calculated with ALBGEO3 software.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4258','EPSG','3212',0.2,-44.183,-0.58,-38.489,'EPSG','9001',2.3867,2.7072,-3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Alb 2D',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','6964','Albanian 1987 to WGS 84 (1)','Parameter values from Albanian 1987 to ETRS89 (1) (code 6963). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','Use only for horizontal coordinates; geoid heights must be calculated with ALBGEO3 software.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4326','EPSG','3212',1.0,-44.183,-0.58,-38.489,'EPSG','9001',2.3867,2.7072,-3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Alb 2D',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','6967','SAD69 to SIRGAS-Chile (1)','Also used as a transformation from SAD69 to WGS 84 - see code 6974. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326','EPSG','4232',5.0,-59.0,-11.0,-52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','6968','SAD69 to SIRGAS-Chile (2)','Also used as a transformation from SAD69 to WGS 84 - see code 6975. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360','EPSG','4224',5.0,-64.0,0.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6968','SAD69 to SIRGAS-Chile (2)','Also used as a transformation from SAD69 to WGS 84 - see code 6975. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','9184','EPSG','4224',5.0,-64.0,0.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl B',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6969','SAD69 to SIRGAS-Chile (3)','Also used as a transformation from SAD69 to WGS 84 - see code 6976. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','4326','EPSG','4221',5.0,-72.0,10.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','6970','SAD69 to SIRGAS-Chile (4)','Also used as a transformation from SAD69 to WGS 84 - see code 6977.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360','EPSG','2805',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6970','SAD69 to SIRGAS-Chile (4)','Also used as a transformation from SAD69 to WGS 84 - see code 6977.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','9184','EPSG','2805',5.0,-79.0,13.0,-14.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl D',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6971','PSAD56 to WGS 84 (15)','Derived at 5 stations. Replaces PSAD56 to WGS 84 (3) (code 1203). Also used as a transformation from PSAD56 to SIRGAS-Chile - see code 6949.','For military purposes. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326','EPSG','4231',17.0,-302.0,272.0,-360.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl N 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6972','PSAD56 to WGS 84 (16)','Derived at 7 stations. Also used as a transformation from PSAD56 to SIRGAS-Chile - see code 6950.','For military purposes. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326','EPSG','4222',17.0,-328.0,340.0,-329.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl Cen 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','6973','PSAD56 to WGS 84 (17)','Derived at 6 stations. Replaces PSAD56 to WGS 84 (4) (code 1204). Info source gives S limit as 44°S but Chilean IGM states that PSAD56 limit is 43°30''S. Also used as a transformation from PSAD56 to SIRGAS-Chile - see code 6951.','For military purposes. Accuracy 10m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4248','EPSG','4326','EPSG','4221',17.0,-352.0,403.0,-287.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Chl S 2014',0);
@@ -933,8 +933,8 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','7442','Nord Sahara 1959 to W
INSERT INTO "helmert_transformation" VALUES('EPSG','7443','ONGD14 to WGS 84 (2)','Approximation at the +/- 1m level assuming that ONG14 is equivalent to WGS 84. See transformation code 7377 for authoritative values.','Geodesy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7373','EPSG','4326','EPSG','1183',2.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Omn',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7444','CGRS93 to ETRS89 (1)','Derived at 6 points at epoch 1993.1. May be taken as approximate transformation CGRS93 to WGS 84 - see code 7445.','Small scale hydrographic and aviation mapping.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6311','EPSG','4258','EPSG','3236',0.1,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DLS-Cyp',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','7445','CGRS93 to WGS 84 (1)','Parameter values from CGRS93 to ETRS89 (1) (code 7444). Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84.','Small scale hydrographic and aviation mapping.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','6311','EPSG','4326','EPSG','3236',1.0,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Cyp',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','7448','SAD69 to SIRGAS-Chile (1)','Also used as a transformation from SAD69 to WGS 84 - see code 6974. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360','EPSG','4232',5.0,-59.0,-11.0,-52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7449','SAD69 to SIRGAS-Chile (3)','Also used as a transformation from SAD69 to WGS 84 - see code 6976. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','5360','EPSG','4221',5.0,-72.0,10.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7448','SAD69 to SIRGAS-Chile (1)','Also used as a transformation from SAD69 to WGS 84 - see code 6974. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','9184','EPSG','4232',5.0,-59.0,-11.0,-52.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl A',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7449','SAD69 to SIRGAS-Chile (3)','Also used as a transformation from SAD69 to WGS 84 - see code 6976. Note: SAD69 adopted in Chile only south of 43°30''S.','Small and medium scale cartographic mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4618','EPSG','9184','EPSG','4221',5.0,-72.0,10.0,-32.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Chl C',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7666','WGS 84 (G1762) to ITRF2008 (1)','Defined at epoch 2005.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','Geodesy.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7664','EPSG','5332','EPSG','1262',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2005.0',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7667','WGS 84 (G1674) to WGS 84 (G1762) (1)','Defined at epoch 2005.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','Geodesy.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7662','EPSG','7664','EPSG','1262',0.01,-4.0,3.0,4.0,'EPSG','1025',0.27,-0.27,0.38,'EPSG','1031',-6.9,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2005.0',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7668','WGS 84 (G1150) to WGS 84 (G1762) (1)','Defined at epoch 2001.0. Scale difference in ppb where 1/billion = 1E-9 or nm/m.','Geodesy','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7660','EPSG','7664','EPSG','1262',0.02,-6.0,5.0,20.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',-4.5,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 2001.0',0);
@@ -954,9 +954,9 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','7720','CGRS93 to ETRS89 (1)'
INSERT INTO "helmert_transformation" VALUES('EPSG','7721','CGRS93 to WGS 84 (1)','Parameter values from CGRS93 to ETRS89 (1) (code 7720). Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84.','Small scale hydrographic and aviation mapping.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','6311','EPSG','4326','EPSG','3236',1.0,8.846,-4.394,-1.122,'EPSG','9001',0.00237,0.146528,-0.130428,'EPSG','9104',0.783926,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Cyp',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7790','ITRF2008 to ITRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Estimated using 127 stations at 125 sites.','Geodesy','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','7789','EPSG','1262',0.01,-1.6,-1.9,-2.4,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.02,'EPSG','1028',0.0,0.0,0.1,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',-0.03,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7806','Pulkovo 1942(83) to BGS2005 (1)','Older CRSs (CS30, CS50, CS70) must first be transformed to Pulkovo 1942(83) before this transformation is applied.','Official transformation for converting existing geodetic and cartographic materials to BGS2005.','EPSG','1063','Molodensky-Badekas (PV geog2D domain)','EPSG','4178','EPSG','7798','EPSG','3224',5.0,5.0,-133.0,-104.0,'EPSG','9001',-1.4,-2.0,3.4,'EPSG','9104',-3.9901,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4223032.0,2032778.0,4309209.0,'EPSG','9001','RD-Bul',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7807','ITRF2008 to NAD83(2011) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Joint derivation by Canada and US (tfm 6864) concatenated with IGS value for ITRF96>97 and IERS ITRF97>2008 transformations. See tfm 8264 for Canadian equivalent.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6317','EPSG','1511',0.1,0.99343,-1.90331,-0.52655,'EPSG','9001',25.91467,9.42645,11.59935,'EPSG','1031',1.71504,'EPSG','1028',0.00079,-0.0006,-0.00134,'EPSG','1042',0.06667,-0.75744,-0.05133,'EPSG','1032',-0.10201,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-NA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7808','ITRF2008 to NAD83(PA11) (1)','Information source gives IGS08 as source CRS: for most practical purposes IGS08 is equivalent to ITRF2008.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6320','EPSG','4162',0.1,0.908,-2.0161,-0.5653,'EPSG','9001',27.741,13.469,2.712,'EPSG','1031',1.1,'EPSG','1028',0.0001,0.0001,-0.0018,'EPSG','1042',-0.384,1.007,-2.186,'EPSG','1032',0.08,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7809','ITRF2008 to NAD83(MA11) (1)','Information source gives IGS08 as source CRS: for most practical purposes IGS08 is equivalent to ITRF2008.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6323','EPSG','4167',0.1,0.908,-2.0161,-0.5653,'EPSG','9001',28.971,10.42,8.928,'EPSG','1031',1.1,'EPSG','1028',0.0001,0.0001,-0.0018,'EPSG','1042',-0.02,0.105,-0.347,'EPSG','1032',0.08,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7807','ITRF2008 to NAD83(2011) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Joint derivation by Canada and US (tfm 6864) concatenated with IGS value for ITRF96>97 and IERS ITRF97>2008 transformations. See tfm 8264 for Canadian equivalent.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6317','EPSG','1511',0.0,0.99343,-1.90331,-0.52655,'EPSG','9001',25.91467,9.42645,11.59935,'EPSG','1031',1.71504,'EPSG','1028',0.00079,-0.0006,-0.00134,'EPSG','1042',0.06667,-0.75744,-0.05133,'EPSG','1032',-0.10201,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-NA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7808','ITRF2008 to NAD83(PA11) (1)','Information source gives IGS08 as source CRS: for most practical purposes IGS08 is equivalent to ITRF2008.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6320','EPSG','4162',0.0,0.908,-2.0161,-0.5653,'EPSG','9001',27.741,13.469,2.712,'EPSG','1031',1.1,'EPSG','1028',0.0001,0.0001,-0.0018,'EPSG','1042',-0.384,1.007,-2.186,'EPSG','1032',0.08,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7809','ITRF2008 to NAD83(MA11) (1)','Information source gives IGS08 as source CRS: for most practical purposes IGS08 is equivalent to ITRF2008.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','5332','EPSG','6323','EPSG','4167',0.0,0.908,-2.0161,-0.5653,'EPSG','9001',28.971,10.42,8.928,'EPSG','1031',1.1,'EPSG','1028',0.0001,0.0001,-0.0018,'EPSG','1042',-0.02,0.105,-0.347,'EPSG','1032',0.08,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7814','ITRF89 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','Geodesy','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','4919','EPSG','1262',0.01,-2.97,-4.75,7.39,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-5.85,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7817','UCS-2000 to ITRF2000 (1)','Derived for epoch 2005.0 at which time it defines UCS-2000 and is therefore exact (accuracy = 0) at this epoch. May be taken as approximate transformation UCS-2000 to WGS 84 - see code 5840.','For applications to an accuracy of 1 metre.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','5558','EPSG','4919','EPSG','1242',0.0,24.322,-121.372,-75.847,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SSGC-Ukr',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7833','Albanian 1987 to ETRS89 (1)','Derived using 90 stations by Military Geographical Institute of Italy (IGM) on behalf of ASIG. mse = 18cm. May be taken as approximate transformation from Albanian 1987 to WGS 84 (see code 7834).','Use only for horizontal coordinates; geoid heights must be calculated with ALBGEO3 software.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4258','EPSG','3212',0.2,-44.183,-0.58,-38.489,'EPSG','9001',-2.3867,-2.7072,3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Alb 2D',0);
@@ -1046,9 +1046,13 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','8680','MGI 1901 to ETRS89 (7
INSERT INTO "helmert_transformation" VALUES('EPSG','8681','MGI 1901 to WGS 84 (12)','Parameter values from MGI 1901 to ETRS89 (7) (code 8680). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','For applications to an accuracy of 1 metre.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4258','EPSG','1050',1.0,489.88,183.912,533.711,'EPSG','9001',5.76545,4.69994,-12.58211,'EPSG','9104',1.00646,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FGA-Bih',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','8688','MGI 1901 to WGS 84 (12)','Parameter values from MGI to Slovenia 1996 (12) (tfm code 8689) assuming Slovenia 1996 and WGS 84 can be considered the same to within the accuracy of the transformation.','1m accuracy.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326','EPSG','3307',1.0,476.08,125.947,417.81,'EPSG','9001',-4.610862,-2.388137,11.942335,'EPSG','9104',9.896638,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 2010',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8689','MGI 1901 to Slovenia 1996 (12)','Derived at 479 nodes of Delauney triangulation generated from 1958 control points. Replaces MGI 1901 to Slovenia 1996 (1) (code 3916). May be taken as approximate transformation MGI 1901 to WGS 84 (see code 8688).','1m accuracy.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4765','EPSG','3307',1.0,476.08,125.947,417.81,'EPSG','9001',-4.610862,-2.388137,11.942335,'EPSG','9104',9.896638,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 2010',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8695','Camacupa 1948 to Camacupa 2015 (1)','Concatenation of transformations 1327 and 8882.','Geodesy.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4220','EPSG','8694','EPSG','2324',5.8,42.899,-214.863,-11.927,'EPSG','9001',-1.844,0.648,-6.37,'EPSG','9104',0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8696','Camacupa 1948 to Camacupa 2015 (2)','Concatenation of transformations 1324 and 8882.','Geodesy.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4220','EPSG','8694','EPSG','2322',4.2,45.799,-212.263,-11.927,'EPSG','9001',-1.844,0.648,-6.37,'EPSG','9104',0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago B15',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8819','RSAO13 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RSAO13 is equivalent to WGS 84within the accuracy of the transformation.','Approximation at the 1m level.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8699','EPSG','4326','EPSG','1029',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8822','MTRF-2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that MTRF-2000 (ITRF2000 at epoch 2004.00) is equivalent to WGS 84.','Accuracy +/- 1 metre.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8818','EPSG','4326','EPSG','1206',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Sau',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8823','MGI 1901 to WGS 84 (13)','Parameter values from MGI 1901 to ETRS89 (7) (code 8680). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','For applications to an accuracy of 1 metre.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4326','EPSG','1050',1.0,489.88,183.912,533.711,'EPSG','9001',5.76545,4.69994,-12.58211,'EPSG','9104',1.00646,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FGA-Bih',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8824','Ain el Abd to MTRF-2000 (1)','Accuracy given as ''several metres''. More precise national cellular transformation parameters were also determined. Software coded for these cellular transformations is available in MOMRA.','National transformation parameters.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','8818','EPSG','3303',5.0,-61.15,-315.86,-3.51,'EPSG','9001',0.41,0.74,-3.52,'EPSG','9104',1.36,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MOMRA-Sau',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8827','Camacupa 2015 to RSAO13 (1)','Derived by Univ. of Lisbon for CIDDEMA using 38 REPANGOL points in Angola (except SE) and Cabinda. Average horizontal error 1m, vertical 3m; max radial error 6m.','Demarcation of Angola EEZ.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8694','EPSG','8699','EPSG','1029',3.0,-93.799,-132.737,-219.073,'EPSG','9001',1.844,-0.648,6.37,'EPSG','9104',-0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CIDDEMA-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8828','RGPF to WGS 84 (1)','SHOM report gives scale difference as 0.999 999 9907 (wrt unity). Transformation is to original Transit definition of WGS 84. It is consistent with later WGS 84 realisations G730, G873 and G1150 to no better than 1m.','Spatial referencing.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4687','EPSG','4326','EPSG','1098',0.5,0.072,-0.507,-0.245,'EPSG','9001',0.0183,-0.0003,0.007,'EPSG','9104',-0.0093,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8829','Tahiti 79 to RGPF (1)','','Spatial referencing.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4690','EPSG','4687','EPSG','3124',0.5,221.525,152.948,176.768,'EPSG','9001',2.3847,1.3896,0.877,'EPSG','9104',11.4741,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8830','Tahiti 79 to WGS 84 (2)','Concatenation of Tahiti 79 to RGPF (1) and RGPF to WGS 84 (1) (CT codes 8829 and 8828).','Spatial referencing.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4690','EPSG','4326','EPSG','3124',1.0,221.597,152.441,176.523,'EPSG','9001',2.403,1.3893,0.884,'EPSG','9104',11.4648,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'URB-Pyf',0);
@@ -1081,7 +1085,11 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','8877','ITRF91 to ETRF2014 (1
INSERT INTO "helmert_transformation" VALUES('EPSG','8878','ITRF90 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','Realization of ETRS89 from ITRF90 through ETRF2014.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4912','EPSG','8401','EPSG','1298',0.0,-25.4,-11.5,92.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-4.79,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8879','ITRF89 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','Realization of ETRS89 from ITRF89 through ETRF2014.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','8401','EPSG','1298',0.0,-30.4,-35.5,130.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-8.19,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8880','ITRF2014 to ETRF2014 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9. See ITRF2014 to ETRF2014 (1) (code 8366) for transformation which defines ETRF2014. Transformation 8407 is equivalent to 8366 but with parameter values at epoch 2010.00.','Realization of ETRS89 from ITRF2014 through ETRF2014.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401','EPSG','1298',0.0,0.0,0.0,0.0,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8882','Camacupa 2015 to WGS 84 (11)','Derived by Univ. of Lisbon for CIDDEMA using 38 REPANGOL points in Angola (except SE) and Cabinda. Average horizontal error 1m, vertical 3m; max radial error 6m. Application offshore differs from Camacupa 1948 to WGS 84 by approx 25m.','Used by CIDDEMA for delimitation of Angola''s EEZ boundary.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8694','EPSG','4326','EPSG','1029',3.0,-93.799,-132.737,-219.073,'EPSG','9001',1.844,-0.648,6.37,'EPSG','9104',-0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CIDDEMA-Ago',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8883','Camacupa 1948 to RSAO13 (1)','Parameter values taken from Camacupa 1948 to WGS 84 (7) (code 1324) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation.','Spatial referencing.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','8699','EPSG','2322',3.0,-48.0,-345.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B15',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8884','Camacupa 1948 to RSAO13 (2)','Parameter values taken from Camacupa 1948 to WGS 84 (10) (code 1327) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation.','Spatial referencing.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','8699','EPSG','2324',5.0,-50.9,-347.6,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Ago N',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8886','SVY21 to WGS 84 (1)','Considered exact at 1994-01-01 when SVY21 aligned to WGS 84 (Transit).','Approximation at the +/- 1m level.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4757','EPSG','4326','EPSG','1210',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SLA-sgp',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8887','GDA2020 to WGS 84 (Transit) (1)','Approximation at the 3m level assuming WGS 84 (Transit) is equivalent to ITRF2014 within the accuracy of the transformation.','Spatial referencing with 3-metre accuracy.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','7842','EPSG','7815','EPSG','4177',3.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GA-Aus 3m',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8889','BGS2005 to ETRS89 (1)','BGS2005 is a national realization of ETRS89. May be taken as approximate transformation BGS2005 to WGS 84 - see code 8890.','Pan-European spatial positioning.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7798','EPSG','4258','EPSG','1056',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bgr',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8890','BGS2005 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. BGS2005 is a national realization of ETRS89.','Accuracy +/- 1 metre.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7798','EPSG','4326','EPSG','1056',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bgr',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8891','LKS92 to ETRS89 (1)','LKS92 is a national realization of ETRS89. May be taken as approximate transformation LKS92 to WGS 84 - see code 1958.','Pan-European spatial positioning.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4661','EPSG','4258','EPSG','1139',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Lva',0);
@@ -1133,18 +1141,31 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','9038','IGb08 to IGS14 (1)','
INSERT INTO "helmert_transformation" VALUES('EPSG','9051','ITRF94 to SIRGAS 1995 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4916','EPSG','4974','EPSG','3448',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1995.4,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-S Am',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9052','ITRF2000 to SIRGAS 2000 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4919','EPSG','4988','EPSG','3418',0.01,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2000.4,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'SIR-SC Am',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9076','WGS 84 (G873) to ITRF94 (1)','Defined at epoch 1997.0.','Geodesy','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7658','EPSG','4916','EPSG','1262',0.1,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 1997.0',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9077','ITRF2000 to NAD83(MARP00) (1)','Defines NAD83(MARP00). Equivalent transformation published on NGS web site and used in HDTP with rX=28.971 mas, rY=10.420 mas and rZ=8.928 mas at epoch 1997.00.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','9070','EPSG','4167',0.0,0.9102,-2.0141,-0.5602,'EPSG','9001',29.039,10.065,10.101,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',-0.02,0.105,-0.347,'EPSG','1032',0.0,'EPSG','1030',1993.62,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-MA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9078','ITRF2000 to NAD83(PACP00) (1)','Defines NAD83(PACP00). Equivalent transformation published on NGS web site and used in HDTP with rX=27.741 mas, rY=13.469 mas and rZ=2.712 mas at epoch 1997.00.','Geodesy.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','4919','EPSG','9073','EPSG','4162',0.0,0.9102,-2.0141,-0.5602,'EPSG','9001',29.039,10.065,10.101,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1042',-0.384,1.007,-2.186,'EPSG','1032',0.0,'EPSG','1030',1993.62,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NGS-PA',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9079','ITRF97 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Uses IGS determination. Used as first step in ITRF97 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','Geodesy.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4918','EPSG','4917','EPSG','1175',0.01,0.0,-0.51,15.53,'EPSG','1025',-0.16508,0.26897,0.05984,'EPSG','1031',-1.51099,'EPSG','1028',0.69,-0.1,1.86,'EPSG','1027',-0.01347,0.01514,-0.00027,'EPSG','1032',-0.19201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 97',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9080','ITRF2000 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2000 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','Geodesy.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4919','EPSG','4917','EPSG','1175',0.01,6.7,3.79,-7.17,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',0.06901,'EPSG','1028',0.69,-0.7,0.46,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.18201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2000',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9081','ITRF2005 to ITRF96 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2005 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','Geodesy.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','4917','EPSG','1175',0.01,6.8,2.99,-12.97,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',0.46901,'EPSG','1028',0.49,-0.6,-1.34,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.10201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2005',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9082','ITRF2008 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2008 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','Geodesy.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','5332','EPSG','4917','EPSG','1175',0.01,4.8,2.09,-17.67,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',1.40901,'EPSG','1028',0.79,-0.6,-1.34,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.10201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2008',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9083','ITRF2014 to ITRF96 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Used as first step in ITRF2014 to NZGD2000 concatenated operations, followed by application of NZGD2000 deformation model.','Geodesy.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','4917','EPSG','1175',0.01,6.4,3.99,-14.27,'EPSG','1025',-0.16508,0.26897,0.11984,'EPSG','1031',1.08901,'EPSG','1028',0.79,-0.6,-1.44,'EPSG','1027',-0.01347,0.01514,0.01973,'EPSG','1032',-0.07201,'EPSG','1030',2000.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2014',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9126','NAD83(CSRS)v2 to NAD83(CORS96) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF96 by common transformations (codes 6864 and 8259). 6864 defines CORS96 from 1st January 1997 to 31st December 1999.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8233','EPSG','6781','EPSG','4544',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9127','NAD83(CSRS)v3 to NAD83(CORS96) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF97 by common transformations (codes 6865 and 8260). 6865 defines CORS96 from 1st January 2000 to 31st December 2001.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8238','EPSG','6781','EPSG','4544',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9128','NAD83(CSRS)v4 to NAD83(CORS96) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF2000 by common transformations (codes 6866 and 8261). 6866 defines CORS96 from 1st January 2002 to 6th September 2011.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8242','EPSG','6781','EPSG','4544',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2002.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9129','NAD83(CSRS)v6 to NAD83(2011) (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. Source and target CRSs defined from ITRF2008 by common transformations (codes 7807 and 8264).','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8250','EPSG','6317','EPSG','1262',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ISO-N Am',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9142','MGI 1901 to KOSOVAREF01 (1)','Derived at 18 points across the area of Kosovo. May be taken as approximate transformation MGI 1901 to WGS 84 (see code 9143).','Spatial referencing.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','9140','EPSG','4542',1.0,628.54052,192.2538,498.43507,'EPSG','9001',-13.79189,-0.81467,41.21533,'EPSG','9104',-17.40368,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KCA-Kos',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9143','MGI 1901 to WGS 84 (14)','Parameter values from MGI 1901 to KOSOVAREF01 (1) (code 9142). Assumes KOSOVAREF01 and WGS 84 can be considered the same to within the accuracy of the transformation.','Approximation at the 1m level.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','3906','EPSG','4326','EPSG','4542',1.0,628.54052,192.2538,498.43507,'EPSG','9001',-13.79189,-0.81467,41.21533,'EPSG','9104',-17.40368,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Kos',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9144','KOSOVAREF01 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84. KOSOVAREF01 is a national realization of ETRS89.','Accuracy +/- 1 metre.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9140','EPSG','4326','EPSG','4542',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Kos',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9145','WGS 84 (Transit) to ITRF90 (1)','','Geodesy','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','7815','EPSG','4912','EPSG','1262',1.0,-0.06,0.517,0.223,'EPSG','9001',-0.0183,0.0003,-0.007,'EPSG','9104',0.011,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9177','SIRGAS-Chile 2002 to ITRF2000 (1)','Transformation is exact at epoch 2002.00 but accuracy then decreasing with time.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','5358','EPSG','4919','EPSG','1066',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2002.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9178','SIRGAS-Chile 2010 to IGS08 (1)','Transformation is exact at epoch 2010.00 but accuracy then decreasing with time.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','8947','EPSG','6934','EPSG','1066',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9179','SIRGAS-Chile 2013 to IGb08 (1)','Transformation is exact at epoch 2013.00 but accuracy then decreasing with time.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9146','EPSG','9015','EPSG','1066',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2013.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9180','SIRGAS-Chile 2016 to IGb08 (1)','Transformation is exact at epoch 2016.00 but accuracy then decreasing with time.','Geodesy.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','9151','EPSG','9015','EPSG','1066',0.1,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2016.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IOGP-Chl',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9185','AGD66 to GDA2020 (1)','This transformation is for users wanting to apply a 7-parameter conformal transformation from AGD66 to GDA2020 in the ACT.','Spatial referencing.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','7844','EPSG','2283',0.05,-136.9703,-37.5638,124.4242,'EPSG','9001',-0.25676,-0.42966,-0.30077,'EPSG','9104',-4.61966,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPD-Aus ACT',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9186','ITRF2008 to IG05/12 Intermediate CRS','Derived from Israeli CORS on ITRF2008 at epoch 2018.50. Updates CT 6993 for approx. 40cm tectonic plate motion 2012 to 2019 for GIS purposes. CT 6993 remains the legal definition of IG05/12 and must be used for cadastral and precise engineering purposes.','GIS. Note: not to be used for cadastre or precise engineering survey: see remarks.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8999','EPSG','6990','EPSG','2603',0.05,-23.772,-17.49,-17.859,'EPSG','9001',-0.3132,-1.85274,1.67299,'EPSG','9104',5.4262,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr 2019',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9189','WGS 84 to IG05/12 Intermediate CRS','Parameter values from CT code 9186 assuming that WGS 84 is coincident with ITRF2008. Updates CT 6993 for approx. 40cm tectonic plate motion for GIS purposes. CT 6993 remains the legal definition of IG05/12 and must be used for cadastre and engineering.','GIS. Note: not to be used for cadastre or precise engineering survey: see remarks.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4326','EPSG','6990','EPSG','2603',0.1,-23.772,-17.49,-17.859,'EPSG','9001',-0.3132,-1.85274,1.67299,'EPSG','9104',5.4262,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SOI-Isr 2019',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9223','WGS 84 to ETRS89 (2)','Parameter values derived from ITRF2008 to ETRF2000 (1), code 7951, as a time-specific transformation @2014.81, assuming ITRF2008 = WGS 84 (G1762) = WGS 84 and ETRF2000 = ETRS89.','Oil and gas exploration and production.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4936','EPSG','4978','EPSG','4566',0.1,0.054,0.051,-0.085,'EPSG','9001',0.0021,0.0126,-0.0204,'EPSG','9104',0.0025,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2014.81,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ONE-Deu/Nld 2014.81',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','9224','ED50 to ETRS89 (15)','Parameter values from ED50 to WGS 84 (36) assuming that ETRS89 is equivalent to WGS 84 at epoch 1989.00..','Oil and gas exploration and production..','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4230','EPSG','4258','EPSG','4566',1.0,-157.89,-17.16,-78.41,'EPSG','9001',2.118,2.697,-1.434,'EPSG','9104',-5.38,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ONE-Ger Nsea',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9225','WGS 84 to ETRS89 (2)','Parameter values derived from ITRF2008 to ETRF2000 (1), code 7951, as a time-specific transformation @2014.81, assuming ITRF2008 = WGS 84 (G1762) = WGS 84 and ETRF2000 = ETRS89.','Oil and gas exploration and production.','EPSG','1065','Time-specific Position Vector transform (geocen)','EPSG','4978','EPSG','4936','EPSG','4566',0.1,0.054,0.051,-0.085,'EPSG','9001',0.0021,0.0126,-0.0204,'EPSG','9104',0.0025,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2014.81,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'ONE-Deu/Nld 2014.81',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','10085','Trinidad 1903 to WGS 84 (2)','Parameter values provided to EOG by Trinidad Ministry of Energy and Energy Industries. Used by EOG offshore Trinidad (including Pelican, Kiskadee and Ibis fields) since 1996.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4302','EPSG','4326','EPSG','1339',3.0,-61.0,285.2,471.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EOG-Tto Trin',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','10086','JAD69 to WGS 72 (1)','Derived in 1977 through Transit observations at 2 stations by US DMA.','For military mapping.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4322','EPSG','3342',15.0,48.0,208.0,382.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','10089','Aratu to WGS 84 (5)','Used by ExxonMobil for block BMS1. See WGS 84 (13) (tfm code 5051) which Petrobras now recommends for the area.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4208','EPSG','4326','EPSG','2962',7.0,-163.466,317.396,-147.538,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EXM-Bra Santos',0);
@@ -1310,8 +1331,8 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','15856','NAD27 to WGS 84 (84)
INSERT INTO "helmert_transformation" VALUES('EPSG','15860','Mauritania 1999 to WGS 84 (1)','Mauritania 1999 can be considered to be the same as WGS 84 within the accuracy of this transformation.','Minerals management. Accuracy 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4702','EPSG','4326','EPSG','1157',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mau',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15865','Pulkovo 1942 to WGS 84 (16)','Derived via PZ-90 at 30 stations throughout USSR (Former Soviet Union, FSU) through concatenation of Pulkovo 1942 to PZ-90 (1) (tfm code 15844) and PZ-90 to WGS 84 (1) (tfm code 15843).','Accuracy 4.5 metres.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4326','EPSG','2423',4.5,25.0,-141.0,-78.5,'EPSG','9001',0.0,-0.35,-0.736,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Rus',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15866','FD54 to ED50 (1)','Derived at 3 points in 1976. This transformation then used to define ED50 on the Faroe Islands.','Defines ED50 in the Faroe Islands: transformation therefore considered exact.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4741','EPSG','4230','EPSG','3248',0.0,-153.33,-169.41,86.39,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KMS-Fro',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15867','PD/83 to ETRS89 (1)','Derived at 10 points of the German GPS Network DREF.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4746','EPSG','4258','EPSG','2544',0.1,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu Thur',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15868','RD/83 to ETRS89 (1)','Derived in 2001 at 31 points of the German GPS Network DREF in former East Germany. Although for high accuracy limited to Saxony, may be taken as approximate transformation between DHDN and WGS 84 for all former East German states - see code 15869.','For applications with an accuracy at 0.1m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4745','EPSG','4258','EPSG','2545',0.1,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu Sach',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15867','PD/83 to ETRS89 (1)','Derived at 10 points of the German GPS Network DREF.','For applications with an accuracy at the sub-metre level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4746','EPSG','4258','EPSG','2544',1.0,599.4,72.4,419.2,'EPSG','9001',-0.062,-0.022,-2.723,'EPSG','9104',6.46,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu Thur',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15868','RD/83 to ETRS89 (1)','Derived in 2001 at 31 points of the German GPS Network DREF in former East Germany. Although for high accuracy limited to Saxony, may be taken as approximate transformation between DHDN and WGS 84 for all former East German states - see code 15869.','For applications with an accuracy at the sub-metre level.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4745','EPSG','4258','EPSG','2545',1.0,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu Sach',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15869','DHDN to WGS 84 (3)','Parameter values taken from RD/83 to ETRS89 (1) (tfm code 15868) assuming that within the accuracy of the transformation ETRS89 is equivalent to WGS 84 and RD/83 is equivalent to DHDN.','For applications with an accuracy at 2m level','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4314','EPSG','4326','EPSG','1343',2.0,612.4,77.0,440.2,'EPSG','9001',-0.054,0.057,-2.797,'EPSG','9104',2.55,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Deu E',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15870','Jouik 1961 to WGS 84 (1)','Derived at 5 points in 2002.','Hydrographic survey','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4679','EPSG','4326','EPSG','2967',1.0,-80.01,253.26,291.19,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Wood-Mrt',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15871','Nahrwan 1967 to WGS 84 (6)','Derived by concatenation of parameter values published by IGN Paris from Nahrwan 1967 to WGS 72 at the Nahrwan SE Base trig station near Baghdad with DMA WGS 72 to WGS 84 parameter values.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326','EPSG','3625',5.0,-242.2,-144.9,370.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Irq',1);
+2 -2
View File
@@ -1,2 +1,2 @@
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v9.7.0');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2019-07-25');
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v9.8.2');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2019-09-23');
+34 -7
View File
@@ -2243,8 +2243,8 @@ INSERT INTO "projected_crs" VALUES('EPSG','5349','POSGAR 2007 / Argentina 7',NUL
INSERT INTO "projected_crs" VALUES('EPSG','5355','MARGEN / UTM zone 20S',NULL,NULL,'EPSG','4400','EPSG','5354','EPSG','16120','EPSG','1761',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5356','MARGEN / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','5354','EPSG','16119','EPSG','3827',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5357','MARGEN / UTM zone 21S',NULL,NULL,'EPSG','4400','EPSG','5354','EPSG','16121','EPSG','3733',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5361','SIRGAS-Chile / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','5360','EPSG','16119','EPSG','3811',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5362','SIRGAS-Chile / UTM zone 18S',NULL,NULL,'EPSG','4400','EPSG','5360','EPSG','16118','EPSG','3829',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5361','SIRGAS-Chile 2002 / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','5360','EPSG','16119','EPSG','3811',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5362','SIRGAS-Chile 2002 / UTM zone 18S',NULL,NULL,'EPSG','4400','EPSG','5360','EPSG','16118','EPSG','3829',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5367','CR05 / CRTM05',NULL,NULL,'EPSG','4500','EPSG','5365','EPSG','5366','EPSG','3849',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5382','SIRGAS-ROU98 / UTM zone 21S',NULL,NULL,'EPSG','4400','EPSG','5381','EPSG','16121','EPSG','3826',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5383','SIRGAS-ROU98 / UTM zone 22S',NULL,NULL,'EPSG','4400','EPSG','5381','EPSG','16122','EPSG','3828',NULL,0);
@@ -2383,7 +2383,7 @@ INSERT INTO "projected_crs" VALUES('EPSG','5890','JAXA Snow Depth Polar Stereogr
INSERT INTO "projected_crs" VALUES('EPSG','5896','VN-2000 / TM-3 zone 481',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','5892','EPSG','4193',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5897','VN-2000 / TM-3 zone 482',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','5893','EPSG','4215',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5898','VN-2000 / TM-3 zone 491',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','5894','EPSG','4217',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5899','VN-2000 / TM-3 Da Nang zone',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','5895','EPSG','4218',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5899','VN-2000 / TM-3 107-45',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','5895','EPSG','4218',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5921','WGS 84 / EPSG Arctic Regional zone A1',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','5906','EPSG','4019',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5922','WGS 84 / EPSG Arctic Regional zone A2',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','5907','EPSG','4027',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','5923','WGS 84 / EPSG Arctic Regional zone A3',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','5908','EPSG','4028',NULL,0);
@@ -3571,9 +3571,36 @@ INSERT INTO "projected_crs" VALUES('EPSG','8903','RGWF96 / UTM zone 1S',NULL,NUL
INSERT INTO "projected_crs" VALUES('EPSG','8908','CR-SIRGAS / CRTM05',NULL,NULL,'EPSG','4400','EPSG','8907','EPSG','5366','EPSG','3232',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8909','CR-SIRGAS / UTM zone 16N',NULL,NULL,'EPSG','4400','EPSG','8907','EPSG','16016','EPSG','4532',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8910','CR-SIRGAS / UTM zone 17N',NULL,NULL,'EPSG','4400','EPSG','8907','EPSG','16017','EPSG','4531',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8950','SIRGAS-Chile 2010 / UTM zone 18S',NULL,NULL,'EPSG','4400','EPSG','8949','EPSG','16118','EPSG','3829',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8951','SIRGAS-Chile 2010 / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','8949','EPSG','16119','EPSG','3811',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9039','ISN2016 / LAEA Europe',NULL,NULL,'EPSG','4532','EPSG','8086','EPSG','19986','EPSG','1120',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9040','ISN2016 / LCC Europe',NULL,NULL,'EPSG','4532','EPSG','8086','EPSG','19985','EPSG','1120',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9141','KOSOVAREF01 / Balkans zone 7',NULL,NULL,'EPSG','4400','EPSG','9140','EPSG','18277','EPSG','4542',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9149','SIRGAS-Chile 2013 / UTM zone 18S',NULL,NULL,'EPSG','4400','EPSG','9148','EPSG','16118','EPSG','3829',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9150','SIRGAS-Chile 2013 / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','9148','EPSG','16119','EPSG','3811',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9154','SIRGAS-Chile 2016 / UTM zone 18S',NULL,NULL,'EPSG','4400','EPSG','9153','EPSG','16118','EPSG','3829',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9155','SIRGAS-Chile 2016 / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','9153','EPSG','16119','EPSG','3811',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9156','RSAO13 / UTM zone 32S',NULL,NULL,'EPSG','4400','EPSG','8699','EPSG','16132','EPSG','4551',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9157','RSAO13 / UTM zone 33S',NULL,NULL,'EPSG','4400','EPSG','8699','EPSG','16133','EPSG','4555',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9158','RSAO13 / UTM zone 34S',NULL,NULL,'EPSG','4400','EPSG','8699','EPSG','16134','EPSG','4539',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9159','RSAO13 / TM 12 SE',NULL,NULL,'EPSG','4400','EPSG','8699','EPSG','16612','EPSG','1604',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9191','WGS 84 / NIWA Albers',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','9190','EPSG','3508',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9205','VN-2000 / TM-3 103-00',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9058','EPSG','4541',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9206','VN-2000 / TM-3 104-00',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9192','EPSG','4538',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9207','VN-2000 / TM-3 104-30',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9193','EPSG','4545',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9208','VN-2000 / TM-3 104-45',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9194','EPSG','4546',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9209','VN-2000 / TM-3 105-30',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9195','EPSG','4548',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9210','VN-2000 / TM-3 105-45',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9196','EPSG','4549',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9211','VN-2000 / TM-3 106-00',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9197','EPSG','4550',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9212','VN-2000 / TM-3 106-15',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9198','EPSG','4552',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9213','VN-2000 / TM-3 106-30',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9199','EPSG','4553',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9214','VN-2000 / TM-3 107-00',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9200','EPSG','4554',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9215','VN-2000 / TM-3 107-15',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9201','EPSG','4556',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9216','VN-2000 / TM-3 107-30',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9202','EPSG','4557',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9217','VN-2000 / TM-3 108-15',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9203','EPSG','4559',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9218','VN-2000 / TM-3 108-30',NULL,NULL,'EPSG','4400','EPSG','4756','EPSG','9204','EPSG','4560',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9221','Hartebeesthoek94 / ZAF BSU Albers 25E',NULL,NULL,'EPSG','4500','EPSG','4148','EPSG','9219','EPSG','4567',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9222','Hartebeesthoek94 / ZAF BSU Albers 44E',NULL,NULL,'EPSG','4500','EPSG','4148','EPSG','9220','EPSG','4568',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','20004','Pulkovo 1995 / Gauss-Kruger zone 4',NULL,NULL,'EPSG','4530','EPSG','4200','EPSG','16204','EPSG','1763',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','20005','Pulkovo 1995 / Gauss-Kruger zone 5',NULL,NULL,'EPSG','4530','EPSG','4200','EPSG','16205','EPSG','1764',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','20006','Pulkovo 1995 / Gauss-Kruger zone 6',NULL,NULL,'EPSG','4530','EPSG','4200','EPSG','16206','EPSG','1765',NULL,0);
@@ -3733,10 +3760,10 @@ INSERT INTO "projected_crs" VALUES('EPSG','21896','Bogota 1975 / Colombia West z
INSERT INTO "projected_crs" VALUES('EPSG','21897','Bogota 1975 / Colombia Bogota zone',NULL,NULL,'EPSG','4530','EPSG','4218','EPSG','18052','EPSG','1599',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','21898','Bogota 1975 / Colombia East Central zone',NULL,NULL,'EPSG','4530','EPSG','4218','EPSG','18053','EPSG','1600',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','21899','Bogota 1975 / Colombia East zone',NULL,NULL,'EPSG','4530','EPSG','4218','EPSG','18054','EPSG','1601',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22032','Camacupa / UTM zone 32S',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16132','EPSG','1606',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22033','Camacupa / UTM zone 33S',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16133','EPSG','1607',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22091','Camacupa / TM 11.30 SE',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16611','EPSG','1605',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22092','Camacupa / TM 12 SE',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16612','EPSG','1604',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22032','Camacupa 1948 / UTM zone 32S',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16132','EPSG','1606',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22033','Camacupa 1948 / UTM zone 33S',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16133','EPSG','1607',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22091','Camacupa 1948 / TM 11.30 SE',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16611','EPSG','1605',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22092','Camacupa 1948 / TM 12 SE',NULL,NULL,'EPSG','4400','EPSG','4220','EPSG','16612','EPSG','1604',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22171','POSGAR 98 / Argentina 1',NULL,NULL,'EPSG','4530','EPSG','4190','EPSG','18031','EPSG','1608',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22172','POSGAR 98 / Argentina 2',NULL,NULL,'EPSG','4530','EPSG','4190','EPSG','18032','EPSG','1609',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','22173','POSGAR 98 / Argentina 3',NULL,NULL,'EPSG','4530','EPSG','4190','EPSG','18033','EPSG','1610',NULL,0);
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

+92
View File
@@ -0,0 +1,92 @@
.. _code_of_conduct:
===========================
Code of Conduct
===========================
The PROJ project has adopted the
`Contributor Covenant Code of Conduct <https://www.contributor-covenant.org/>`_.
Everyone who participates in the PROJ community is expected to follow the
code of conduct as written below.
Our Pledge
----------
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to make participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
Our Standards
-------------
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
Our Responsibilities
--------------------
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
Scope
-----
This Code of Conduct applies within all project spaces, and it also applies when
an individual is representing the project or its community in public spaces.
Examples of representing a project or community include using an official
project e-mail address, posting via an official social media account, or acting
as an appointed representative at an online or offline event. Representation of
a project may be further defined and clarified by project maintainers.
Enforcement
-----------
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at `kristianevers@gmail.com <mailto:kristianevers@gmail.com>`_.
All complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
Attribution
-----------
This Code of Conduct is adapted from the
`Contributor Covenant <https://www.contributor-covenant.org>`_, version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
+1
View File
@@ -14,4 +14,5 @@ contributor the community is always very welcoming.
channels
contributing
code_contributions
code_of_conduct
rfc/index
+15 -3
View File
@@ -130,8 +130,20 @@ html_theme = "sphinx_rtd_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = {}
html_theme_options = {
'canonical_url': 'https://proj.org',
'logo_only': True,
'display_version': True,
'prev_next_buttons_location': 'both',
'style_external_links': False,
'style_nav_header_background': '#353130',
# Toc options
'collapse_navigation': True,
'sticky_navigation': True,
#'navigation_depth': 4,
'includehidden': True,
'titles_only': False
}
# Add any paths that contain custom themes here, relative to this directory.
@@ -144,7 +156,7 @@ html_theme_options = {}
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
html_logo = '../images/logo.png'
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
+6
View File
@@ -18,6 +18,12 @@ Ruby
`proj4rb <https://github.com/cfis/proj4rb>`_:
Bindings for PROJ in ruby
Rust
=======
`proj <https://github.com/georust/proj>`_:
Rust bindings for the latest stable version of PROJ
TCL
========
`proj4tcl <http://wiki.tcl.tk/41270>`_:
+44 -8
View File
@@ -22,8 +22,9 @@ We start by writing the program for PROJ 4:
#include <proj_api.h>
main(int argc, char **argv) {
projPJ pj_merc, pj_latlong;
projPJ pj_merc, pj_longlat;
double x, y;
int p;
if (!(pj_longlat = pj_init_plus("+proj=longlat +ellps=clrk66")) )
return 1;
@@ -33,7 +34,7 @@ We start by writing the program for PROJ 4:
while (scanf("%lf %lf", &x, &y) == 2) {
x *= DEG_TO_RAD; /* longitude */
y *= DEG_TO_RAD; /* latitude */
p = pj_transform(pj_longlat, pj_merc, 1, 1, &x, &y, NULL );
p = pj_transform(pj_longlat, pj_merc, 1, 1, &x, &y, NULL);
printf("%.2f\t%.2f\n", x, y);
}
@@ -51,7 +52,7 @@ The same program implemented using PROJ 6:
main(int argc, char **argv) {
PJ *P;
PJ_COORD c;
PJ_COORD c, c_out;
/* NOTE: the use of PROJ strings to describe CRS is strongly discouraged */
/* in PROJ 6, as PROJ strings are a poor way of describing a CRS, and */
@@ -74,7 +75,7 @@ The same program implemented using PROJ 6:
/* latitude for geographic CRS, and easting, northing for projected */
/* CRS. If instead of using PROJ strings as above, "EPSG:XXXX" codes */
/* had been used, this might had been necessary. */
PJ* P_for_GIS = proj_normalize_for_visualization(C, P);
PJ* P_for_GIS = proj_normalize_for_visualization(PJ_DEFAULT_CTX, P);
if( 0 == P_for_GIS ) {
proj_destroy(P);
return 1;
@@ -83,13 +84,22 @@ The same program implemented using PROJ 6:
P = P_for_GIS;
}
while (scanf("%lf %lf", &c.lp.lam, &c.lp.phi) == 2) {
/* For reliable geographic <--> geocentric conversions, z shall not */
/* be some random value. Also t shall be initialized to HUGE_VAL to */
/* allow for proper selection of time-dependent operations if one of */
/* the CRS is dynamic. */
c.lpzt.z = 0.0;
c.lpzt.t = HUGE_VAL;
while (scanf("%lf %lf", &c.lpzt.lam, &c.lpzt.phi) == 2) {
/* No need to convert to radian */
c = proj_trans(P, PJ_FWD, c);
printf("%.2f\t%.2f\n", c.xy.x, c.xy.y);
c_out = proj_trans(P, PJ_FWD, c);
printf("%.2f\t%.2f\n", c_out.xy.x, c_out.xy.y);
}
proj_destroy(P);
return 0;
}
@@ -107,7 +117,8 @@ Function mapping from old to new API
+---------------------------------------+-------------------------------------------------+
| pj_inv3 | :c:func:`proj_trans` |
+---------------------------------------+-------------------------------------------------+
| pj_transform | :c:func:`proj_create_crs_to_crs` + |
| pj_transform | :c:func:`proj_create_crs_to_crs` |
| | or :c:func:`proj_create_crs_to_crs_from_pj` + |
| | (:c:func:`proj_normalize_for_visualization` +) |
| | :c:func:`proj_trans`, |
| | :c:func:`proj_trans_array` or |
@@ -145,6 +156,31 @@ Function mapping from old to new API
| pj_get_release | :c:func:`proj_info` |
+---------------------------------------+-------------------------------------------------+
Backward incompatibilities
###############################################################################
Access to the proj_api.h is still possible but requires to define the
``ACCEPT_USE_OF_DEPRECATED_PROJ_API_H`` macro.
The emulation of the now deprecated ``+init=epsg:XXXX`` syntax in PROJ 6 is not
fully compatible with previous versions.
In particular, when used with the ``pj_transform()`` function, no datum shift term
(``towgs84``, ``nadgrids``, ``geoidgrids``) will be added during the expansion of the
``+init=epsg:XXXX`` string to ``+proj=YYYY ....``. If you still uses ``pj_transform()``
and want datum shift to be applied, then you need to provide a fully expanded
string with appropriate ``towgs84``, ``nadgrids`` or ``geoidgrids`` terms to ``pj_init()``.
To use the ``+init=epsg:XXXX`` syntax with :c:func:`proj_create` and then
:c:func:`proj_create_crs_to_crs`, ``proj_context_use_proj4_init_rules(ctx, TRUE)``
or the ``PROJ_USE_PROJ4_INIT_RULES=YES`` environment variable must have been
previously set. In that context, datum shift will be researched. However they
might be different than with PROJ 4 or PROJ 5, since a "late-binding" approach
will be used (that is trying to find as much as possible the most direct
transformation between the source and target datum), whereas PROJ 4 or PROJ 5
used an "early-binding" approach consisting in always going to EPSG:4326 / WGS 84.
================================================================================
Version 4 to 5 API Migration
================================================================================
+7 -3
View File
@@ -13,9 +13,9 @@ distribution of the source code and various resource file archives. See
Current Release
--------------------------------------------------------------------------------
* **2019-07-01** `proj-6.1.1.tar.gz`_ (`md5`_)
* **2019-09-01** `proj-6.2.0.tar.gz`_ (`md5`_)
* **2018-09-15** `proj-datumgrid-1.8.zip`_
* **2019-03-01** `proj-datumgrid-europe-1.3.zip`_
* **2019-09-01** `proj-datumgrid-europe-1.4.zip`_
* **2019-03-01** `proj-datumgrid-north-america-1.2.zip`_
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
* **2019-03-01** `proj-datumgrid-world-1.0.zip`_
@@ -24,6 +24,7 @@ Current Release
Past Releases
--------------------------------------------------------------------------------
* **2019-07-01** `proj-6.1.1.tar.gz`_
* **2019-05-15** `proj-6.1.0.tar.gz`_
* **2019-03-01** `proj-6.0.0.tar.gz`_
* **2018-09-15** `proj-5.2.0.tar.gz`_
@@ -36,12 +37,14 @@ Past Releases
* **2018-03-01** `proj-datumgrid-1.7.zip`_
* **2016-09-11** `proj-datumgrid-1.6.zip`_
* **2019-07-01** `proj-datumgrid-europe-1.3.zip`_
* **2019-03-01** `proj-datumgrid-europe-1.2.zip`_
* **2018-09-15** `proj-datumgrid-europe-1.1.zip`_
* **2018-09-15** `proj-datumgrid-north-america-1.1.zip`_
* **2018-03-01** `proj-datumgrid-europe-1.0.zip`_
* **2018-03-01** `proj-datumgrid-north-america-1.0.zip`_
.. _`proj-6.2.0.tar.gz`: https://download.osgeo.org/proj/proj-6.2.0.tar.gz
.. _`proj-6.1.1.tar.gz`: https://download.osgeo.org/proj/proj-6.1.1.tar.gz
.. _`proj-6.1.0.tar.gz`: https://download.osgeo.org/proj/proj-6.1.0.tar.gz
.. _`proj-6.0.0.tar.gz`: https://download.osgeo.org/proj/proj-6.0.0.tar.gz
@@ -59,10 +62,11 @@ Past Releases
.. _`proj-datumgrid-europe-1.1.zip`: https://download.osgeo.org/proj/proj-datumgrid-europe-1.1.zip
.. _`proj-datumgrid-europe-1.2.zip`: https://download.osgeo.org/proj/proj-datumgrid-europe-1.2.zip
.. _`proj-datumgrid-europe-1.3.zip`: https://download.osgeo.org/proj/proj-datumgrid-europe-1.3.zip
.. _`proj-datumgrid-europe-1.4.zip`: https://download.osgeo.org/proj/proj-datumgrid-europe-1.4.zip
.. _`proj-datumgrid-north-america-1.0.zip`: https://download.osgeo.org/proj/proj-datumgrid-north-america-1.0.zip
.. _`proj-datumgrid-north-america-1.1.zip`: https://download.osgeo.org/proj/proj-datumgrid-north-america-1.1.zip
.. _`proj-datumgrid-north-america-1.2.zip`: https://download.osgeo.org/proj/proj-datumgrid-north-america-1.2.zip
.. _`proj-datumgrid-oceania-1.0.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.0.zip
.. _`proj-datumgrid-world-1.0.zip`: https://download.osgeo.org/proj/proj-datumgrid-world-1.0.zip
.. _`md5`: https://download.osgeo.org/proj/proj-6.1.1.tar.gz.md5
.. _`md5`: https://download.osgeo.org/proj/proj-6.2.0.tar.gz.md5
.. _`proj.pdf`: https://raw.githubusercontent.com/OSGeo/PROJ/gh-pages/proj.pdf
+9 -1
View File
@@ -24,7 +24,15 @@ Conda
The conda package manager includes several PROJ packages. We recommend installing
from the ``conda-forge`` channel::
conda install -c conda-forge proj4
conda install -c conda-forge proj
Using ``conda`` you can also install the PROJ grid packages. Here's how to install
the `proj-datumgrid-europe` package::
conda install -c conda-forge proj-datumgrid-europe
Available is also the ``proj-datumgrid-north-america``, ``proj-datumgrid-oceania``
and ``proj-datumgrid-world``.
Docker
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+34
View File
@@ -2,6 +2,40 @@
News
###############################################################################
6.2.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*September 1st 2019*
Updates
-------
* Introduced PROJJSON, a JSON encoding of WKT2 (`#1547 <https://github.com/OSGeo/PROJ/issues/15475>`_)
* Support CRS instantiation of OGC URN's (`#1505 <https://github.com/OSGeo/PROJ/issues/1505>`_)
* Expose scope and remarks of database objects (`#1537 <https://github.com/OSGeo/PROJ/issues/1537>`_)
* EPSG Database updated to version 9.7.0 (`#1558 <https://github.com/OSGeo/PROJ/issues/1558>`_)
* Added C API function proj_grid_get_info_from_database() (`#1494 <https://github.com/OSGeo/PROJ/issues/1494>`_)
* Added C API function
proj_operation_factory_context_set_discard_superseded() (`#1534 <https://github.com/OSGeo/PROJ/issues/1534>`_)
* Added C API function proj_context_set_autoclose_database() (`#1566 <https://github.com/OSGeo/PROJ/issues/1566>`_)
* Added C API function proj_create_crs_to_crs_from_pj() (`#1567 <https://github.com/OSGeo/PROJ/issues/1567>`_)
* Added C API function proj_cleanup() (`#1569 <https://github.com/OSGeo/PROJ/issues/1569>`_)
Bug Fixes
---------
* Fixed build failure on Solaris systems (`#1554 <https://github.com/OSGeo/PROJ/issues/1554>`_)
6.1.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*July 1st 2019*
Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 KiB

After

Width:  |  Height:  |  Size: 299 KiB

@@ -19,9 +19,10 @@ oblique projection by means of the General Oblique Transformation. The user
performs the oblique transformation by selecting the oblique projection
``+proj=ob_tran``, specifying the translation factors, :option:`+o_lat_p`, and
:option:`+o_lon_p`, and the projection to be used, :option:`+o_proj`. In the
example of the Fairgrieve projection the latitude and longitude of the pole of
the new coordinates, :math:`\alpha` and :math:`\beta` respectively, are to be placed
at 45°N and 90°W and use the :ref:`moll` projection. Because the central meridian
example of the Fairgrieve projection, the latitude and longitude of the North pole
of the unrotated geographic CRS, :math:`\alpha` and :math:`\beta` respectively,
expressed in the rotated geographic CRS, are to be placed
at 45°N and 90°W and the :ref:`moll` projection is used. Because the central meridian
of the translated coordinates will follow the :math:`\beta` meridian it is
necessary to translate the translated system so that the Greenwich meridian
will pass through the center of the projection by offsetting the central meridian.
@@ -50,11 +51,11 @@ New pole
.. option:: +o_lat_p=<latitude>
Latitude of new pole for oblique projection.
Latitude of the North pole of the unrotated source CRS, expressed in the rotated geographic CRS.
.. option:: +o_lon_p=<longitude>
Longitude of new pole for oblique projection.
Longitude of the North pole of the unrotated source CRS, expressed in the rotated geographic CRS.
Rotate about point
................................................................................
+2 -1
View File
@@ -105,7 +105,8 @@ distributed, but can be obtained by users through free and legal methods.
Austria
................................................................................
`Austrian Grid <http://www.bev.gv.at/portal/page?_pageid=713,2204753&_dad=portal&_schema=PORTAL>`__ for MGI
Overview of `Austrian grids <http://www.bev.gv.at/portal/page?_pageid=713,1569828&_dad=portal&_schema=PORTAL>`__ and other resources
related to the local geodetic reference.
Brazil
................................................................................
+4
View File
@@ -107,6 +107,10 @@ class PROJ_GCC_DLL CRS : public common::ObjectUsage,
PROJ_DLL std::list<CRSNNPtr>
getNonDeprecated(const io::DatabaseContextNNPtr &dbContext) const;
PROJ_DLL CRSNNPtr
promoteTo3D(const std::string &newName,
const io::DatabaseContextPtr &dbContext) const;
PROJ_PRIVATE :
//! @cond Doxygen_Suppress
PROJ_INTERNAL const GeodeticCRS *
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CCT" "1" "Aug 26, 2019" "6.2.0" "PROJ"
.TH "CCT" "1" "Nov 1, 2019" "6.2.1" "PROJ"
.SH NAME
cct \- Coordinate Conversion and Transformation
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CS2CS" "1" "Aug 26, 2019" "6.2.0" "PROJ"
.TH "CS2CS" "1" "Nov 01, 2019" "6.2.1" "PROJ"
.SH NAME
cs2cs \- Cartographic coordinate system filter
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "GEOD" "1" "Aug 26, 2019" "6.2.0" "PROJ"
.TH "GEOD" "1" "Nov 1, 2019" "6.2.1" "PROJ"
.SH NAME
geod \- Geodesic computations
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "GIE" "1" "Aug 26, 2019" "6.2.0" "PROJ"
.TH "GIE" "1" "Nov 1, 2019" "6.2.1" "PROJ"
.SH NAME
gie \- The Geospatial Integrity Investigation Environment
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJ" "1" "Aug 26, 2019" "6.2.0" "PROJ"
.TH "PROJ" "1" "Nov 1, 2019" "6.2.1" "PROJ"
.SH NAME
proj \- Cartographic projection filter
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJINFO" "1" "Aug 26, 2019" "6.2.0" "PROJ"
.TH "PROJINFO" "1" "Nov 1, 2019" "6.2.1" "PROJ"
.SH NAME
projinfo \- Geodetic object and coordinate operation queries
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" @(#)geodesic.3
.\"
.TH GEODESIC 3 "2019/09/01 Rel. 6.2.0"
.TH GEODESIC 3 "2019/11/01 Rel. 6.2.1"
.ad b
.hy 1
.SH NAME
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

+110
View File
@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="134.18155mm"
height="43.65625mm"
viewBox="0 0 134.18155 43.65625"
version="1.1"
id="svg3821"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="logo.svg">
<defs
id="defs3815" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="58.485496"
inkscape:cy="-11.535695"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata3818">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>PROJ Logo</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:date>2019/10/01</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Sylvain Beorchia</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-17.575893,-18.998503)">
<g
id="g871"
transform="translate(-21.965123,-2.4518183)"
inkscape:export-xdpi="180.14684"
inkscape:export-ydpi="180.14684">
<path
inkscape:connector-curvature="0"
id="path1386-1-6-8"
d="m 129.14517,28.055953 a 18.171912,15.127886 0 0 0 -18.1718,15.12826 18.171912,15.127886 0 0 0 18.1718,15.127797 18.171912,15.127886 0 0 0 18.17182,-15.127797 18.171912,15.127886 0 0 0 -18.17182,-15.12826 z m 0,5.304973 a 11.799942,9.8233022 0 0 1 11.79996,9.823287 11.799942,9.8233022 0 0 1 -11.79996,9.823301 11.799942,9.8233022 0 0 1 -11.79994,-9.823301 11.799942,9.8233022 0 0 1 11.79994,-9.823287 z"
style="opacity:1;fill:#2eb0d1;fill-opacity:1;stroke:none;stroke-width:0.76500005;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
<rect
transform="rotate(15.768155)"
ry="2.064862"
rx="2.064862"
y="-12.887596"
x="134.25037"
height="38.703815"
width="3.5399821"
id="rect1404-8-1-7"
style="opacity:1;fill:#2eb0d1;fill-opacity:1;stroke:none;stroke-width:0.76500005;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
<path
d="m 46.43364,32.500713 h 8.778896 q 3.050416,0 4.840566,1.761508 1.790151,1.761508 1.790151,4.496858 0,2.74967 -1.775829,4.496857 -1.761508,1.747186 -4.854888,1.732865 h -6.80257 V 53.55288 H 46.43364 Z m 1.976326,1.976326 v 8.535436 h 6.80257 q 2.176823,0.01432 3.408446,-1.174338 1.245945,-1.202981 1.245945,-3.050416 0,-1.861756 -1.260266,-3.09338 -1.260266,-1.231623 -3.394125,-1.217302 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.32982063px;line-height:0;font-family:AnjaliOldLipi;-inkscape-font-specification:'AnjaliOldLipi, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d0633c;fill-opacity:1;stroke:none;stroke-width:0.26458335"
id="path856"
inkscape:connector-curvature="0" />
<path
d="m 82.236641,32.500713 h 8.778897 q 3.079058,0 4.854887,1.632617 1.775829,1.632617 1.775829,4.339324 0,1.947684 -0.916557,3.322519 -0.916557,1.360514 -2.678065,2.004968 2.076575,1.503727 3.193628,4.310682 0.315067,0.816309 0.859272,2.334356 0.544206,1.503726 1.045448,2.448925 l -1.747186,0.9452 q -0.630133,-1.160018 -1.174339,-2.73535 -0.529884,-1.575332 -0.930878,-2.477568 -1.288908,-3.079058 -4.5255,-4.353645 h -6.55911 v 9.280139 h -1.976326 z m 1.976326,1.976326 v 7.819376 h 6.802571 q 2.26275,0 3.451409,-1.002484 1.202981,-1.002484 1.202981,-2.806955 0,-1.818793 -1.245944,-2.921525 -1.245945,-1.102733 -3.408446,-1.088412 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.32982063px;line-height:0;font-family:AnjaliOldLipi;-inkscape-font-specification:'AnjaliOldLipi, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d0633c;fill-opacity:1;stroke:none;stroke-width:0.26458335"
id="path858"
inkscape:connector-curvature="0" />
<path
d="m 160.903,47.552296 q 0,2.849919 1.70422,3.909688 0.64446,0.400994 1.63262,0.400994 1.83311,0 2.82128,-1.389157 0.81631,-1.131375 0.81631,-2.592137 V 32.500713 h 1.97632 v 15.380971 q 0,2.191144 -1.26026,3.881045 -1.54669,2.090896 -4.35365,2.076575 -3.69487,0 -4.86921,-3.394125 -0.44396,-1.274587 -0.44396,-2.892883 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.32982063px;line-height:0;font-family:AnjaliOldLipi;-inkscape-font-specification:'AnjaliOldLipi, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#d0633c;fill-opacity:1;stroke:none;stroke-width:0.26458335"
id="path860"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

+110
View File
@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="134.18155mm"
height="43.65625mm"
viewBox="0 0 134.18155 43.65625"
version="1.1"
id="svg3821"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="logo_bw.svg">
<defs
id="defs3815" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="58.485496"
inkscape:cy="-11.535695"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata3818">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>PROJ Logo</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:date>2019/10/01</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Sylvain Beorchia</dc:title>
</cc:Agent>
</dc:creator>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-17.575893,-18.998503)">
<g
transform="translate(-19.341303,-95.718792)"
id="g913"
inkscape:export-xdpi="180.14684"
inkscape:export-ydpi="180.14684">
<path
inkscape:connector-curvature="0"
id="path1386-1-6-8-6"
d="m 126.52135,121.32293 a 18.171912,15.127886 0 0 0 -18.1718,15.12826 18.171912,15.127886 0 0 0 18.1718,15.1278 18.171912,15.127886 0 0 0 18.17182,-15.1278 18.171912,15.127886 0 0 0 -18.17182,-15.12826 z m 0,5.30497 a 11.799942,9.8233022 0 0 1 11.79996,9.82329 11.799942,9.8233022 0 0 1 -11.79996,9.8233 11.799942,9.8233022 0 0 1 -11.79994,-9.8233 11.799942,9.8233022 0 0 1 11.79994,-9.82329 z"
style="opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.76500005;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
<rect
transform="rotate(15.768155)"
ry="2.064862"
rx="2.064862"
y="77.58268"
x="157.07016"
height="38.703815"
width="3.5399821"
id="rect1404-8-1-7-7"
style="opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.76500005;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
<path
d="m 43.809823,125.76769 h 8.778896 q 3.050416,0 4.840566,1.76151 1.790151,1.76151 1.790151,4.49686 0,2.74967 -1.775829,4.49685 -1.761508,1.74719 -4.854888,1.73287 h -6.80257 v 8.56408 h -1.976326 z m 1.976326,1.97633 v 8.53543 h 6.80257 q 2.176823,0.0143 3.408446,-1.17434 1.245945,-1.20298 1.245945,-3.05041 0,-1.86176 -1.260266,-3.09338 -1.260266,-1.23163 -3.394125,-1.2173 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.32982063px;line-height:0;font-family:AnjaliOldLipi;-inkscape-font-specification:'AnjaliOldLipi, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#868686;fill-opacity:1;stroke:none;stroke-width:0.26458335"
id="path856-5"
inkscape:connector-curvature="0" />
<path
d="m 79.612824,125.76769 h 8.778897 q 3.079058,0 4.854887,1.63262 1.775829,1.63261 1.775829,4.33932 0,1.94768 -0.916557,3.32252 -0.916557,1.36051 -2.678065,2.00497 2.076575,1.50372 3.193628,4.31068 0.315067,0.81631 0.859272,2.33436 0.544206,1.50372 1.045448,2.44892 l -1.747186,0.9452 q -0.630133,-1.16002 -1.174339,-2.73535 -0.529884,-1.57533 -0.930878,-2.47757 -1.288908,-3.07906 -4.5255,-4.35364 h -6.55911 v 9.28014 h -1.976326 z m 1.976326,1.97633 v 7.81937 h 6.802571 q 2.26275,0 3.451409,-1.00248 1.202981,-1.00249 1.202981,-2.80696 0,-1.81879 -1.245944,-2.92152 -1.245945,-1.10274 -3.408446,-1.08841 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.32982063px;line-height:0;font-family:AnjaliOldLipi;-inkscape-font-specification:'AnjaliOldLipi, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#868686;fill-opacity:1;stroke:none;stroke-width:0.26458335"
id="path858-3"
inkscape:connector-curvature="0" />
<path
d="m 158.27918,140.81927 q 0,2.84992 1.70422,3.90969 0.64446,0.40099 1.63262,0.40099 1.83311,0 2.82128,-1.38915 0.81631,-1.13138 0.81631,-2.59214 v -15.38097 h 1.97632 v 15.38097 q 0,2.19114 -1.26026,3.88105 -1.54669,2.09089 -4.35365,2.07657 -3.69487,0 -4.86921,-3.39412 -0.44396,-1.27459 -0.44396,-2.89289 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:29.32982063px;line-height:0;font-family:AnjaliOldLipi;-inkscape-font-specification:'AnjaliOldLipi, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#868686;fill-opacity:1;stroke:none;stroke-width:0.26458335"
id="path860-5"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

+9
View File
@@ -476,6 +476,15 @@ def fill_concatenated_operation(proj_db_cursor):
max_n_params = 3
step_code = [None for i in range(max_n_params)]
proj_db_cursor.execute("SELECT COUNT(*) FROM epsg_coordoperationpath WHERE concat_operation_code = ?", (code,))
(nsteps, ) = proj_db_cursor.fetchone()
# Our database model has only provision for up to 3 steps currently.
# As of EPSG v9.8.2, only EPSG:9103 (NAD27 to ITRF2014 (1)) and 9104 (NAD27 to ITRF2014 (2)) have respectively 4 and 7 steps.
# Tracked as https://github.com/OSGeo/PROJ/issues/1632
if nsteps > 3:
print('Cannot import concatenated_operation ' + str(code) + ', as it has more than 3 steps.')
continue
iterator = proj_db_cursor.execute("SELECT op_path_step, single_operation_code FROM epsg_coordoperationpath WHERE concat_operation_code = ? ORDER BY op_path_step", (code,))
for (order, single_operation_code) in iterator:
assert order <= max_n_params
+3
View File
@@ -114,6 +114,7 @@ osgeo::proj::crs::CRS::extractGeographicCRS() const
osgeo::proj::crs::CRS::extractVerticalCRS() const
osgeo::proj::crs::CRS::getNonDeprecated(dropbox::oxygen::nn<std::shared_ptr<osgeo::proj::io::DatabaseContext> > const&) const
osgeo::proj::crs::CRS::identify(std::shared_ptr<osgeo::proj::io::AuthorityFactory> const&) const
osgeo::proj::crs::CRS::promoteTo3D(std::string const&, std::shared_ptr<osgeo::proj::io::DatabaseContext> const&) const
osgeo::proj::crs::CRS::shallowClone() const
osgeo::proj::crs::CRS::stripVerticalComponent() const
osgeo::proj::crs::DerivedCRS::baseCRS() const
@@ -897,6 +898,7 @@ proj_crs_alter_geodetic_crs
proj_crs_alter_parameters_linear_unit
proj_crs_create_bound_crs
proj_crs_create_bound_crs_to_WGS84
proj_crs_create_projected_3D_crs_from_2D
proj_crs_get_coordinate_system
proj_crs_get_coordoperation
proj_crs_get_datum
@@ -904,6 +906,7 @@ proj_crs_get_geodetic_crs
proj_crs_get_horizontal_datum
proj_crs_get_sub_crs
proj_crs_info_list_destroy
proj_crs_promote_to_3D
proj_cs_get_axis_count
proj_cs_get_axis_info
proj_cs_get_type
+22 -6
View File
@@ -362,6 +362,7 @@ size_t proj_trans_generic (
PJ_COORD coord = {{0,0,0,0}};
size_t i, nmin;
double null_broadcast = 0;
double invalid_time = HUGE_VAL;
if (nullptr==P)
return 0;
@@ -379,7 +380,7 @@ size_t proj_trans_generic (
if (0==nx) x = &null_broadcast;
if (0==ny) y = &null_broadcast;
if (0==nz) z = &null_broadcast;
if (0==nt) t = &null_broadcast;
if (0==nt) t = &invalid_time;
/* nothing to do? */
if (0==nx+ny+nz+nt)
@@ -946,7 +947,7 @@ static PJ* add_coord_op_to_list(PJ* op,
}
/*****************************************************************************/
static PJ* create_operation_to_base_geog_crs(PJ_CONTEXT* ctx, PJ* crs) {
static PJ* create_operation_to_base_geog_crs(PJ_CONTEXT* ctx, const PJ* crs) {
/*****************************************************************************/
// Create a geographic 2D long-lat degrees CRS that is related to the
// CRS
@@ -1052,7 +1053,7 @@ PJ *proj_create_crs_to_crs (PJ_CONTEXT *ctx, const char *source_crs, const char
}
/*****************************************************************************/
PJ *proj_create_crs_to_crs_from_pj (PJ_CONTEXT *ctx, PJ *source_crs, PJ *target_crs, PJ_AREA *area, const char* const *) {
PJ *proj_create_crs_to_crs_from_pj (PJ_CONTEXT *ctx, const PJ *source_crs, const PJ *target_crs, PJ_AREA *area, const char* const *) {
/******************************************************************************
Create a transformation pipeline between two known coordinate reference
systems.
@@ -1136,6 +1137,8 @@ PJ *proj_create_crs_to_crs_from_pj (PJ_CONTEXT *ctx, PJ *source_crs, PJ *target
try
{
bool skipDefaultTransforms = true;
// Iterate over source->target candidate transformations and reproject
// their long-lat bounding box into the source CRS.
for( int i = 0; i < op_count; i++ )
@@ -1148,12 +1151,25 @@ PJ *proj_create_crs_to_crs_from_pj (PJ_CONTEXT *ctx, PJ *source_crs, PJ *target
double north_lat = 0.0;
const char* name = proj_get_name(op);
if( name && (strstr(name, "Ballpark geographic offset") ||
bool canUseOp = true;
if( skipDefaultTransforms &&
name && (strstr(name, "Ballpark geographic offset") ||
strstr(name, "Ballpark geocentric translation")) )
{
// Skip default transformations
// Skip default transformations unless there is already one at
// the beginning (in which case all of them will have one)
if( i == 0 )
{
skipDefaultTransforms = false;
}
else
{
canUseOp = false;
}
}
else if( proj_get_area_of_use(ctx, op,
if( canUseOp &&
proj_get_area_of_use(ctx, op,
&west_lon, &south_lat, &east_lon, &north_lat, nullptr) )
{
if( west_lon <= east_lon )
+1 -1
View File
@@ -42,7 +42,7 @@ geodtest_LDADD = libproj.la
lib_LTLIBRARIES = libproj.la
libproj_la_LDFLAGS = -no-undefined -version-info 17:0:2
libproj_la_LDFLAGS = -no-undefined -version-info 17:1:2
libproj_la_LIBADD = @SQLITE3_LIBS@
libproj_la_SOURCES = \
+24 -2
View File
@@ -43,6 +43,7 @@
// PROJ include order is sensitive
// clang-format off
#include "proj.h"
#include "proj_experimental.h"
#include "proj_internal.h"
#include "emess.h"
#include "utils.h"
@@ -591,12 +592,33 @@ int main(int argc, char **argv) {
}
srcIsGeog = true;
}
proj_destroy(src);
proj_destroy(dst);
src = proj_create(nullptr, pj_add_type_crs_if_needed(fromStr).c_str());
dst = proj_create(nullptr, pj_add_type_crs_if_needed(toStr).c_str());
if( proj_get_type(src) == PJ_TYPE_COMPOUND_CRS ||
proj_get_type(dst) == PJ_TYPE_COMPOUND_CRS ) {
auto src3D = proj_crs_promote_to_3D(nullptr, nullptr, src);
if( src3D ) {
proj_destroy(src);
src = src3D;
}
auto dst3D = proj_crs_promote_to_3D(nullptr, nullptr, dst);
if( dst3D ) {
proj_destroy(dst);
dst = dst3D;
}
}
transformation = proj_create_crs_to_crs_from_pj(nullptr, src, dst,
nullptr, nullptr);
proj_destroy(src);
proj_destroy(dst);
transformation = proj_create_crs_to_crs(nullptr, fromStr.c_str(),
toStr.c_str(), nullptr);
if (!transformation) {
emess(3, "cannot initialize transformation\ncause: %s",
pj_strerrno(pj_errno));
+12
View File
@@ -85,10 +85,22 @@ int pj_datum_set(projCtx ctx, paralist *pl, PJ *projdef)
entry[ sizeof(entry) - 1 ] = '\0';
curr = curr->next = pj_mkparam(entry);
if (nullptr == curr)
{
pj_ctx_set_errno(ctx, ENOMEM);
return 1;
}
}
if( pj_datums[i].defn && strlen(pj_datums[i].defn) > 0 )
{
curr = curr->next = pj_mkparam(pj_datums[i].defn);
if (nullptr == curr)
{
pj_ctx_set_errno(ctx, ENOMEM);
return 1;
}
}
(void)curr; /* make clang static analyzer happy */
}
+11
View File
@@ -1,5 +1,6 @@
/* set ellipsoid parameters a and es */
#include <errno.h>
#include <math.h>
#include <stddef.h>
#include <string.h>
@@ -156,7 +157,14 @@ static int ellps_ellps (PJ *P) {
err = proj_errno_reset (P);
paralist* new_params = pj_mkparam (ellps->major);
if (nullptr == new_params)
return proj_errno_set (P, ENOMEM);
new_params->next = pj_mkparam (ellps->ell);
if (nullptr == new_params->next)
{
pj_dealloc(new_params);
return proj_errno_set (P, ENOMEM);
}
paralist* old_params = P->params;
P->params = new_params;
@@ -389,6 +397,9 @@ static int ellps_spherification (PJ *P) {
return proj_errno_set (P, PJD_ERR_REF_RAD_LARGER_THAN_90);
t = sin (t);
t = 1 - P->es * t * t;
if (t == 0.) {
return proj_errno_set(P, PJD_ERR_INVALID_ECCENTRICITY);
}
if (i==5) /* arithmetic */
P->a *= (1. - P->es + t) / (2 * t * sqrt(t));
else /* geometric */
+3 -4
View File
@@ -102,11 +102,10 @@ definitions, and coordinate operations. This is an implementation of
PROJ implements the two following revisions of the standard:
\subsubsection WKT2_2018 WKT2:2018
\subsubsection WKT2_2018 WKT2:2018 / WKT2:2019
[OGC 18-010r1, 2018-06-08, WKT2-2018]
(https://portal.opengeospatial.org/files/?artifact_id=79826)
(not yet adopted, at time of writing)
[OGC 18-010r7, 2019-06-24, WKT2-2019]
(http://docs.opengeospatial.org/is/18-010r7/18-010r7.html)
\subsubsection WKT2_2015 WKT2:2015
+22 -2
View File
@@ -399,7 +399,17 @@ void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi,
*/
CT = Z/RR;
ST = P/RR;
RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST);
{
const double denominator = 1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST;
if( denominator == 0 )
{
*Latitude = HUGE_VAL;
*Longitude = HUGE_VAL;
*Height = HUGE_VAL;
return;
}
RX = 1.0/sqrt(denominator);
}
CPHI0 = ST*(1.0-gi->Geocent_e2)*RX;
SPHI0 = CT*RX;
iter = 0;
@@ -420,7 +430,17 @@ void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi,
return;
}
RK = gi->Geocent_e2*RN/(RN+*Height);
RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST);
{
const double denominator = 1.0-RK*(2.0-RK)*ST*ST;
if( denominator == 0 )
{
*Latitude = HUGE_VAL;
*Longitude = HUGE_VAL;
*Height = HUGE_VAL;
return;
}
RX = 1.0/sqrt(denominator);
}
CPHI = ST*(1.0-RK)*RX;
SPHI = CT*RX;
SDPHI = SPHI*CPHI0-CPHI*SPHI0;
+148 -1
View File
@@ -3148,7 +3148,7 @@ PJ *proj_crs_alter_cs_linear_unit(PJ_CONTEXT *ctx, const PJ *obj,
// ---------------------------------------------------------------------------
/** \brief Return a copy of the CRS with the lineaer units of the parameters
/** \brief Return a copy of the CRS with the linear units of the parameters
* of its conversion modified.
*
* The CRS must be or contain a ProjectedCRS, VerticalCRS or a GeocentricCRS.
@@ -3197,6 +3197,151 @@ PJ *proj_crs_alter_parameters_linear_unit(PJ_CONTEXT *ctx, const PJ *obj,
// ---------------------------------------------------------------------------
/** \brief Create a 3D CRS from an existing 2D CRS.
*
* The new axis will be ellipsoidal height, oriented upwards, and with metre
* units.
*
* See osgeo::proj::crs::CRS::promoteTo3D().
*
* The returned object must be unreferenced with proj_destroy() after
* use.
* It should be used by at most one thread at a time.
*
* @param ctx PROJ context, or NULL for default context
* @param crs_3D_name CRS name. Or NULL (in which case the name of crs_2D
* will be used)
* @param crs_2D 2D CRS to be "promoted" to 3D. Must not be NULL.
*
* @return Object that must be unreferenced with
* proj_destroy(), or NULL in case of error.
* @since 7.0
*/
PJ *proj_crs_promote_to_3D(PJ_CONTEXT *ctx, const char *crs_3D_name,
const PJ *crs_2D) {
SANITIZE_CTX(ctx);
auto cpp_2D_crs = dynamic_cast<const CRS *>(crs_2D->iso_obj.get());
if (!cpp_2D_crs) {
proj_log_error(ctx, __FUNCTION__, "crs_2D is not a CRS");
return nullptr;
}
try {
auto dbContext = getDBcontextNoException(ctx, __FUNCTION__);
return pj_obj_create(
ctx, cpp_2D_crs->promoteTo3D(crs_3D_name ? std::string(crs_3D_name)
: cpp_2D_crs->nameStr(),
dbContext));
} catch (const std::exception &e) {
proj_log_error(ctx, __FUNCTION__, e.what());
if (ctx->cpp_context) {
ctx->cpp_context->autoCloseDbIfNeeded();
}
return nullptr;
}
}
// ---------------------------------------------------------------------------
/** \brief Create a projected 3D CRS from an existing projected 2D CRS.
*
* The passed projected_2D_crs is used so that its name is replaced by
* crs_name and its base geographic CRS is replaced by geog_3D_crs. The vertical
* axis of geog_3D_crs (ellipsoidal height) will be added as the 3rd axis of
* the resulting projected 3D CRS.
* Normally, the passed geog_3D_crs should be the 3D counterpart of the original
* 2D base geographic CRS of projected_2D_crs, but such no check is done.
*
* It is also possible to invoke this function with a NULL geog_3D_crs. In which
* case, the existing base geographic 2D CRS of projected_2D_crs will be
* automatically promoted to 3D by assuming a 3rd axis being an ellipsoidal
* height, oriented upwards, and with metre units. This is equivalent to using
* proj_crs_promote_to_3D().
*
* The returned object must be unreferenced with proj_destroy() after
* use.
* It should be used by at most one thread at a time.
*
* @param ctx PROJ context, or NULL for default context
* @param crs_name CRS name. Or NULL (in which case the name of projected_2D_crs
* will be used)
* @param projected_2D_crs Projected 2D CRS to be "promoted" to 3D. Must not be
* NULL.
* @param geog_3D_crs Base geographic 3D CRS for the new CRS. May be NULL.
*
* @return Object that must be unreferenced with
* proj_destroy(), or NULL in case of error.
* @since 7.0
*/
PJ *proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx,
const char *crs_name,
const PJ *projected_2D_crs,
const PJ *geog_3D_crs) {
SANITIZE_CTX(ctx);
auto cpp_projected_2D_crs =
dynamic_cast<const ProjectedCRS *>(projected_2D_crs->iso_obj.get());
if (!cpp_projected_2D_crs) {
proj_log_error(ctx, __FUNCTION__,
"projected_2D_crs is not a Projected CRS");
return nullptr;
}
const auto &oldCS = cpp_projected_2D_crs->coordinateSystem();
const auto &oldCSAxisList = oldCS->axisList();
if (geog_3D_crs && geog_3D_crs->iso_obj) {
auto cpp_geog_3D_CRS =
std::dynamic_pointer_cast<GeographicCRS>(geog_3D_crs->iso_obj);
if (!cpp_geog_3D_CRS) {
proj_log_error(ctx, __FUNCTION__,
"geog_3D_crs is not a Geographic CRS");
return nullptr;
}
const auto &geogCS = cpp_geog_3D_CRS->coordinateSystem();
const auto &geogCSAxisList = geogCS->axisList();
if (geogCSAxisList.size() != 3) {
proj_log_error(ctx, __FUNCTION__,
"geog_3D_crs is not a Geographic 3D CRS");
return nullptr;
}
try {
auto newCS =
cs::CartesianCS::create(PropertyMap(), oldCSAxisList[0],
oldCSAxisList[1], geogCSAxisList[2]);
return pj_obj_create(
ctx,
ProjectedCRS::create(
createPropertyMapName(
crs_name ? crs_name
: cpp_projected_2D_crs->nameStr().c_str()),
NN_NO_CHECK(cpp_geog_3D_CRS),
cpp_projected_2D_crs->derivingConversionRef(), newCS));
} catch (const std::exception &e) {
proj_log_error(ctx, __FUNCTION__, e.what());
if (ctx->cpp_context) {
ctx->cpp_context->autoCloseDbIfNeeded();
}
return nullptr;
}
} else {
try {
auto dbContext = getDBcontextNoException(ctx, __FUNCTION__);
return pj_obj_create(ctx,
cpp_projected_2D_crs->promoteTo3D(
crs_name ? std::string(crs_name)
: cpp_projected_2D_crs->nameStr(),
dbContext));
} catch (const std::exception &e) {
proj_log_error(ctx, __FUNCTION__, e.what());
if (ctx->cpp_context) {
ctx->cpp_context->autoCloseDbIfNeeded();
}
return nullptr;
}
}
}
// ---------------------------------------------------------------------------
/** \brief Instantiate a EngineeringCRS with just a name
*
* The returned object must be unreferenced with proj_destroy() after
@@ -6039,6 +6184,7 @@ PJ *proj_create_conversion_equal_earth(PJ_CONTEXT *ctx, double center_long,
int proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
assert(coordoperation);
auto op = dynamic_cast<const CoordinateOperation *>(
coordoperation->iso_obj.get());
@@ -6081,6 +6227,7 @@ int proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx,
int proj_coordoperation_has_ballpark_transformation(PJ_CONTEXT *ctx,
const PJ *coordoperation) {
SANITIZE_CTX(ctx);
assert(coordoperation);
auto op = dynamic_cast<const CoordinateOperation *>(
coordoperation->iso_obj.get());
+365 -118
View File
@@ -56,7 +56,9 @@
#include <string>
#include <vector>
#ifdef DEBUG
// #define DEBUG
// #define DEBUG_SORT
#if defined(DEBUG) || defined(DEBUG_SORT)
#include <iostream>
#endif
@@ -10169,6 +10171,8 @@ struct CoordinateOperationFactory::Private {
const crs::CRSNNPtr &targetCRS;
const CoordinateOperationContextNNPtr &context;
bool inCreateOperationsWithDatumPivotAntiRecursion = false;
bool inCreateOperationsGeogToVertWithIntermediate = false;
bool skipHorizontalTransformation = false;
Context(const crs::CRSNNPtr &sourceCRSIn,
const crs::CRSNNPtr &targetCRSIn,
@@ -10193,6 +10197,11 @@ struct CoordinateOperationFactory::Private {
const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst,
Context &context);
static std::vector<CoordinateOperationNNPtr>
createOperationsGeogToVertWithIntermediate(const crs::CRSNNPtr &sourceCRS,
const crs::CRSNNPtr &targetCRS,
Context &context);
static bool
hasPerfectAccuracyResult(const std::vector<CoordinateOperationNNPtr> &res,
const Context &context);
@@ -10251,6 +10260,7 @@ CoordinateOperationPtr CoordinateOperationFactory::createOperation(
struct PrecomputedOpCharacteristics {
double area_{};
double accuracy_{};
bool isPROJExportable_ = false;
bool hasGrids_ = false;
bool gridsAvailable_ = false;
bool gridsKnown_ = false;
@@ -10259,13 +10269,14 @@ struct PrecomputedOpCharacteristics {
bool isNullTransformation_ = false;
PrecomputedOpCharacteristics() = default;
PrecomputedOpCharacteristics(double area, double accuracy, bool hasGrids,
PrecomputedOpCharacteristics(double area, double accuracy,
bool isPROJExportable, bool hasGrids,
bool gridsAvailable, bool gridsKnown,
size_t stepCount, bool isApprox,
bool isNullTransformation)
: area_(area), accuracy_(accuracy), hasGrids_(hasGrids),
gridsAvailable_(gridsAvailable), gridsKnown_(gridsKnown),
stepCount_(stepCount), isApprox_(isApprox),
: area_(area), accuracy_(accuracy), isPROJExportable_(isPROJExportable),
hasGrids_(hasGrids), gridsAvailable_(gridsAvailable),
gridsKnown_(gridsKnown), stepCount_(stepCount), isApprox_(isApprox),
isNullTransformation_(isNullTransformation) {}
};
@@ -10293,6 +10304,15 @@ struct SortFunction {
// CAUTION: the order of the comparisons is extremely important
// to get the intended result.
if (iterA->second.isPROJExportable_ &&
!iterB->second.isPROJExportable_) {
return true;
}
if (!iterA->second.isPROJExportable_ &&
iterB->second.isPROJExportable_) {
return false;
}
if (!iterA->second.isApprox_ && iterB->second.isApprox_) {
return true;
}
@@ -10309,16 +10329,12 @@ struct SortFunction {
return false;
}
if (iterA->second.hasGrids_ && iterB->second.hasGrids_) {
// Operations where grids are all available go before other
if (iterA->second.gridsAvailable_ &&
!iterB->second.gridsAvailable_) {
return true;
}
if (iterB->second.gridsAvailable_ &&
!iterA->second.gridsAvailable_) {
return false;
}
// Operations where grids are all available go before other
if (iterA->second.gridsAvailable_ && !iterB->second.gridsAvailable_) {
return true;
}
if (iterB->second.gridsAvailable_ && !iterA->second.gridsAvailable_) {
return false;
}
// Operations where grids are all known in our DB go before other
@@ -10674,13 +10690,53 @@ struct FilterResults {
std::string::npos ||
op->nameStr().find(BALLPARK_GEOCENTRIC_TRANSLATION) !=
std::string::npos;
bool isPROJExportable = false;
auto formatter = io::PROJStringFormatter::create();
try {
op->exportToPROJString(formatter.get());
// Grids might be missing, but at least this is something
// PROJ could potentially process
isPROJExportable = true;
} catch (const std::exception &) {
}
map[op.get()] = PrecomputedOpCharacteristics(
area, getAccuracy(op), hasGrids, gridsAvailable, gridsKnown,
stepCount, isApprox, isNullTransformation);
area, getAccuracy(op), isPROJExportable, hasGrids,
gridsAvailable, gridsKnown, stepCount, isApprox,
isNullTransformation);
}
// Sort !
std::sort(res.begin(), res.end(), SortFunction(map));
SortFunction sortFunc(map);
std::sort(res.begin(), res.end(), sortFunc);
// Debug code to check consistency of the sort function
#ifdef DEBUG_SORT
constexpr bool debugSort = true;
#elif !defined(NDEBUG)
const bool debugSort = getenv("PROJ_DEBUG_SORT_FUNCT") != nullptr;
#endif
#if defined(DEBUG_SORT) || !defined(NDEBUG)
if (debugSort) {
const bool assertIfIssue =
!(getenv("PROJ_DEBUG_SORT_FUNCT_ASSERT") != nullptr);
for (size_t i = 0; i < res.size(); ++i) {
for (size_t j = i + 1; j < res.size(); ++j) {
if (sortFunc(res[j], res[i])) {
#ifdef DEBUG_SORT
std::cerr << "Sorting issue with entry " << i << "("
<< res[i]->nameStr() << ") and " << j << "("
<< res[j]->nameStr() << ")" << std::endl;
#endif
if (assertIfIssue) {
assert(false);
}
}
}
}
}
#endif
}
// ----------------------------------------------------------------------
@@ -10917,18 +10973,21 @@ applyInverse(const std::vector<CoordinateOperationNNPtr> &list) {
//! @cond Doxygen_Suppress
static void buildSourceAndTargetCRSIds(
const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS,
const CoordinateOperationContextNNPtr &context,
std::list<std::pair<std::string, std::string>> &sourceIds,
std::list<std::pair<std::string, std::string>> &targetIds) {
static void buildCRSIds(const crs::CRSNNPtr &crs,
const CoordinateOperationContextNNPtr &context,
std::list<std::pair<std::string, std::string>> &ids) {
const auto &authFactory = context->getAuthorityFactory();
assert(authFactory);
const auto &authFactoryName = authFactory->getAuthority();
const auto findObjectInDB = [&authFactory, &authFactoryName](
const crs::CRSNNPtr &crs,
std::list<std::pair<std::string, std::string>> &idList) {
for (const auto &id : crs->identifiers()) {
const auto &authName = *(id->codeSpace());
const auto &code = id->code();
if (!authName.empty()) {
ids.emplace_back(authName, code);
}
}
if (ids.empty()) {
try {
const auto tmpAuthFactory = io::AuthorityFactory::create(
authFactory->databaseContext(),
@@ -10954,35 +11013,37 @@ static void buildSourceAndTargetCRSIds(
matches.front().get(),
util::IComparable::Criterion::EQUIVALENT) &&
!matches.front()->identifiers().empty()) {
const auto &ids = matches.front()->identifiers();
idList.emplace_back(*(ids[0]->codeSpace()), ids[0]->code());
const auto &tmpIds = matches.front()->identifiers();
ids.emplace_back(*(tmpIds[0]->codeSpace()),
tmpIds[0]->code());
}
}
} catch (const std::exception &) {
}
};
}
}
for (const auto &id : sourceCRS->identifiers()) {
const auto &authName = *(id->codeSpace());
const auto &code = id->code();
if (!authName.empty()) {
sourceIds.emplace_back(authName, code);
}
}
if (sourceIds.empty()) {
findObjectInDB(sourceCRS, sourceIds);
}
// ---------------------------------------------------------------------------
for (const auto &id : targetCRS->identifiers()) {
const auto &authName = *(id->codeSpace());
const auto &code = id->code();
if (!authName.empty()) {
targetIds.emplace_back(authName, code);
static std::vector<std::string>
getCandidateAuthorities(const io::AuthorityFactoryPtr &authFactory,
const std::string &srcAuthName,
const std::string &targetAuthName) {
const auto &authFactoryName = authFactory->getAuthority();
std::vector<std::string> authorities;
if (authFactoryName == "any") {
authorities.emplace_back();
}
if (authFactoryName.empty()) {
authorities = authFactory->databaseContext()->getAllowedAuthorities(
srcAuthName, targetAuthName);
if (authorities.empty()) {
authorities.emplace_back();
}
} else {
authorities.emplace_back(authFactoryName);
}
if (targetIds.empty()) {
findObjectInDB(targetCRS, targetIds);
}
return authorities;
}
// ---------------------------------------------------------------------------
@@ -10994,12 +11055,11 @@ findOpsInRegistryDirect(const crs::CRSNNPtr &sourceCRS,
const CoordinateOperationContextNNPtr &context) {
const auto &authFactory = context->getAuthorityFactory();
assert(authFactory);
const auto &authFactoryName = authFactory->getAuthority();
std::list<std::pair<std::string, std::string>> sourceIds;
std::list<std::pair<std::string, std::string>> targetIds;
buildSourceAndTargetCRSIds(sourceCRS, targetCRS, context, sourceIds,
targetIds);
buildCRSIds(sourceCRS, context, sourceIds);
buildCRSIds(targetCRS, context, targetIds);
for (const auto &idSrc : sourceIds) {
const auto &srcAuthName = idSrc.first;
@@ -11008,20 +11068,8 @@ findOpsInRegistryDirect(const crs::CRSNNPtr &sourceCRS,
const auto &targetAuthName = idTarget.first;
const auto &targetCode = idTarget.second;
std::vector<std::string> authorities;
if (authFactoryName == "any") {
authorities.emplace_back();
}
if (authFactoryName.empty()) {
authorities =
authFactory->databaseContext()->getAllowedAuthorities(
srcAuthName, targetAuthName);
if (authorities.empty()) {
authorities.emplace_back();
}
} else {
authorities.emplace_back(authFactoryName);
}
const auto authorities(getCandidateAuthorities(
authFactory, srcAuthName, targetAuthName));
for (const auto &authority : authorities) {
const auto tmpAuthFactory = io::AuthorityFactory::create(
authFactory->databaseContext(),
@@ -11042,6 +11090,81 @@ findOpsInRegistryDirect(const crs::CRSNNPtr &sourceCRS,
}
return std::vector<CoordinateOperationNNPtr>();
}
// ---------------------------------------------------------------------------
// Look in the authority registry for operations from sourceCRS
static std::vector<CoordinateOperationNNPtr>
findOpsInRegistryDirectFrom(const crs::CRSNNPtr &sourceCRS,
const CoordinateOperationContextNNPtr &context) {
const auto &authFactory = context->getAuthorityFactory();
assert(authFactory);
std::list<std::pair<std::string, std::string>> ids;
buildCRSIds(sourceCRS, context, ids);
for (const auto &id : ids) {
const auto &srcAuthName = id.first;
const auto &srcCode = id.second;
const auto authorities(
getCandidateAuthorities(authFactory, srcAuthName, srcAuthName));
for (const auto &authority : authorities) {
const auto tmpAuthFactory = io::AuthorityFactory::create(
authFactory->databaseContext(),
authority == "any" ? std::string() : authority);
auto res = tmpAuthFactory->createFromCoordinateReferenceSystemCodes(
srcAuthName, srcCode, std::string(), std::string(),
context->getUsePROJAlternativeGridNames(),
context->getGridAvailabilityUse() ==
CoordinateOperationContext::GridAvailabilityUse::
DISCARD_OPERATION_IF_MISSING_GRID,
context->getDiscardSuperseded());
if (!res.empty()) {
return res;
}
}
}
return std::vector<CoordinateOperationNNPtr>();
}
// ---------------------------------------------------------------------------
// Look in the authority registry for operations to targetCRS
static std::vector<CoordinateOperationNNPtr>
findOpsInRegistryDirectTo(const crs::CRSNNPtr &targetCRS,
const CoordinateOperationContextNNPtr &context) {
const auto &authFactory = context->getAuthorityFactory();
assert(authFactory);
std::list<std::pair<std::string, std::string>> ids;
buildCRSIds(targetCRS, context, ids);
for (const auto &id : ids) {
const auto &targetAuthName = id.first;
const auto &targetCode = id.second;
const auto authorities(getCandidateAuthorities(
authFactory, targetAuthName, targetAuthName));
for (const auto &authority : authorities) {
const auto tmpAuthFactory = io::AuthorityFactory::create(
authFactory->databaseContext(),
authority == "any" ? std::string() : authority);
auto res = tmpAuthFactory->createFromCoordinateReferenceSystemCodes(
std::string(), std::string(), targetAuthName, targetCode,
context->getUsePROJAlternativeGridNames(),
context->getGridAvailabilityUse() ==
CoordinateOperationContext::GridAvailabilityUse::
DISCARD_OPERATION_IF_MISSING_GRID,
context->getDiscardSuperseded());
if (!res.empty()) {
return res;
}
}
}
return std::vector<CoordinateOperationNNPtr>();
}
//! @endcond
// ---------------------------------------------------------------------------
@@ -11056,12 +11179,11 @@ static std::vector<CoordinateOperationNNPtr> findsOpsInRegistryWithIntermediate(
const auto &authFactory = context->getAuthorityFactory();
assert(authFactory);
const auto &authFactoryName = authFactory->getAuthority();
std::list<std::pair<std::string, std::string>> sourceIds;
std::list<std::pair<std::string, std::string>> targetIds;
buildSourceAndTargetCRSIds(sourceCRS, targetCRS, context, sourceIds,
targetIds);
buildCRSIds(sourceCRS, context, sourceIds);
buildCRSIds(targetCRS, context, targetIds);
for (const auto &idSrc : sourceIds) {
const auto &srcAuthName = idSrc.first;
@@ -11070,20 +11192,8 @@ static std::vector<CoordinateOperationNNPtr> findsOpsInRegistryWithIntermediate(
const auto &targetAuthName = idTarget.first;
const auto &targetCode = idTarget.second;
std::vector<std::string> authorities;
if (authFactoryName == "any") {
authorities.emplace_back();
}
if (authFactoryName.empty()) {
authorities =
authFactory->databaseContext()->getAllowedAuthorities(
srcAuthName, targetAuthName);
if (authorities.empty()) {
authorities.emplace_back();
}
} else {
authorities.emplace_back(authFactoryName);
}
const auto authorities(getCandidateAuthorities(
authFactory, srcAuthName, targetAuthName));
for (const auto &authority : authorities) {
const auto tmpAuthFactory = io::AuthorityFactory::create(
authFactory->databaseContext(),
@@ -11990,6 +12100,51 @@ void CoordinateOperationFactory::Private::createOperationsWithDatumPivot(
// ---------------------------------------------------------------------------
std::vector<CoordinateOperationNNPtr>
CoordinateOperationFactory::Private::createOperationsGeogToVertWithIntermediate(
const crs::CRSNNPtr & /*sourceCRS*/, // geographic CRS
const crs::CRSNNPtr &targetCRS, // vertical CRS
Private::Context &context) {
std::vector<CoordinateOperationNNPtr> res;
struct AntiRecursionGuard {
Context &context;
explicit AntiRecursionGuard(Context &contextIn) : context(contextIn) {
assert(!context.inCreateOperationsGeogToVertWithIntermediate);
context.inCreateOperationsGeogToVertWithIntermediate = true;
}
~AntiRecursionGuard() {
context.inCreateOperationsGeogToVertWithIntermediate = false;
}
};
AntiRecursionGuard guard(context);
for (int i = 0; i < 2; i++) {
// Generally EPSG has operations from GeogCrs to VertCRS
auto ops =
i == 0 ? findOpsInRegistryDirectTo(targetCRS, context.context)
: findOpsInRegistryDirectFrom(targetCRS, context.context);
for (const auto &op : ops) {
const auto tmpCRS = i == 0 ? op->sourceCRS() : op->targetCRS();
if (tmpCRS &&
dynamic_cast<const crs::GeographicCRS *>(tmpCRS.get())) {
res.emplace_back(i == 0 ? op : op->inverse());
}
}
if (!res.empty())
break;
}
return res;
}
// ---------------------------------------------------------------------------
static CoordinateOperationNNPtr
createBallparkGeocentricTranslation(const crs::CRSNNPtr &sourceCRS,
const crs::CRSNNPtr &targetCRS) {
@@ -12048,14 +12203,23 @@ CoordinateOperationFactory::Private::createOperations(
std::vector<CoordinateOperationNNPtr> res;
const bool allowEmptyIntersection = true;
const auto &sourceProj4Ext = sourceCRS->getExtensionProj4();
const auto &targetProj4Ext = targetCRS->getExtensionProj4();
auto boundSrc = dynamic_cast<const crs::BoundCRS *>(sourceCRS.get());
auto boundDst = dynamic_cast<const crs::BoundCRS *>(targetCRS.get());
const auto &sourceProj4Ext = boundSrc
? boundSrc->baseCRS()->getExtensionProj4()
: sourceCRS->getExtensionProj4();
const auto &targetProj4Ext = boundDst
? boundDst->baseCRS()->getExtensionProj4()
: targetCRS->getExtensionProj4();
if (!sourceProj4Ext.empty() || !targetProj4Ext.empty()) {
auto sourceProjExportable =
dynamic_cast<io::IPROJStringExportable *>(sourceCRS.get());
dynamic_cast<const io::IPROJStringExportable *>(
boundSrc ? boundSrc : sourceCRS.get());
auto targetProjExportable =
dynamic_cast<io::IPROJStringExportable *>(targetCRS.get());
dynamic_cast<const io::IPROJStringExportable *>(
boundDst ? boundDst : targetCRS.get());
if (!sourceProjExportable) {
throw InvalidOperation("Source CRS is not PROJ exportable");
}
@@ -12097,11 +12261,16 @@ CoordinateOperationFactory::Private::createOperations(
auto geodSrc = dynamic_cast<const crs::GeodeticCRS *>(sourceCRS.get());
auto geodDst = dynamic_cast<const crs::GeodeticCRS *>(targetCRS.get());
auto geogSrc = dynamic_cast<const crs::GeographicCRS *>(sourceCRS.get());
auto geogDst = dynamic_cast<const crs::GeographicCRS *>(targetCRS.get());
auto vertSrc = dynamic_cast<const crs::VerticalCRS *>(sourceCRS.get());
auto vertDst = dynamic_cast<const crs::VerticalCRS *>(targetCRS.get());
// First look-up if the registry provide us with operations.
auto derivedSrc = dynamic_cast<const crs::DerivedCRS *>(sourceCRS.get());
auto derivedDst = dynamic_cast<const crs::DerivedCRS *>(targetCRS.get());
if (context.context->getAuthorityFactory() &&
auto authFactory = context.context->getAuthorityFactory();
if (authFactory &&
(derivedSrc == nullptr ||
!derivedSrc->baseCRS()->_isEquivalentTo(
targetCRS.get(), util::IComparable::Criterion::EQUIVALENT)) &&
@@ -12135,6 +12304,21 @@ CoordinateOperationFactory::Private::createOperations(
util::IComparable::Criterion::EQUIVALENT);
}
// There's no direct transformation from NAVD88 height to WGS84,
// so try to research all transformations from NAVD88 to another
// intermediate GeographicCRS.
if (res.empty() &&
!context.inCreateOperationsGeogToVertWithIntermediate &&
geogSrc && vertDst) {
res = createOperationsGeogToVertWithIntermediate(
sourceCRS, targetCRS, context);
} else if (res.empty() &&
!context.inCreateOperationsGeogToVertWithIntermediate &&
geogDst && vertSrc) {
res = applyInverse(createOperationsGeogToVertWithIntermediate(
targetCRS, sourceCRS, context));
}
if (res.empty() && !sameGeodeticDatum &&
!context.inCreateOperationsWithDatumPivotAntiRecursion &&
geodSrc && geodDst) {
@@ -12193,10 +12377,6 @@ CoordinateOperationFactory::Private::createOperations(
"celestial body");
}
auto geogSrc =
dynamic_cast<const crs::GeographicCRS *>(sourceCRS.get());
auto geogDst =
dynamic_cast<const crs::GeographicCRS *>(targetCRS.get());
if (geogSrc && geogDst) {
return createOperationsGeogToGeog(res, sourceCRS, targetCRS,
geogSrc, geogDst);
@@ -12284,8 +12464,6 @@ CoordinateOperationFactory::Private::createOperations(
return applyInverse(createOperations(targetCRS, sourceCRS, context));
}
auto boundSrc = dynamic_cast<const crs::BoundCRS *>(sourceCRS.get());
auto geogDst = dynamic_cast<const crs::GeographicCRS *>(targetCRS.get());
if (boundSrc && geogDst) {
const auto &hubSrc = boundSrc->hubCRS();
auto hubSrcGeog =
@@ -12441,31 +12619,34 @@ CoordinateOperationFactory::Private::createOperations(
auto vertCRSOfBaseOfBoundSrc =
dynamic_cast<const crs::VerticalCRS *>(boundSrc->baseCRS().get());
if (vertCRSOfBaseOfBoundSrc && hubSrcGeog &&
hubSrcGeog->coordinateSystem()->axisList().size() == 3 &&
geogDst->coordinateSystem()->axisList().size() == 3) {
if (vertCRSOfBaseOfBoundSrc && hubSrcGeog) {
auto opsFirst = createOperations(sourceCRS, hubSrc, context);
auto opsSecond = createOperations(hubSrc, targetCRS, context);
if (!opsFirst.empty() && !opsSecond.empty()) {
for (const auto &opFirst : opsFirst) {
for (const auto &opLast : opsSecond) {
// Exclude artificial transformations from the hub
// to the target CRS
if (!opLast->hasBallparkTransformation()) {
try {
res.emplace_back(
ConcatenatedOperation::
createComputeMetadata(
{opFirst, opLast},
!allowEmptyIntersection));
} catch (
const InvalidOperationEmptyIntersection &) {
if (context.skipHorizontalTransformation) {
if (!opsFirst.empty())
return opsFirst;
} else {
auto opsSecond = createOperations(hubSrc, targetCRS, context);
if (!opsFirst.empty() && !opsSecond.empty()) {
for (const auto &opFirst : opsFirst) {
for (const auto &opLast : opsSecond) {
// Exclude artificial transformations from the hub
// to the target CRS
if (!opLast->hasBallparkTransformation()) {
try {
res.emplace_back(
ConcatenatedOperation::
createComputeMetadata(
{opFirst, opLast},
!allowEmptyIntersection));
} catch (
const InvalidOperationEmptyIntersection &) {
}
}
}
}
}
if (!res.empty()) {
return res;
if (!res.empty()) {
return res;
}
}
}
}
@@ -12474,15 +12655,12 @@ CoordinateOperationFactory::Private::createOperations(
}
// reverse of previous case
auto boundDst = dynamic_cast<const crs::BoundCRS *>(targetCRS.get());
auto geogSrc = dynamic_cast<const crs::GeographicCRS *>(sourceCRS.get());
if (geogSrc && boundDst) {
return applyInverse(createOperations(targetCRS, sourceCRS, context));
}
// vertCRS (as boundCRS with transformation to target vertCRS) to
// vertCRS
auto vertDst = dynamic_cast<const crs::VerticalCRS *>(targetCRS.get());
if (boundSrc && vertDst) {
auto baseSrcVert =
dynamic_cast<const crs::VerticalCRS *>(boundSrc->baseCRS().get());
@@ -12499,7 +12677,6 @@ CoordinateOperationFactory::Private::createOperations(
}
// reverse of previous case
auto vertSrc = dynamic_cast<const crs::VerticalCRS *>(sourceCRS.get());
if (boundDst && vertSrc) {
return applyInverse(createOperations(targetCRS, sourceCRS, context));
}
@@ -12543,7 +12720,6 @@ CoordinateOperationFactory::Private::createOperations(
if (vertSrc && geogDst) {
if (vertSrc->identifiers().empty()) {
const auto &authFactory = context.context->getAuthorityFactory();
const auto &vertSrcName = vertSrc->nameStr();
if (authFactory != nullptr && vertSrcName != "unnamed" &&
vertSrcName != "unknown") {
@@ -12692,8 +12868,79 @@ CoordinateOperationFactory::Private::createOperations(
std::vector<CoordinateOperationNNPtr> verticalTransforms;
if (componentsSrc.size() >= 2 &&
componentsSrc[1]->extractVerticalCRS()) {
struct SetSkipHorizontalTransform {
Context &context;
explicit SetSkipHorizontalTransform(Context &contextIn)
: context(contextIn) {
assert(!context.skipHorizontalTransformation);
context.skipHorizontalTransformation = true;
}
~SetSkipHorizontalTransform() {
context.skipHorizontalTransformation = false;
}
};
SetSkipHorizontalTransform setSkipHorizontalTransform(context);
verticalTransforms =
createOperations(componentsSrc[1], targetCRS, context);
bool foundRegisteredTransformWithAllGridsAvailable = false;
for (const auto &op : verticalTransforms) {
if (!op->identifiers().empty() && authFactory) {
bool missingGrid = false;
const auto gridsNeeded =
op->gridsNeeded(authFactory->databaseContext());
for (const auto &gridDesc : gridsNeeded) {
if (!gridDesc.available) {
missingGrid = true;
break;
}
}
if (!missingGrid) {
foundRegisteredTransformWithAllGridsAvailable =
true;
break;
}
}
}
if (!foundRegisteredTransformWithAllGridsAvailable &&
srcGeogCRS &&
!srcGeogCRS->_isEquivalentTo(
geogDst, util::IComparable::Criterion::EQUIVALENT) &&
!srcGeogCRS->is2DPartOf3D(NN_NO_CHECK(geogDst))) {
auto verticalTransformsTmp = createOperations(
componentsSrc[1], NN_NO_CHECK(srcGeogCRS), context);
bool foundRegisteredTransform = false;
foundRegisteredTransformWithAllGridsAvailable = false;
for (const auto &op : verticalTransformsTmp) {
if (!op->identifiers().empty() && authFactory) {
bool missingGrid = false;
const auto gridsNeeded =
op->gridsNeeded(authFactory->databaseContext());
for (const auto &gridDesc : gridsNeeded) {
if (!gridDesc.available) {
missingGrid = true;
break;
}
}
foundRegisteredTransform = true;
if (!missingGrid) {
foundRegisteredTransformWithAllGridsAvailable =
true;
break;
}
}
}
if (foundRegisteredTransformWithAllGridsAvailable) {
verticalTransforms = verticalTransformsTmp;
} else if (foundRegisteredTransform) {
verticalTransforms.insert(verticalTransforms.end(),
verticalTransformsTmp.begin(),
verticalTransformsTmp.end());
}
}
}
if (!horizTransforms.empty() && !verticalTransforms.empty()) {
for (const auto &horizTransform : horizTransforms) {
+103 -6
View File
@@ -756,6 +756,96 @@ CRS::getNonDeprecated(const io::DatabaseContextNNPtr &dbContext) const {
// ---------------------------------------------------------------------------
/** \brief Return a variant of this CRS "promoted" to a 3D one, if not already
* the case.
*
* The new axis will be ellipsoidal height, oriented upwards, and with metre
* units.
*
* @param newName Name of the new CRS. If empty, nameStr() will be used.
* @param dbContext Database context to look for potentially already registered
* 3D CRS. May be nullptr.
* @return a new CRS promoted to 3D, or the current one if already 3D or not
* applicable.
* @since 7.0
*/
CRSNNPtr CRS::promoteTo3D(const std::string &newName,
const io::DatabaseContextPtr &dbContext) const {
const auto geogCRS = dynamic_cast<const GeographicCRS *>(this);
if (geogCRS) {
const auto &axisList = geogCRS->coordinateSystem()->axisList();
if (axisList.size() == 2) {
const auto &l_identifiers = identifiers();
// First check if there is a Geographic 3D CRS in the database
// of the same name.
// This is the common practice in the EPSG dataset.
if (dbContext && l_identifiers.size() == 1) {
auto authFactory = io::AuthorityFactory::create(
NN_NO_CHECK(dbContext), *(l_identifiers[0]->codeSpace()));
auto res = authFactory->createObjectsFromName(
nameStr(),
{io::AuthorityFactory::ObjectType::GEOGRAPHIC_3D_CRS},
false);
if (!res.empty()) {
const auto &firstRes = res.front();
if (geogCRS->is2DPartOf3D(NN_NO_CHECK(
dynamic_cast<GeographicCRS *>(firstRes.get())))) {
return NN_NO_CHECK(
util::nn_dynamic_pointer_cast<CRS>(firstRes));
}
}
}
auto upAxis = cs::CoordinateSystemAxis::create(
util::PropertyMap().set(IdentifiedObject::NAME_KEY,
cs::AxisName::Ellipsoidal_height),
cs::AxisAbbreviation::h, cs::AxisDirection::UP,
common::UnitOfMeasure::METRE);
auto cs = cs::EllipsoidalCS::create(
util::PropertyMap(), axisList[0], axisList[1], upAxis);
return util::nn_static_pointer_cast<CRS>(GeographicCRS::create(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
!newName.empty() ? newName : nameStr()),
geogCRS->datum(), geogCRS->datumEnsemble(), cs));
}
}
const auto projCRS = dynamic_cast<const ProjectedCRS *>(this);
if (projCRS) {
const auto &axisList = projCRS->coordinateSystem()->axisList();
if (axisList.size() == 2) {
auto base3DCRS =
projCRS->baseCRS()->promoteTo3D(std::string(), dbContext);
auto upAxis = cs::CoordinateSystemAxis::create(
util::PropertyMap().set(IdentifiedObject::NAME_KEY,
cs::AxisName::Ellipsoidal_height),
cs::AxisAbbreviation::h, cs::AxisDirection::UP,
common::UnitOfMeasure::METRE);
auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0],
axisList[1], upAxis);
return util::nn_static_pointer_cast<CRS>(ProjectedCRS::create(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
!newName.empty() ? newName : nameStr()),
NN_NO_CHECK(
util::nn_dynamic_pointer_cast<GeodeticCRS>(base3DCRS)),
projCRS->derivingConversionRef(), cs));
}
}
const auto boundCRS = dynamic_cast<const BoundCRS *>(this);
if (boundCRS) {
return BoundCRS::create(
boundCRS->baseCRS()->promoteTo3D(newName, dbContext),
boundCRS->hubCRS(), boundCRS->transformation());
}
return NN_NO_CHECK(
std::static_pointer_cast<CRS>(shared_from_this().as_nullable()));
}
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
std::list<std::pair<CRSNNPtr, int>>
@@ -1898,14 +1988,18 @@ bool GeographicCRS::is2DPartOf3D(util::nn<const GeographicCRS *> other)
const auto &secondAxis = axis[1];
const auto &otherFirstAxis = otherAxis[0];
const auto &otherSecondAxis = otherAxis[1];
if (!(firstAxis->_isEquivalentTo(otherFirstAxis.get()) &&
secondAxis->_isEquivalentTo(otherSecondAxis.get()))) {
if (!(firstAxis->_isEquivalentTo(
otherFirstAxis.get(), util::IComparable::Criterion::EQUIVALENT) &&
secondAxis->_isEquivalentTo(
otherSecondAxis.get(),
util::IComparable::Criterion::EQUIVALENT))) {
return false;
}
const auto &thisDatum = GeodeticCRS::getPrivate()->datum_;
const auto &otherDatum = other->GeodeticCRS::getPrivate()->datum_;
if (thisDatum && otherDatum) {
return thisDatum->_isEquivalentTo(otherDatum.get());
return thisDatum->_isEquivalentTo(
otherDatum.get(), util::IComparable::Criterion::EQUIVALENT);
}
return false;
}
@@ -3145,13 +3239,16 @@ void ProjectedCRS::addUnitConvertAndAxisSwap(io::PROJStringFormatter *formatter,
if (!formatter->getCRSExport()) {
formatter->addStep("unitconvert");
formatter->addParam("xy_in", "m");
formatter->addParam("z_in", "m");
if (!formatter->omitZUnitConversion())
formatter->addParam("z_in", "m");
if (projUnit.empty()) {
formatter->addParam("xy_out", toSI);
formatter->addParam("z_out", toSI);
if (!formatter->omitZUnitConversion())
formatter->addParam("z_out", toSI);
} else {
formatter->addParam("xy_out", projUnit);
formatter->addParam("z_out", projUnit);
if (!formatter->omitZUnitConversion())
formatter->addParam("z_out", projUnit);
}
} else {
if (projUnit.empty()) {
+41 -30
View File
@@ -1000,9 +1000,11 @@ bool DatabaseContext::lookForGridInfo(const std::string &projFilename,
if (d->pjCtxt() == nullptr) {
d->setPjCtxt(pj_get_default_ctx());
}
int errno_before = proj_context_errno(d->pjCtxt());
gridAvailable =
pj_find_file(d->pjCtxt(), projFilename.c_str(), &fullFilename[0],
fullFilename.size() - 1) != 0;
proj_context_errno_set(d->pjCtxt(), errno_before);
fullFilename.resize(strlen(fullFilename.c_str()));
auto res =
@@ -3312,9 +3314,9 @@ AuthorityFactory::createFromCoordinateReferenceSystemCodes(
bool discardSuperseded) const {
auto cacheKey(d->authority());
cacheKey += sourceCRSAuthName;
cacheKey += sourceCRSAuthName.empty() ? "{empty}" : sourceCRSAuthName;
cacheKey += sourceCRSCode;
cacheKey += targetCRSAuthName;
cacheKey += targetCRSAuthName.empty() ? "{empty}" : targetCRSAuthName;
cacheKey += targetCRSCode;
cacheKey += (usePROJAlternativeGridNames ? '1' : '0');
cacheKey += (discardIfMissingGrid ? '1' : '0');
@@ -3326,27 +3328,30 @@ AuthorityFactory::createFromCoordinateReferenceSystemCodes(
return list;
}
// Look-up first for conversion which is the most precise.
std::string sql("SELECT conversion_auth_name, "
"geodetic_crs_auth_name, geodetic_crs_code FROM "
"projected_crs WHERE auth_name = ? AND code = ?");
auto params = ListOfParams{targetCRSAuthName, targetCRSCode};
auto res = d->run(sql, params);
if (!res.empty()) {
const auto &row = res.front();
bool ok = row[1] == sourceCRSAuthName && row[2] == sourceCRSCode;
if (ok && d->hasAuthorityRestriction()) {
ok = row[0] == d->authority();
}
if (ok) {
auto targetCRS = d->createFactory(targetCRSAuthName)
->createProjectedCRS(targetCRSCode);
auto conv = targetCRS->derivingConversion();
list.emplace_back(conv);
d->context()->d->cache(cacheKey, list);
return list;
if (!targetCRSAuthName.empty()) {
// Look-up first for conversion which is the most precise.
std::string sql("SELECT conversion_auth_name, "
"geodetic_crs_auth_name, geodetic_crs_code FROM "
"projected_crs WHERE auth_name = ? AND code = ?");
auto params = ListOfParams{targetCRSAuthName, targetCRSCode};
auto res = d->run(sql, params);
if (!res.empty()) {
const auto &row = res.front();
bool ok = row[1] == sourceCRSAuthName && row[2] == sourceCRSCode;
if (ok && d->hasAuthorityRestriction()) {
ok = row[0] == d->authority();
}
if (ok) {
auto targetCRS = d->createFactory(targetCRSAuthName)
->createProjectedCRS(targetCRSCode);
auto conv = targetCRS->derivingConversion();
list.emplace_back(conv);
d->context()->d->cache(cacheKey, list);
return list;
}
}
}
std::string sql;
if (discardSuperseded) {
sql = "SELECT cov.auth_name, cov.code, cov.table_name, "
"ss.replacement_auth_name, ss.replacement_code FROM "
@@ -3358,20 +3363,26 @@ AuthorityFactory::createFromCoordinateReferenceSystemCodes(
"ss.superseded_auth_name = cov.auth_name AND "
"ss.superseded_code = cov.code AND "
"ss.superseded_table_name = ss.replacement_table_name "
"WHERE source_crs_auth_name = ? AND source_crs_code = ? AND "
"target_crs_auth_name = ? AND target_crs_code = ? AND "
"cov.deprecated = 0";
"WHERE ";
} else {
sql = "SELECT cov.auth_name, cov.code, cov.table_name FROM "
"coordinate_operation_view cov JOIN area "
"ON cov.area_of_use_auth_name = area.auth_name AND "
"cov.area_of_use_code = area.code "
"WHERE source_crs_auth_name = ? AND source_crs_code = ? AND "
"target_crs_auth_name = ? AND target_crs_code = ? AND "
"cov.deprecated = 0";
"WHERE ";
}
params = {sourceCRSAuthName, sourceCRSCode, targetCRSAuthName,
targetCRSCode};
ListOfParams params;
if (!sourceCRSAuthName.empty()) {
sql += "source_crs_auth_name = ? AND source_crs_code = ? AND ";
params.emplace_back(sourceCRSAuthName);
params.emplace_back(sourceCRSCode);
}
if (!targetCRSAuthName.empty()) {
sql += "target_crs_auth_name = ? AND target_crs_code = ? AND ";
params.emplace_back(targetCRSAuthName);
params.emplace_back(targetCRSCode);
}
sql += "cov.deprecated = 0";
if (d->hasAuthorityRestriction()) {
sql += " AND cov.auth_name = ?";
params.emplace_back(d->authority());
@@ -3379,7 +3390,7 @@ AuthorityFactory::createFromCoordinateReferenceSystemCodes(
sql += " ORDER BY pseudo_area_from_swne(south_lat, west_lon, north_lat, "
"east_lon) DESC, "
"(CASE WHEN accuracy is NULL THEN 1 ELSE 0 END), accuracy";
res = d->run(sql, params);
auto res = d->run(sql, params);
std::set<std::pair<std::string, std::string>> setTransf;
if (discardSuperseded) {
for (const auto &row : res) {
+116 -49
View File
@@ -3185,7 +3185,16 @@ ConversionNNPtr WKTParser::Private::buildProjectionFromESRI(
}
}
const auto *wkt2_mapping = getMapping(esriMapping->wkt2_name);
const char *projectionMethodWkt2Name = esriMapping->wkt2_name;
if (ci_equal(esriProjectionName, "Krovak")) {
const std::string projCRSName =
stripQuotes(projCRSNode->GP()->children()[0]);
if (projCRSName.find("_East_North") != std::string::npos) {
projectionMethodWkt2Name = EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED;
}
}
const auto *wkt2_mapping = getMapping(projectionMethodWkt2Name);
if (ci_equal(esriProjectionName, "Stereographic")) {
try {
if (std::fabs(io::asDouble(
@@ -4444,12 +4453,12 @@ class JSONParser {
}
template <class TargetCRS, class DatumBuilderType,
class CS = CoordinateSystem>
class CSClass = CoordinateSystem>
util::nn<std::shared_ptr<TargetCRS>> buildCRS(const json &j,
DatumBuilderType f) {
auto datum = (this->*f)(getObject(j, "datum"));
auto cs = buildCS(getObject(j, "coordinate_system"));
auto csCast = util::nn_dynamic_pointer_cast<CS>(cs);
auto csCast = util::nn_dynamic_pointer_cast<CSClass>(cs);
if (!csCast) {
throw ParsingException("coordinate_system not of expected type");
}
@@ -4457,7 +4466,7 @@ class JSONParser {
NN_NO_CHECK(csCast));
}
template <class TargetCRS, class BaseCRS, class CS = CoordinateSystem>
template <class TargetCRS, class BaseCRS, class CSClass = CoordinateSystem>
util::nn<std::shared_ptr<TargetCRS>> buildDerivedCRS(const json &j) {
auto baseCRSObj = create(getObject(j, "base_crs"));
auto baseCRS = util::nn_dynamic_pointer_cast<BaseCRS>(baseCRSObj);
@@ -4465,7 +4474,7 @@ class JSONParser {
throw ParsingException("base_crs not of expected type");
}
auto cs = buildCS(getObject(j, "coordinate_system"));
auto csCast = util::nn_dynamic_pointer_cast<CS>(cs);
auto csCast = util::nn_dynamic_pointer_cast<CSClass>(cs);
if (!csCast) {
throw ParsingException("coordinate_system not of expected type");
}
@@ -7482,7 +7491,7 @@ static const struct DatumDesc {
} datumDescs[] = {
{"GGRS87", "GGRS87", 4121, "Greek Geodetic Reference System 1987", 6121,
"GRS 1980", 7019, 6378137, 298.257222101},
{"postdam", "DHDN", 4314, "Deutsches Hauptdreiecksnetz", 6314,
{"potsdam", "DHDN", 4314, "Deutsches Hauptdreiecksnetz", 6314,
"Bessel 1841", 7004, 6377397.155, 299.1528128},
{"carthage", "Carthage", 4223, "Carthage", 6223, "Clarke 1880 (IGN)", 7011,
6378249.2, 293.4660213},
@@ -8235,6 +8244,21 @@ static double getAngularValue(const std::string &paramValue,
// ---------------------------------------------------------------------------
static bool is_in_stringlist(const std::string &str, const char *stringlist) {
const char *haystack = stringlist;
while (true) {
const char *res = strstr(haystack, str.c_str());
if (res == nullptr)
return false;
if ((res == stringlist || res[-1] == ',') &&
(res[str.size()] == ',' || res[str.size()] == '\0'))
return true;
haystack += str.size();
}
}
// ---------------------------------------------------------------------------
CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
int iStep, GeographicCRSNNPtr geogCRS, int iUnitConvert, int iAxisSwap) {
auto &step = steps_[iStep];
@@ -8313,10 +8337,13 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
} else if (step.name == "somerc") {
mapping =
getMapping(EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B);
step.paramValues.emplace_back(Step::KeyValue("alpha", "90"));
step.paramValues.emplace_back(Step::KeyValue("gamma", "90"));
step.paramValues.emplace_back(
Step::KeyValue("lonc", getParamValue(step, "lon_0")));
if (!hasParamValue(step, "alpha") && !hasParamValue(step, "gamma") &&
!hasParamValue(step, "lonc")) {
step.paramValues.emplace_back(Step::KeyValue("alpha", "90"));
step.paramValues.emplace_back(Step::KeyValue("gamma", "90"));
step.paramValues.emplace_back(
Step::KeyValue("lonc", getParamValue(step, "lon_0")));
}
} else if (step.name == "krovak" &&
((getParamValue(step, "axis") == "swu" && iAxisSwap < 0) ||
(iAxisSwap > 0 &&
@@ -8536,28 +8563,34 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
std::vector<ParameterValueNNPtr> values;
std::string methodName = "PROJ " + step.name;
for (const auto &param : step.paramValues) {
if (param.key == "wktext" || param.key == "no_defs" ||
param.key == "datum" || param.key == "ellps" ||
param.key == "a" || param.key == "b" || param.key == "R" ||
param.key == "towgs84" || param.key == "nadgrids" ||
param.key == "geoidgrids" || param.key == "units" ||
param.key == "to_meter" || param.key == "vunits" ||
param.key == "vto_meter" || param.key == "type") {
if (is_in_stringlist(param.key,
"wktext,no_defs,datum,ellps,a,b,R,towgs84,"
"nadgrids,geoidgrids,"
"units,to_meter,vunits,vto_meter,type")) {
continue;
}
if (param.value.empty()) {
methodName += " " + param.key;
} else if (param.key == "o_proj") {
} else if (isalpha(param.value[0])) {
methodName += " " + param.key + "=" + param.value;
} else {
parameters.push_back(OperationParameter::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, param.key)));
bool hasError = false;
if (param.key == "x_0" || param.key == "y_0") {
if (is_in_stringlist(param.key, "x_0,y_0,h,h_0")) {
double value = getNumericValue(param.value, &hasError);
values.push_back(ParameterValue::create(
Measure(value, UnitOfMeasure::METRE)));
} else if (param.key == "k" || param.key == "k_0") {
} else if (is_in_stringlist(
param.key,
"k,k_0,"
"north_square,south_square," // rhealpix
"n,m," // sinu
"q," // urm5
"path,lsat," // lsat
"W,M," // hammer
"aperture,resolution," // isea
)) {
double value = getNumericValue(param.value, &hasError);
values.push_back(ParameterValue::create(
Measure(value, UnitOfMeasure::SCALE_UNITY)));
@@ -8577,7 +8610,10 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
parameters, values)
.as_nullable();
if (methodName == "PROJ ob_tran o_proj=longlat") {
if (is_in_stringlist(methodName, "PROJ ob_tran o_proj=longlat,"
"PROJ ob_tran o_proj=lonlat,"
"PROJ ob_tran o_proj=latlon,"
"PROJ ob_tran o_proj=latlong")) {
return DerivedGeographicCRS::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"),
geogCRS, NN_NO_CHECK(conv),
@@ -8638,6 +8674,21 @@ static const metadata::ExtentPtr &getExtent(const crs::CRS *crs) {
//! @endcond
namespace {
struct PJContextHolder {
PJ_CONTEXT *ctx_;
bool bFree_;
PJContextHolder(PJ_CONTEXT *ctx, bool bFree) : ctx_(ctx), bFree_(bFree) {}
~PJContextHolder() {
if (bFree_)
proj_context_destroy(ctx_);
}
PJContextHolder(const PJContextHolder &) = delete;
PJContextHolder &operator=(const PJContextHolder &) = delete;
};
} // namespace
// ---------------------------------------------------------------------------
/** \brief Instantiate a sub-class of BaseObject from a PROJ string.
@@ -8652,8 +8703,10 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
// In some abnormal situations involving init=epsg:XXXX syntax, we could
// have infinite loop
if (d->ctx_ && d->ctx_->curStringInCreateFromPROJString == projString) {
throw ParsingException("invalid PROJ string");
if (d->ctx_ &&
d->ctx_->projStringParserCreateFromPROJStringRecursionCounter == 2) {
throw ParsingException(
"Infinite recursion in PROJStringParser::createFromPROJString()");
}
d->steps_.clear();
@@ -8701,34 +8754,52 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
const std::string &stepName = d->steps_[0].name;
if (ci_starts_with(stepName, "epsg:") ||
ci_starts_with(stepName, "IGNF:")) {
/* We create a new context so as to avoid messing up with the */
/* errorno of the main context, when trying to find the likely */
/* missing epsg file */
auto ctx = proj_context_create();
if (!ctx) {
throw ParsingException("out of memory");
}
PJContextHolder contextHolder(ctx, true);
if (d->ctx_) {
ctx->set_search_paths(d->ctx_->search_paths);
ctx->file_finder = d->ctx_->file_finder;
ctx->file_finder_legacy = d->ctx_->file_finder_legacy;
ctx->file_finder_user_data = d->ctx_->file_finder_user_data;
}
bool usePROJ4InitRules = d->usePROJ4InitRules_;
if (!usePROJ4InitRules) {
PJ_CONTEXT *ctx = proj_context_create();
if (ctx) {
usePROJ4InitRules = proj_context_get_use_proj4_init_rules(
ctx, FALSE) == TRUE;
proj_context_destroy(ctx);
}
usePROJ4InitRules =
proj_context_get_use_proj4_init_rules(ctx, FALSE) == TRUE;
}
if (!usePROJ4InitRules) {
throw ParsingException("init=epsg:/init=IGNF: syntax not "
"supported in non-PROJ4 emulation mode");
}
PJ_CONTEXT *ctx = proj_context_create();
char unused[256];
std::string initname(stepName);
initname.resize(initname.find(':'));
int file_found =
pj_find_file(ctx, initname.c_str(), unused, sizeof(unused));
proj_context_destroy(ctx);
if (!file_found) {
auto obj = createFromUserInput(stepName, d->dbContext_, true);
auto crs = dynamic_cast<CRS *>(obj.get());
if (crs &&
(d->steps_[0].paramValues.empty() ||
(d->steps_[0].paramValues.size() == 1 &&
d->getParamValue(d->steps_[0], "type") == "crs"))) {
bool hasSignificantParamValues = false;
for (const auto &kv : d->steps_[0].paramValues) {
if (!((kv.key == "type" && kv.value == "crs") ||
kv.key == "no_defs")) {
hasSignificantParamValues = true;
break;
}
}
if (crs && !hasSignificantParamValues) {
PropertyMap properties;
properties.set(IdentifiedObject::NAME_KEY,
d->title_.empty() ? crs->nameStr()
@@ -8790,19 +8861,19 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
}
}
auto ctx = d->ctx_ ? d->ctx_ : proj_context_create();
if (!ctx) {
throw ParsingException("out of memory");
}
PJContextHolder contextHolder(ctx, ctx != d->ctx_);
paralist *init = pj_mkparam(("init=" + d->steps_[0].name).c_str());
if (!init) {
throw ParsingException("out of memory");
}
PJ_CONTEXT *ctx = d->ctx_ ? d->ctx_ : proj_context_create();
if (!ctx) {
pj_dealloc(init);
throw ParsingException("out of memory");
}
ctx->projStringParserCreateFromPROJStringRecursionCounter++;
paralist *list = pj_expand_init(ctx, init);
if (ctx != d->ctx_) {
proj_context_destroy(ctx);
}
ctx->projStringParserCreateFromPROJStringRecursionCounter--;
if (!list) {
pj_dealloc(init);
throw ParsingException("cannot expand " + projString);
@@ -8933,18 +9004,14 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
proj_log_func(pj_context, &logger, Logger::log);
proj_context_use_proj4_init_rules(pj_context, d->usePROJ4InitRules_);
}
if (d->ctx_) {
d->ctx_->curStringInCreateFromPROJString = projString;
}
pj_context->projStringParserCreateFromPROJStringRecursionCounter++;
auto log_level = proj_log_level(pj_context, PJ_LOG_NONE);
auto pj = pj_create_internal(
pj_context, (projString.find("type=crs") != std::string::npos
? projString + " +disable_grid_presence_check"
: projString)
.c_str());
if (d->ctx_) {
d->ctx_->curStringInCreateFromPROJString.clear();
}
pj_context->projStringParserCreateFromPROJStringRecursionCounter--;
valid = pj != nullptr;
proj_log_level(pj_context, log_level);
+3 -3
View File
@@ -154,7 +154,7 @@ extern "C" {
/* The version numbers should be updated with every release! **/
#define PROJ_VERSION_MAJOR 6
#define PROJ_VERSION_MINOR 2
#define PROJ_VERSION_PATCH 0
#define PROJ_VERSION_PATCH 1
extern char const PROJ_DLL pj_release[]; /* global release id string */
@@ -358,8 +358,8 @@ PJ PROJ_DLL *proj_create (PJ_CONTEXT *ctx, const char *definition);
PJ PROJ_DLL *proj_create_argv (PJ_CONTEXT *ctx, int argc, char **argv);
PJ PROJ_DLL *proj_create_crs_to_crs(PJ_CONTEXT *ctx, const char *source_crs, const char *target_crs, PJ_AREA *area);
PJ PROJ_DLL *proj_create_crs_to_crs_from_pj(PJ_CONTEXT *ctx,
PJ *source_crs,
PJ *target_crs,
const PJ *source_crs,
const PJ *target_crs,
PJ_AREA *area,
const char* const *options);
PJ PROJ_DLL *proj_normalize_for_visualization(PJ_CONTEXT *ctx, const PJ* obj);
+1 -1
View File
@@ -38,7 +38,7 @@
#endif
#ifndef PJ_VERSION
#define PJ_VERSION 620
#define PJ_VERSION 621
#endif
#ifdef PROJ_RENAME_SYMBOLS
+10 -1
View File
@@ -116,7 +116,7 @@ PJ PROJ_DLL *proj_create_cartesian_2D_cs(PJ_CONTEXT *ctx,
double unit_conv_factor);
/** Type of Cartesian 2D coordinate system. */
/** Type of Ellipsoidal 2D coordinate system. */
typedef enum
{
/* Longitude-Latitude */
@@ -210,6 +210,15 @@ PJ PROJ_DLL *proj_crs_alter_parameters_linear_unit(
const char *unit_code,
int convert_to_new_unit);
PJ PROJ_DLL *proj_crs_promote_to_3D(PJ_CONTEXT *ctx,
const char* crs_3D_name,
const PJ* crs_2D);
PJ PROJ_DLL *proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx,
const char* crs_name,
const PJ* projected_2D_crs,
const PJ* geog_3D_crs);
PJ PROJ_DLL *proj_create_engineering_crs(PJ_CONTEXT *ctx,
const char *crsName);
+1 -1
View File
@@ -706,7 +706,7 @@ struct projCtx_t {
const char* (*file_finder) (PJ_CONTEXT *, const char*, void* user_data) = nullptr;
void* file_finder_user_data = nullptr;
std::string curStringInCreateFromPROJString{};
int projStringParserCreateFromPROJStringRecursionCounter = 0; // to avoid potential infinite recursion in PROJStringParser::createFromPROJString()
projCtx_t() = default;
projCtx_t(const projCtx_t&);
+4
View File
@@ -127,6 +127,10 @@ static PJ_LP aea_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoid/spheroid, inverse
if (Q->ellips) {
lp.phi = (Q->c - lp.phi * lp.phi) / Q->n;
if (fabs(Q->ec - fabs(lp.phi)) > TOL7) {
if (fabs(lp.phi) > 2 ) {
proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
return lp;
}
if ((lp.phi = phi1_(lp.phi, P->e, P->one_es)) == HUGE_VAL) {
proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
return lp;
+1 -1
View File
@@ -151,7 +151,7 @@ oblcon:
return xy;
}
else
xy.x = xy.y = 0.;
return aeqd_e_forward(lp, P);
else {
xy.y = acos(xy.y);
xy.y /= sin(xy.y);
+1 -1
View File
@@ -67,7 +67,7 @@ static PJ_XY bertin1953_s_forward (PJ_LP lp, PJ *P) {
xy.x *= 1. + d;
}
if (xy.y > 0.) {
xy.x *= 1. + d / 1.5 * xy.x * xy.x;
xy.y *= 1. + d / 1.5 * xy.x * xy.x;
}
return xy;
+2
View File
@@ -117,6 +117,8 @@ PJ *PROJECTION(eqdc) {
} else {
if (secant)
Q->n = (cosphi - cos(Q->phi2)) / (Q->phi2 - Q->phi1);
if (Q->n == 0)
return destructor (P, PJD_ERR_CONIC_LAT_EQUAL);
Q->c = Q->phi1 + cos(Q->phi1) / Q->n;
Q->rho0 = Q->c - P->phi0;
}
+4 -4
View File
@@ -126,11 +126,11 @@ static PJ_LP geos_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inverse
/* Setting three components of vector from satellite to position.*/
Vx = -1.0;
if(Q->flip_axis) {
Vz = tan (xy.y / (Q->radius_g - 1.0));
Vy = tan (xy.x / (Q->radius_g - 1.0)) * sqrt (1.0 + Vz * Vz);
Vz = tan (xy.y / Q->radius_g_1);
Vy = tan (xy.x / Q->radius_g_1) * sqrt (1.0 + Vz * Vz);
} else {
Vy = tan (xy.x / (Q->radius_g - 1.0));
Vz = tan (xy.y / (Q->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy);
Vy = tan (xy.x / Q->radius_g_1);
Vz = tan (xy.y / Q->radius_g_1) * sqrt (1.0 + Vy * Vy);
}
/* Calculation of terms in cubic equation and determinant.*/
+2 -2
View File
@@ -11,7 +11,7 @@ PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph";
#define EPS 1e-7
#define ONETOL 1.000001
#define CN 2.67595
#define CS 2.43763
#define CSz 2.43763
#define RCN 0.37369906014686373063
#define RCS 0.41023453108141924738
#define FYCN 1.75859
@@ -28,7 +28,7 @@ static PJ_XY hatano_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa
int i;
(void) P;
c = sin(lp.phi) * (lp.phi < 0. ? CS : CN);
c = sin(lp.phi) * (lp.phi < 0. ? CSz : CN);
for (i = NITER; i; --i) {
lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi));
if (fabs(th1) < EPS) break;
+51 -51
View File
@@ -668,10 +668,10 @@ static int isea_tri_plane(int tri, struct isea_pt *pt, double radius) {
/* convert projected triangle coords to quad xy coords, return quad number */
static int isea_ptdd(int tri, struct isea_pt *pt) {
int downtri, quad;
int downtri, quadz;
downtri = (((tri - 1) / 5) % 2 == 1);
quad = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
quadz = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
isea_rotate(pt, downtri ? 240.0 : 60.0);
if (downtri) {
@@ -679,10 +679,10 @@ static int isea_ptdd(int tri, struct isea_pt *pt) {
/* pt->y += cos(30.0 * M_PI / 180.0); */
pt->y += .86602540378443864672;
}
return quad;
return quadz;
}
static int isea_dddi_ap3odd(struct isea_dgg *g, int quad, struct isea_pt *pt,
static int isea_dddi_ap3odd(struct isea_dgg *g, int quadz, struct isea_pt *pt,
struct isea_pt *di)
{
struct isea_pt v;
@@ -715,40 +715,40 @@ static int isea_dddi_ap3odd(struct isea_dgg *g, int quad, struct isea_pt *pt,
* you want to test for max coords for the next quad in the same
* "row" first to get the case where both are max
*/
if (quad <= 5) {
if (quadz <= 5) {
if (d == 0 && i == maxcoord) {
/* north pole */
quad = 0;
quadz = 0;
d = 0;
i = 0;
} else if (i == maxcoord) {
/* upper right in next quad */
quad += 1;
if (quad == 6)
quad = 1;
quadz += 1;
if (quadz == 6)
quadz = 1;
i = maxcoord - d;
d = 0;
} else if (d == maxcoord) {
/* lower right in quad to lower right */
quad += 5;
quadz += 5;
d = 0;
}
} else if (quad >= 6) {
} else if (quadz >= 6) {
if (i == 0 && d == maxcoord) {
/* south pole */
quad = 11;
quadz = 11;
d = 0;
i = 0;
} else if (d == maxcoord) {
/* lower right in next quad */
quad += 1;
if (quad == 11)
quad = 6;
quadz += 1;
if (quadz == 11)
quadz = 6;
d = maxcoord - i;
i = 0;
} else if (i == maxcoord) {
/* upper right in quad to upper right */
quad = (quad - 4) % 5;
quadz = (quadz - 4) % 5;
i = 0;
}
}
@@ -756,11 +756,11 @@ static int isea_dddi_ap3odd(struct isea_dgg *g, int quad, struct isea_pt *pt,
di->x = d;
di->y = i;
g->quad = quad;
return quad;
g->quad = quadz;
return quadz;
}
static int isea_dddi(struct isea_dgg *g, int quad, struct isea_pt *pt,
static int isea_dddi(struct isea_dgg *g, int quadz, struct isea_pt *pt,
struct isea_pt *di) {
struct isea_pt v;
double hexwidth;
@@ -768,7 +768,7 @@ static int isea_dddi(struct isea_dgg *g, int quad, struct isea_pt *pt,
struct hex h;
if (g->aperture == 3 && g->resolution % 2 != 0) {
return isea_dddi_ap3odd(g, quad, pt, di);
return isea_dddi_ap3odd(g, quadz, pt, di);
}
/* todo might want to do this as an iterated loop */
if (g->aperture >0) {
@@ -793,41 +793,41 @@ static int isea_dddi(struct isea_dgg *g, int quad, struct isea_pt *pt,
hex_iso(&h);
/* we may actually be on another quad */
if (quad <= 5) {
if (quadz <= 5) {
if (h.x == 0 && h.z == -sidelength) {
/* north pole */
quad = 0;
quadz = 0;
h.z = 0;
h.y = 0;
h.x = 0;
} else if (h.z == -sidelength) {
quad = quad + 1;
if (quad == 6)
quad = 1;
quadz = quadz + 1;
if (quadz == 6)
quadz = 1;
h.y = sidelength - h.x;
h.z = h.x - sidelength;
h.x = 0;
} else if (h.x == sidelength) {
quad += 5;
quadz += 5;
h.y = -h.z;
h.x = 0;
}
} else if (quad >= 6) {
} else if (quadz >= 6) {
if (h.z == 0 && h.x == sidelength) {
/* south pole */
quad = 11;
quadz = 11;
h.x = 0;
h.y = 0;
h.z = 0;
} else if (h.x == sidelength) {
quad = quad + 1;
if (quad == 11)
quad = 6;
quadz = quadz + 1;
if (quadz == 11)
quadz = 6;
h.x = h.y + sidelength;
h.y = 0;
h.z = -h.x;
} else if (h.y == -sidelength) {
quad -= 4;
quadz -= 4;
h.y = 0;
h.z = -h.x;
}
@@ -835,35 +835,35 @@ static int isea_dddi(struct isea_dgg *g, int quad, struct isea_pt *pt,
di->x = h.x;
di->y = -h.z;
g->quad = quad;
return quad;
g->quad = quadz;
return quadz;
}
static int isea_ptdi(struct isea_dgg *g, int tri, struct isea_pt *pt,
struct isea_pt *di) {
struct isea_pt v;
int quad;
int quadz;
v = *pt;
quad = isea_ptdd(tri, &v);
quad = isea_dddi(g, quad, &v, di);
return quad;
quadz = isea_ptdd(tri, &v);
quadz = isea_dddi(g, quadz, &v, di);
return quadz;
}
/* q2di to seqnum */
static long isea_disn(struct isea_dgg *g, int quad, struct isea_pt *di) {
static long isea_disn(struct isea_dgg *g, int quadz, struct isea_pt *di) {
long sidelength;
long sn, height;
long hexes;
if (quad == 0) {
if (quadz == 0) {
g->serial = 1;
return g->serial;
}
/* hexes in a quad */
hexes = lround(pow(static_cast<double>(g->aperture), static_cast<double>(g->resolution)));
if (quad == 11) {
if (quadz == 11) {
g->serial = 1 + 10 * hexes + 1;
return g->serial;
}
@@ -871,11 +871,11 @@ static long isea_disn(struct isea_dgg *g, int quad, struct isea_pt *di) {
height = lround(floor((pow(g->aperture, (g->resolution - 1) / 2.0))));
sn = ((long)di->x) * height;
sn += ((long)di->y) / height;
sn += (quad - 1) * hexes;
sn += (quadz - 1) * hexes;
sn += 2;
} else {
sidelength = lround((pow(g->aperture, g->resolution / 2.0)));
sn = lround(floor(((quad - 1) * hexes + sidelength * di->x + di->y + 2)));
sn = lround(floor(((quadz - 1) * hexes + sidelength * di->x + di->y + 2)));
}
g->serial = sn;
@@ -894,15 +894,15 @@ static int isea_hex(struct isea_dgg *g, int tri,
long sidelength;
long d, i, x, y;
#endif
int quad;
int quadz;
quad = isea_ptdi(g, tri, pt, &v);
quadz = isea_ptdi(g, tri, pt, &v);
if( v.x < (INT_MIN >> 4) || v.x > (INT_MAX >> 4) )
{
throw "Invalid shift";
}
hex->x = ((int)v.x << 4) + quad;
hex->x = ((int)v.x * 16) + quadz;
hex->y = v.y;
return 1;
@@ -914,16 +914,16 @@ static int isea_hex(struct isea_dgg *g, int tri,
if (g->aperture == 3 && g->resolution % 2 != 0) {
long offset = lround((pow(3.0, g->resolution - 1) + 0.5));
d += offset * ((g->quad-1) % 5);
i += offset * ((g->quad-1) % 5);
d += offset * ((g->quadz-1) % 5);
i += offset * ((g->quadz-1) % 5);
if (quad == 0) {
if (quadz == 0) {
d = 0;
i = offset;
} else if (quad == 11) {
} else if (quadz == 11) {
d = 2 * offset;
i = 0;
} else if (quad > 5) {
} else if (quadz > 5) {
d += offset;
}
+3 -3
View File
@@ -7,7 +7,7 @@
PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl, Sph";
#define CS .95257934441568037152
#define CSy .95257934441568037152
#define FXC .92582009977255146156
#define FYC 3.40168025708304504493
#define C23 .66666666666666666666
@@ -19,7 +19,7 @@ static PJ_XY mbtfpp_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwa
PJ_XY xy = {0.0,0.0};
(void) P;
lp.phi = asin(CS * sin(lp.phi));
lp.phi = asin(CSy * sin(lp.phi));
xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.);
xy.y = FYC * sin(C13 * lp.phi);
return xy;
@@ -41,7 +41,7 @@ static PJ_LP mbtfpp_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, inver
lp.phi = asin(lp.phi);
lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) );
if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) {
if (fabs(lp.phi = sin(lp.phi) / CSy) >= 1.) {
if (fabs(lp.phi) > ONEEPS) {
proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
return lp;
+4
View File
@@ -31,8 +31,10 @@ static PJ_XY o_forward(PJ_LP lp, PJ *P) { /* spheroid */
coslam = cos(lp.lam);
sinphi = sin(lp.phi);
cosphi = cos(lp.phi);
/* Formula (5-8b) of Snyder's "Map projections: a working manual" */
lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), Q->sphip * cosphi * coslam +
Q->cphip * sinphi) + Q->lamp);
/* Formula (5-7) */
lp.phi = aasin(P->ctx,Q->sphip * sinphi - Q->cphip * cosphi * coslam);
return Q->link->fwd(lp, Q->link);
@@ -62,7 +64,9 @@ static PJ_LP o_inverse(PJ_XY xy, PJ *P) { /* spheroid */
coslam = cos(lp.lam -= Q->lamp);
sinphi = sin(lp.phi);
cosphi = cos(lp.phi);
/* Formula (5-9) */
lp.phi = aasin(P->ctx,Q->sphip * sinphi + Q->cphip * cosphi * coslam);
/* Formula (5-10b) */
lp.lam = aatan2(cosphi * sin(lp.lam), Q->sphip * cosphi * coslam -
Q->cphip * sinphi);
}
+1 -1
View File
@@ -11,7 +11,7 @@ char const pj_release[] =
STR(PROJ_VERSION_MAJOR)"."
STR(PROJ_VERSION_MINOR)"."
STR(PROJ_VERSION_PATCH)", "
"September 1st, 2019";
"November 1st, 2019";
const char *pj_get_release() {
return pj_release;
+2
View File
@@ -612,6 +612,8 @@ PJ *TRANSFORMATION(helmert, 0) {
/* Scale */
if (pj_param (P->ctx, P->params, "ts").i) {
Q->scale_0 = pj_param (P->ctx, P->params, "ds").f;
if( Q->scale_0 <= -1.0e6 )
return pj_default_destructor (P, PJD_ERR_INVALID_SCALE);
if (pj_param (P->ctx, P->params, "ttheta").i && Q->scale_0 == 0.0)
return pj_default_destructor (P, PJD_ERR_INVALID_SCALE);
}
+1 -1
View File
@@ -39,7 +39,7 @@ testvarious-check:
PROJ_LIB=$(PROJ_LIB) $(TESTVARIOUS) $(CS2CSEXE)
testdatumfile-check:
@if [ -f $(PROJ_LIB)/conus -a -f $(PROJ_LIB)/ntv1_can.dat -a -f $(PROJ_LIB)/MD -a -f $(PROJ_LIB)/ntf_r93.gsb ]; then \
@if [ -f $(PROJ_LIB)/conus -a -f $(PROJ_LIB)/ntv1_can.dat -a -f $(PROJ_LIB)/MD -a -f $(PROJ_LIB)/ntf_r93.gsb -a -f $(PROJ_LIB)/egm96_15.gtx ]; then \
PROJ_LIB=$(PROJ_LIB) $(TESTDATUMFILE) $(CS2CSEXE) ; \
fi
+3
View File
@@ -27,3 +27,6 @@ edge or even a wee bit outside (#141).
NAD27 -> NAD83: 1st through ntv1, 2nd through conus
44d00'00.000"N 111d00'00.000"W 0.0 43d59'59.732"N 111d0'3.208"W 0.000
39d00'00.000"N 111d00'00.000"W 0.0 38d59'59.912"N 111d0'2.604"W 0.000
##############################################################
WGS84 -> WGS84+EGM96
2dE 49dN 0 2.00 49.00 -44.64
+8
View File
@@ -105,6 +105,14 @@ $EXE NAD27 NAD83 -E >>${OUT} <<EOF
39d00'00.000"N 111d00'00.000"W 0.0
EOF
#
echo "##############################################################" >> ${OUT}
echo "WGS84 -> WGS84+EGM96" >> ${OUT}
#
$EXE +init=epsg:4326 +to +init=epsg:4326 +geoidgrids=egm96_15.gtx -E >>${OUT} <<EOF
2dE 49dN 0
EOF
# Cleanup
rm -rf "dir with \" space"
+4
View File
@@ -115,6 +115,10 @@ echo "Testing NGF IGN69 height to RGF93: projinfo -s EPSG:5720 -t EPSG:4965 -o P
$EXE -s EPSG:5720 -t EPSG:4965 -o PROJ >>${OUT} 2>&1
echo "" >>${OUT}
echo "Testing -s "+proj=longlat +datum=WGS84 +geoidgrids=@foo.gtx +type=crs" -t EPSG:4326 -o PROJ -q" >> ${OUT}
$EXE -s "+proj=longlat +datum=WGS84 +geoidgrids=@foo.gtx +type=crs" -t EPSG:4326 -o PROJ -q >>${OUT} 2>&1
echo "" >>${OUT}
# do 'diff' with distribution results
echo "diff ${OUT} with testprojinfo_out.dist"
diff -u ${OUT} ${TEST_CLI_DIR}/testprojinfo_out.dist
+66 -8
View File
@@ -212,7 +212,7 @@ CONVERSION["UTM zone 31N",
Testing projinfo -s NAD27 -t NAD83
Candidate operations found: 1
Note: using '--spatial-test intersects' would bring more results (7)
Note: using '--spatial-test intersects' would bring more results (8)
-------------------------------------
Operation n°1:
@@ -267,17 +267,18 @@ COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83",
BBOX[-90,-180,90,180]]]
Testing projinfo -s NAD27 -t NAD83 --grid-check none --spatial-test intersects --summary
Candidate operations found: 7
Candidate operations found: 8
DERIVED_FROM(EPSG):1312, NAD27 to NAD83 (3), 1.0 m, Canada
DERIVED_FROM(EPSG):1313, NAD27 to NAD83 (4), 1.5 m, Canada - NAD27
DERIVED_FROM(EPSG):1241, NAD27 to NAD83 (1), 0.15 m, USA - CONUS including EEZ
DERIVED_FROM(EPSG):1243, NAD27 to NAD83 (2), 0.5 m, USA - Alaska including EEZ
EPSG:1462, NAD27 to NAD83 (5), 1.0 m, Canada - Quebec
EPSG:1573, NAD27 to NAD83 (6), 1.5 m, Canada - Quebec
EPSG:9111, NAD27 to NAD83 (9), 1.5 m, Canada - Saskatchewan
unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation
Testing projinfo -s NAD27 -t NAD83 --grid-check none --spatial-test intersects
Candidate operations found: 7
Candidate operations found: 8
-------------------------------------
Operation n°1:
@@ -534,7 +535,7 @@ Operation n°6:
EPSG:1573, NAD27 to NAD83 (6), 1.5 m, Canada - Quebec
PROJ string:
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=QUE27-83.gsb +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=NA27NA83.GSB +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
WKT2_2018 string:
COORDINATEOPERATION["NAD27 to NAD83 (6)",
@@ -571,18 +572,69 @@ COORDINATEOPERATION["NAD27 to NAD83 (6)",
ID["EPSG",4269]]],
METHOD["NTv2",
ID["EPSG",9615]],
PARAMETERFILE["Latitude and longitude difference file","QUE27-83.gsb"],
PARAMETERFILE["Latitude and longitude difference file","NA27NA83.GSB"],
OPERATIONACCURACY[1.5],
USAGE[
SCOPE["Accuracy 1-2 metres."],
AREA["Canada - Quebec"],
BBOX[44.99,-79.85,62.62,-57.1]],
ID["EPSG",1573],
REMARK["Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]]
REMARK["Also distributed with file name QUE27-83.gsb. Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]]
-------------------------------------
Operation n°7:
EPSG:9111, NAD27 to NAD83 (9), 1.5 m, Canada - Saskatchewan
PROJ string:
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=SK27-83.gsb +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
WKT2_2018 string:
COORDINATEOPERATION["NAD27 to NAD83 (9)",
VERSION["ISC-Can SK"],
SOURCECRS[
GEOGCRS["NAD27",
DATUM["North American Datum 1927",
ELLIPSOID["Clarke 1866",6378206.4,294.978698213898,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4267]]],
TARGETCRS[
GEOGCRS["NAD83",
DATUM["North American Datum 1983",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4269]]],
METHOD["NTv2",
ID["EPSG",9615]],
PARAMETERFILE["Latitude and longitude difference file","SK27-83.gsb"],
OPERATIONACCURACY[1.5],
USAGE[
SCOPE["Spatial referencing."],
AREA["Canada - Saskatchewan"],
BBOX[49,-110,60.01,-101.34]],
ID["EPSG",9111]]
-------------------------------------
Operation n°8:
unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation
PROJ string:
@@ -635,14 +687,17 @@ COORDINATEOPERATION["Ballpark geographic offset from NAD27 to NAD83",
Testing projinfo -s EPSG:4230 -t EPSG:4258 --bbox 8,54.51,15.24,57.8 --summary
Candidate operations found: 1
Note: using '--spatial-test intersects' would bring more results (2)
EPSG:1626, ED50 to ETRS89 (4), 1.0 m, Denmark - onshore
Testing projinfo -s EPSG:4230 -t EPSG:4258 --area EPSG:3237 --summary
Candidate operations found: 1
Note: using '--spatial-test intersects' would bring more results (2)
EPSG:1626, ED50 to ETRS89 (4), 1.0 m, Denmark - onshore
Testing projinfo -s EPSG:4230 -t EPSG:4258 --area 'Denmark - onshore' --summary
Candidate operations found: 1
Note: using '--spatial-test intersects' would bring more results (2)
EPSG:1626, ED50 to ETRS89 (4), 1.0 m, Denmark - onshore
Testing projinfo -s EPSG:4230 -t EPSG:4258 --area 'Denmark -' --summary
@@ -790,7 +845,7 @@ Candidate operations found: 2
-------------------------------------
Operation n°1:
unknown id, Inverse of NAD83(2011) to NAVD88 height (1), 0.1 m, USA - CONUS - onshore
unknown id, Inverse of NAD83(2011) to NAVD88 height (1), 0.02 m, USA - CONUS - onshore
PROJ string:
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=g2012bu0.gtx +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
@@ -798,7 +853,7 @@ PROJ string:
-------------------------------------
Operation n°2:
unknown id, Inverse of NAD83(2011) to NAVD88 height (2), 0.2 m, USA - Alaska
unknown id, Inverse of NAD83(2011) to NAVD88 height (2), 0.02 m, USA - Alaska
PROJ string:
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=g2012ba0.gtx +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
@@ -821,3 +876,6 @@ INVERSE(EPSG):10000, Inverse of RGF93 to NGF IGN69 height (1), 0.5 m, France - m
PROJ string:
+proj=pipeline +step +inv +proj=vgridshift +grids=ggf97a.txt +multiplier=1
Testing -s +proj=longlat +datum=WGS84 +geoidgrids=@foo.gtx +type=crs -t EPSG:4326 -o PROJ -q
+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=vgridshift +grids=@foo.gtx +multiplier=1 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
+6
View File
@@ -105,8 +105,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
{
free(buf_dup);
pj_free(pj_src);
#ifndef OMIT_DEALLOCATION
pj_gc_unloadall(pj_get_default_ctx());
pj_deallocate_grids();
#endif
return 0;
}
double x = 0, y = 0, z = 9;
@@ -133,8 +135,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
free(buf_dup);
pj_free(pj_src);
pj_free(pj_dst);
#ifndef OMIT_DEALLOCATION
pj_gc_unloadall(pj_get_default_ctx());
pj_deallocate_grids();
#endif
return 0;
}
#ifdef STANDALONE
@@ -157,8 +161,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
free(buf_dup);
pj_free(pj_src);
pj_free(pj_dst);
#ifndef OMIT_DEALLOCATION
pj_gc_unloadall(pj_get_default_ctx());
pj_deallocate_grids();
#endif
return 0;
}
+26
View File
@@ -136,6 +136,29 @@ accept 45 45
expect 3_860_398.3783 5_430_089.0490
roundtrip 100
# Test oblique aeqd with point very close lon_0, lat_0, on a perfect sphere
operation +proj=aeqd +a=6371008.771415 +b=6371008.771415 +lat_0=30.2345 +lon_0=-120.2345
tolerance 1 mm
accept -120.234501 30.234501
expect -0.096 0.111
roundtrip 1
accept -120.2345 30.2345
expect 0.000 0.000
roundtrip 1
# Same on an ellipsoid very close to the sphere
operation +proj=aeqd +a=6371008.771415 +b=6371008.771414 +lat_0=30.2345 +lon_0=-120.2345
tolerance 1 mm
accept -120.234501 30.234501
expect -0.096 0.111
roundtrip 1
accept -120.2345 30.2345
expect 0.000 0.000
roundtrip 1
-------------------------------------------------------------------------------
# Test the Modified Azimuthal Equidistant / EPSG 9832. Test data from the EPSG
Guidance Note 7 part 2, April 2018, p. 85
@@ -1321,6 +1344,9 @@ expect failure errno lat_larger_than_90
operation +proj=eqdc +R=6400000 +lat_2=91
expect failure errno lat_larger_than_90
operation +proj=eqdc +R=1 +lat_1=1e-9
expect failure errno conic_lat_equal
===============================================================================
Euler
Conic, Sph
+2
View File
@@ -116,6 +116,8 @@ accept 12 55
expect 1338073.2696101593 7374207.4801437631
-------------------------------------------------------------------------------
operation proj=merc a=1E77 R_lat_a=90 b=1
expect failure errno invalid_eccentricity
-------------------------------------------------------------------------------
This one from testvarious failed at first version of the pull request
+1 -1
View File
@@ -109,7 +109,7 @@ accept 80 7
expect 0.929377425352 -0.215443296201
accept 128 35
expect 0.937431733950 0.700084268525
expect 0.920230566844 0.713170409026
accept 170 -41
expect 2.162845830414 -0.046534568425
+26
View File
@@ -771,4 +771,30 @@ TEST(gie, proj_create_crs_to_crs_outside_area_of_use) {
proj_destroy(P);
}
// ---------------------------------------------------------------------------
TEST(gie, proj_trans_generic) {
// GDA2020 to WGS84 (G1762)
auto P = proj_create(
PJ_DEFAULT_CTX,
"+proj=pipeline +step +proj=axisswap +order=2,1 "
"+step +proj=unitconvert +xy_in=deg +xy_out=rad "
"+step +proj=cart +ellps=GRS80 "
"+step +proj=helmert +x=0 +y=0 +z=0 +rx=0 +ry=0 +rz=0 +s=0 +dx=0 "
"+dy=0 +dz=0 +drx=-0.00150379 +dry=-0.00118346 +drz=-0.00120716 "
"+ds=0 +t_epoch=2020 +convention=coordinate_frame "
"+step +inv +proj=cart +ellps=WGS84 "
"+step +proj=unitconvert +xy_in=rad +xy_out=deg "
"+step +proj=axisswap +order=2,1");
double lat = -60;
double lon = 120;
proj_trans_generic(P, PJ_FWD, &lat, sizeof(double), 1, &lon, sizeof(double),
1, nullptr, 0, 0, nullptr, 0, 0);
// Should be a no-op when the time is unknown (or equal to 2020)
EXPECT_NEAR(lat, -60, 1e-9);
EXPECT_NEAR(lon, 120, 1e-9);
proj_destroy(P);
}
} // namespace
+101 -1
View File
@@ -1344,7 +1344,7 @@ TEST_F(CApi, proj_create_operations) {
ASSERT_NE(res, nullptr);
ObjListKeeper keeper_res(res);
EXPECT_EQ(proj_list_get_count(res), 7);
EXPECT_EQ(proj_list_get_count(res), 8);
EXPECT_EQ(proj_list_get(m_ctxt, res, -1), nullptr);
EXPECT_EQ(proj_list_get(m_ctxt, res, proj_list_get_count(res)), nullptr);
@@ -3737,4 +3737,104 @@ TEST_F(CApi, proj_create_crs_to_crs_from_pj) {
"+step +proj=utm +zone=31 +ellps=WGS84");
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_crs_promote_to_3D) {
auto crs2D =
proj_create(m_ctxt, GeographicCRS::EPSG_4326
->exportToWKT(WKTFormatter::create().get())
.c_str());
ObjectKeeper keeper_crs2D(crs2D);
EXPECT_NE(crs2D, nullptr);
auto crs3D = proj_crs_promote_to_3D(m_ctxt, nullptr, crs2D);
ObjectKeeper keeper_crs3D(crs3D);
EXPECT_NE(crs3D, nullptr);
auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D);
ASSERT_NE(cs, nullptr);
ObjectKeeper keeperCs(cs);
EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3);
auto code = proj_get_id_code(crs3D, 0);
ASSERT_TRUE(code != nullptr);
EXPECT_EQ(code, std::string("4979"));
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_crs_create_projected_3D_crs_from_2D) {
auto projCRS = proj_create_from_database(m_ctxt, "EPSG", "32631",
PJ_CATEGORY_CRS, false, nullptr);
ASSERT_NE(projCRS, nullptr);
ObjectKeeper keeper_projCRS(projCRS);
{
auto geog3DCRS = proj_create_from_database(
m_ctxt, "EPSG", "4979", PJ_CATEGORY_CRS, false, nullptr);
ASSERT_NE(geog3DCRS, nullptr);
ObjectKeeper keeper_geog3DCRS(geog3DCRS);
auto crs3D = proj_crs_create_projected_3D_crs_from_2D(
m_ctxt, nullptr, projCRS, geog3DCRS);
ObjectKeeper keeper_crs3D(crs3D);
EXPECT_NE(crs3D, nullptr);
EXPECT_EQ(proj_get_type(crs3D), PJ_TYPE_PROJECTED_CRS);
EXPECT_EQ(std::string(proj_get_name(crs3D)),
std::string(proj_get_name(projCRS)));
auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D);
ASSERT_NE(cs, nullptr);
ObjectKeeper keeperCs(cs);
EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3);
}
{
auto crs3D = proj_crs_create_projected_3D_crs_from_2D(m_ctxt, nullptr,
projCRS, nullptr);
ObjectKeeper keeper_crs3D(crs3D);
EXPECT_NE(crs3D, nullptr);
EXPECT_EQ(proj_get_type(crs3D), PJ_TYPE_PROJECTED_CRS);
EXPECT_EQ(std::string(proj_get_name(crs3D)),
std::string(proj_get_name(projCRS)));
auto cs = proj_crs_get_coordinate_system(m_ctxt, crs3D);
ASSERT_NE(cs, nullptr);
ObjectKeeper keeperCs(cs);
EXPECT_EQ(proj_cs_get_axis_count(m_ctxt, cs), 3);
}
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_create_crs_to_crs_with_only_ballpark_transformations) {
// ETRS89 / UTM zone 31N + EGM96 height to WGS 84 (G1762)
auto P =
proj_create_crs_to_crs(m_ctxt, "EPSG:25831+5773", "EPSG:7665", nullptr);
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
auto Pnormalized = proj_normalize_for_visualization(m_ctxt, P);
ObjectKeeper keeper_Pnormalized(Pnormalized);
ASSERT_NE(Pnormalized, nullptr);
PJ_COORD coord;
coord.xyzt.x = 500000;
coord.xyzt.y = 4500000;
coord.xyzt.z = 0;
coord.xyzt.t = 0;
coord = proj_trans(Pnormalized, PJ_FWD, coord);
EXPECT_NEAR(coord.xyzt.x, 3.0, 1e-9);
EXPECT_NEAR(coord.xyzt.y, 40.65085651660555, 1e-9);
if (coord.xyzt.z != 0) {
// z will depend if the egm96_15.gtx grid is there or not
EXPECT_NEAR(coord.xyzt.z, 47.04784081844435, 1e-3);
}
}
} // namespace
+57
View File
@@ -5224,3 +5224,60 @@ TEST(crs, getNonDeprecated) {
ASSERT_EQ(list.size(), 1U);
}
}
// ---------------------------------------------------------------------------
TEST(crs, promoteTo3D) {
auto dbContext = DatabaseContext::create();
{
auto crs = GeographicCRS::EPSG_4326;
auto crs3D = crs->promoteTo3D(std::string(), nullptr);
auto crs3DAsGeog = nn_dynamic_pointer_cast<GeographicCRS>(crs3D);
ASSERT_TRUE(crs3DAsGeog != nullptr);
EXPECT_EQ(crs3DAsGeog->coordinateSystem()->axisList().size(), 3U);
EXPECT_TRUE(crs3D->promoteTo3D(std::string(), nullptr)
->isEquivalentTo(crs3D.get()));
}
{
auto crs = GeographicCRS::EPSG_4326;
auto crs3D = crs->promoteTo3D(std::string(), dbContext);
auto crs3DAsGeog = nn_dynamic_pointer_cast<GeographicCRS>(crs3D);
ASSERT_TRUE(crs3DAsGeog != nullptr);
EXPECT_EQ(crs3DAsGeog->coordinateSystem()->axisList().size(), 3U);
EXPECT_TRUE(!crs3DAsGeog->identifiers().empty());
}
{
auto crs = createProjected();
auto crs3D = crs->promoteTo3D(std::string(), nullptr);
auto crs3DAsProjected = nn_dynamic_pointer_cast<ProjectedCRS>(crs3D);
ASSERT_TRUE(crs3DAsProjected != nullptr);
EXPECT_EQ(crs3DAsProjected->coordinateSystem()->axisList().size(), 3U);
EXPECT_EQ(
crs3DAsProjected->baseCRS()->coordinateSystem()->axisList().size(),
3U);
EXPECT_TRUE(crs3D->promoteTo3D(std::string(), nullptr)
->isEquivalentTo(crs3D.get()));
}
{
auto crs = createProjected();
auto crs3D = crs->promoteTo3D(std::string(), dbContext);
auto crs3DAsProjected = nn_dynamic_pointer_cast<ProjectedCRS>(crs3D);
ASSERT_TRUE(crs3DAsProjected != nullptr);
EXPECT_EQ(crs3DAsProjected->coordinateSystem()->axisList().size(), 3U);
EXPECT_EQ(
crs3DAsProjected->baseCRS()->coordinateSystem()->axisList().size(),
3U);
EXPECT_TRUE(!crs3DAsProjected->baseCRS()->identifiers().empty());
}
{
auto crs = BoundCRS::createFromTOWGS84(
createProjected(), std::vector<double>{1, 2, 3, 4, 5, 6, 7});
auto crs3D = crs->promoteTo3D(std::string(), dbContext);
auto crs3DAsBound = nn_dynamic_pointer_cast<BoundCRS>(crs3D);
ASSERT_TRUE(crs3DAsBound != nullptr);
auto baseCRS =
nn_dynamic_pointer_cast<ProjectedCRS>(crs3DAsBound->baseCRS());
ASSERT_TRUE(baseCRS != nullptr);
EXPECT_EQ(baseCRS->coordinateSystem()->axisList().size(), 3U);
}
}
+114 -17
View File
@@ -5096,6 +5096,79 @@ TEST(wkt_parse, wkt1_esri_krovak_south_west) {
// ---------------------------------------------------------------------------
TEST(wkt_parse,
wkt1_esri_krovak_east_north_non_standard_likely_from_GDAL_wkt1) {
auto wkt = "PROJCS[\"S_JTSK_Krovak_East_North\",GEOGCS[\"GCS_S-JTSK\","
"DATUM[\"D_S_JTSK\",SPHEROID[\"Bessel_1841\","
"6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],"
"UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Krovak\"],"
"PARAMETER[\"latitude_of_center\",49.5],"
"PARAMETER[\"longitude_of_center\",24.83333333333333],"
"PARAMETER[\"azimuth\",30.28813972222222],"
"PARAMETER[\"pseudo_standard_parallel_1\",78.5],"
"PARAMETER[\"scale_factor\",0.9999],"
"PARAMETER[\"false_easting\",0],"
"PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]";
auto obj = WKTParser()
.attachDatabaseContext(DatabaseContext::create())
.createFromWKT(wkt);
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
EXPECT_EQ(crs->derivingConversion()->method()->nameStr(),
"Krovak (North Orientated)");
auto expected_wkt2 =
"PROJCRS[\"S_JTSK_Krovak_East_North\",\n"
" BASEGEODCRS[\"GCS_S-JTSK\",\n"
" DATUM[\"System of the Unified Trigonometrical Cadastral "
"Network\",\n"
" ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n"
" LENGTHUNIT[\"metre\",1]],\n"
" ID[\"EPSG\",6156]],\n"
" PRIMEM[\"Greenwich\",0,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n"
" CONVERSION[\"unnamed\",\n"
" METHOD[\"Krovak (North Orientated)\",\n"
" ID[\"EPSG\",1041]],\n"
" PARAMETER[\"Latitude of projection centre\",49.5,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",8811]],\n"
" PARAMETER[\"Longitude of origin\",24.8333333333333,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",8833]],\n"
" PARAMETER[\"Co-latitude of cone axis\",30.2881397222222,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",1036]],\n"
" PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",8818]],\n"
" PARAMETER[\"Scale factor on pseudo standard "
"parallel\",0.9999,\n"
" SCALEUNIT[\"unity\",1],\n"
" ID[\"EPSG\",8819]],\n"
" PARAMETER[\"False easting\",0,\n"
" LENGTHUNIT[\"metre\",1],\n"
" ID[\"EPSG\",8806]],\n"
" PARAMETER[\"False northing\",0,\n"
" LENGTHUNIT[\"metre\",1],\n"
" ID[\"EPSG\",8807]]],\n"
" CS[Cartesian,2],\n"
" AXIS[\"(E)\",east,\n"
" ORDER[1],\n"
" LENGTHUNIT[\"metre\",1,\n"
" ID[\"EPSG\",9001]]],\n"
" AXIS[\"(N)\",north,\n"
" ORDER[2],\n"
" LENGTHUNIT[\"metre\",1,\n"
" ID[\"EPSG\",9001]]]]";
EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected_wkt2);
}
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt1_esri_normalize_unit) {
auto wkt = "PROJCS[\"Accra_Ghana_Grid\",GEOGCS[\"GCS_Accra\","
"DATUM[\"D_Accra\",SPHEROID[\"War_Office\",6378300.0,296.0]],"
@@ -7800,6 +7873,10 @@ TEST(io, projparse_somerc) {
EXPECT_TRUE(wkt.find("\"Northing at projection centre\",5") !=
std::string::npos)
<< wkt;
auto wkt1 = crs->exportToWKT(
WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get());
EXPECT_TRUE(wkt1.find("EXTENSION") == std::string::npos) << wkt1;
}
// ---------------------------------------------------------------------------
@@ -8540,23 +8617,32 @@ TEST(io, projparse_projected_wktext) {
// ---------------------------------------------------------------------------
TEST(io, projparse_ob_tran_longlat) {
std::string input(
"+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step "
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran "
"+o_proj=longlat +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 +ellps=WGS84 "
"+step +proj=axisswap +order=2,1");
auto obj = PROJStringParser().createFromPROJString(input);
auto crs = nn_dynamic_pointer_cast<DerivedGeographicCRS>(obj);
ASSERT_TRUE(crs != nullptr);
auto op = CoordinateOperationFactory::create()->createOperation(
GeographicCRS::EPSG_4326, NN_NO_CHECK(crs));
ASSERT_TRUE(op != nullptr);
EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline +step +proj=axisswap +order=2,1 +step "
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran "
"+o_proj=longlat +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 "
"+ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg "
"+step +proj=axisswap +order=2,1");
for (const char *o_proj : {"longlat", "lonlat", "latlong", "latlon"}) {
std::string input(
"+type=crs +proj=pipeline +step +proj=axisswap +order=2,1 +step "
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran "
"+o_proj=");
input += o_proj;
input += " +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 +ellps=WGS84 "
"+step +proj=axisswap +order=2,1";
auto obj = PROJStringParser().createFromPROJString(input);
auto crs = nn_dynamic_pointer_cast<DerivedGeographicCRS>(obj);
ASSERT_TRUE(crs != nullptr);
auto op = CoordinateOperationFactory::create()->createOperation(
GeographicCRS::EPSG_4326, NN_NO_CHECK(crs));
ASSERT_TRUE(op != nullptr);
std::string expected(
"+proj=pipeline +step +proj=axisswap +order=2,1 +step "
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=ob_tran "
"+o_proj=");
expected += o_proj;
expected +=
" +o_lat_p=52 +o_lon_p=-30 +lon_0=-25 "
"+ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg "
"+step +proj=axisswap +order=2,1";
EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()),
expected);
}
}
// ---------------------------------------------------------------------------
@@ -8627,6 +8713,17 @@ TEST(io, projparse_init) {
.get()));
}
{
// Test that +no_defs +type=crs have no effect
auto obj = createFromUserInput("+init=epsg:4326 +no_defs +type=crs",
dbContext, true);
auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
ASSERT_TRUE(crs != nullptr);
auto wkt = crs->exportToWKT(WKTFormatter::create().get());
EXPECT_TRUE(wkt.find("GEODCRS[\"WGS 84\"") == 0) << wkt;
}
{
// EPSG:3040 is normally northing-easting order, but in compatibillity
// mode it will be easting-northing
+149 -7
View File
@@ -4367,6 +4367,9 @@ TEST(operation, geogCRS_to_geogCRS_context_inverse_needed) {
{
auto ctxt =
CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
ctxt->setUsePROJAlternativeGridNames(false);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem("4275"), // NTF
@@ -4394,6 +4397,9 @@ TEST(operation, geogCRS_to_geogCRS_context_inverse_needed) {
{
auto ctxt =
CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem("4275"), // NTF
authFactory->createCoordinateReferenceSystem("4258"), // ETRS89
@@ -4409,6 +4415,9 @@ TEST(operation, geogCRS_to_geogCRS_context_inverse_needed) {
{
auto ctxt =
CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem("4258"), // ETRS89
authFactory->createCoordinateReferenceSystem("4275"), // NTF
@@ -4439,7 +4448,7 @@ TEST(operation, geogCRS_to_geogCRS_context_ntv1_ntv2_ctable2) {
authFactory->createCoordinateReferenceSystem("4267"), // NAD27
authFactory->createCoordinateReferenceSystem("4269"), // NAD83
ctxt);
ASSERT_EQ(list.size(), 7U);
ASSERT_EQ(list.size(), 8U);
EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline +step +proj=axisswap +order=2,1 +step "
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=hgridshift "
@@ -4459,6 +4468,33 @@ TEST(operation, geogCRS_to_geogCRS_context_ntv1_ntv2_ctable2) {
// ---------------------------------------------------------------------------
TEST(operation, geogCRS_to_geogCRS_context_NAD27_to_WGS84) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setSpatialCriterion(
CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem("4267"), // NAD27
authFactory->createCoordinateReferenceSystem("4326"), // WGS84
ctxt);
ASSERT_EQ(list.size(), 78U);
EXPECT_EQ(list[0]->nameStr(),
"NAD27 to WGS 84 (33)"); // 1.0 m, Canada - NAD27
EXPECT_EQ(list[1]->nameStr(),
"NAD27 to WGS 84 (3)"); // 20.0 m, Canada - NAD27
EXPECT_EQ(list[2]->nameStr(),
"NAD27 to WGS 84 (79)"); // 5.0 m, USA - CONUS including EEZ
EXPECT_EQ(list[3]->nameStr(),
"NAD27 to WGS 84 (4)"); // 10.0 m, USA - CONUS - onshore
}
// ---------------------------------------------------------------------------
TEST(operation, vertCRS_to_geogCRS_context) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
@@ -4588,6 +4624,9 @@ TEST(operation, geogCRS_to_geogCRS_context_concatenated_operation) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
ctxt->setAllowUseIntermediateCRS(
CoordinateOperationContext::IntermediateCRSUse::ALWAYS);
auto list = CoordinateOperationFactory::create()->createOperations(
@@ -4615,6 +4654,9 @@ TEST(operation, geogCRS_to_geogCRS_context_same_grid_name) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem("4314"), // DHDN
authFactory->createCoordinateReferenceSystem("4258"), // ETRS89
@@ -5253,6 +5295,9 @@ TEST(operation,
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
ctxt->setAllowUseIntermediateCRS(
CoordinateOperationContext::IntermediateCRSUse::ALWAYS);
auto list = CoordinateOperationFactory::create()->createOperations(
@@ -5969,8 +6014,9 @@ TEST(operation, ETRS89_3D_to_proj_string_with_geoidgrids_nadgrids) {
src, NN_NO_CHECK(dst), ctxt);
ASSERT_EQ(list.size(), 1U);
EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad "
"+proj=pipeline "
"+step +proj=axisswap +order=2,1 "
"+step +proj=unitconvert +xy_in=deg +xy_out=rad "
"+step +inv +proj=vgridshift +grids=naptrans2008.gtx "
"+multiplier=1 "
"+step +inv +proj=hgridshift +grids=rdtrans2008.gsb "
@@ -5981,6 +6027,40 @@ TEST(operation, ETRS89_3D_to_proj_string_with_geoidgrids_nadgrids) {
// ---------------------------------------------------------------------------
TEST(operation, WGS84_to_compoundCRS_with_bound_vertCRS) {
auto authFactoryEPSG =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
// WGS 84 3D
auto src = authFactoryEPSG->createCoordinateReferenceSystem("4979");
auto objDst = PROJStringParser().createFromPROJString(
"+proj=longlat +datum=NAD83 +geoidgrids=@foo.gtx +type=crs");
auto dst = nn_dynamic_pointer_cast<CRS>(objDst);
ASSERT_TRUE(dst != nullptr);
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), std::string());
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setSpatialCriterion(
CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
src, NN_NO_CHECK(dst), ctxt);
ASSERT_GE(list.size(), 53U);
EXPECT_EQ(list[0]->nameStr(),
"Inverse of unknown to WGS84 ellipsoidal height + "
"Inverse of NAD83 to WGS 84 (1) + "
"Inverse of axis order change (2D)");
EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline "
"+step +proj=axisswap +order=2,1 "
"+step +proj=unitconvert +xy_in=deg +xy_out=rad "
"+step +inv +proj=vgridshift +grids=@foo.gtx +multiplier=1 "
"+step +proj=unitconvert +xy_in=rad +xy_out=deg");
}
// ---------------------------------------------------------------------------
static VerticalCRSNNPtr createVerticalCRS() {
PropertyMap propertiesVDatum;
propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG")
@@ -6535,6 +6615,9 @@ TEST(operation, compoundCRS_to_compoundCRS_context) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
ctxt->setSpatialCriterion(
CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION);
auto list = CoordinateOperationFactory::create()->createOperations(
@@ -6713,6 +6796,9 @@ TEST(operation, compoundCRS_to_geogCRS_3D_context) {
{
auto ctxt =
CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem(
"7406"), // NAD27 + NGVD29 height (ftUS)
@@ -6741,23 +6827,28 @@ TEST(operation, compoundCRS_to_geogCRS_3D_context) {
{
auto ctxt =
CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem(
"5500"), // NAD83(NSRS2007) + NAVD88 height
authFactory->createCoordinateReferenceSystem("4979"), // WGS 84
ctxt);
ASSERT_GE(list.size(), 1U);
EXPECT_TRUE(list[0]->hasBallparkTransformation());
EXPECT_EQ(list[0]->nameStr(),
"NAD83(NSRS2007) to WGS 84 (1) + Transformation from NAVD88 "
"height to WGS 84 (ballpark vertical transformation, without "
"ellipsoid height to vertical height correction)");
"NAD83(NSRS2007) to WGS 84 (1) + "
"Inverse of NAD83(2011) to NAVD88 height (1)");
EXPECT_EQ(list[0]->exportToPROJString(
PROJStringFormatter::create(
PROJStringFormatter::Convention::PROJ_5,
authFactory->databaseContext())
.get()),
"+proj=noop");
"+proj=pipeline +step +proj=axisswap +order=2,1 "
"+step +proj=unitconvert +xy_in=deg +xy_out=rad "
"+step +proj=vgridshift +grids=g2012bu0.gtx +multiplier=1 "
"+step +proj=unitconvert +xy_in=rad +xy_out=deg "
"+step +proj=axisswap +order=2,1");
}
}
@@ -6864,6 +6955,30 @@ TEST(operation, compoundCRS_from_WKT2_no_id_to_geogCRS_3D_context) {
// ---------------------------------------------------------------------------
TEST(operation, compoundCRS_with_non_meter_horiz_and_vertical_to_geog) {
auto objSrc = PROJStringParser().createFromPROJString(
"+proj=utm +zone=31 +datum=WGS84 +units=us-ft +vunits=us-ft +type=crs");
auto src = nn_dynamic_pointer_cast<CRS>(objSrc);
ASSERT_TRUE(src != nullptr);
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
auto list = CoordinateOperationFactory::create()->createOperations(
NN_NO_CHECK(src), authFactory->createCoordinateReferenceSystem("4326"),
ctxt);
ASSERT_EQ(list.size(), 1U);
// Check that vertical unit conversion is done just once
EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline "
"+step +proj=unitconvert +xy_in=us-ft +xy_out=m "
"+step +inv +proj=utm +zone=31 +ellps=WGS84 "
"+step +proj=unitconvert +xy_in=rad +z_in=us-ft "
"+xy_out=deg +z_out=m "
"+step +proj=axisswap +order=2,1");
}
// ---------------------------------------------------------------------------
TEST(operation, boundCRS_to_compoundCRS) {
auto objSrc = PROJStringParser().createFromPROJString(
"+proj=longlat +ellps=GRS67 +nadgrids=@foo.gsb +type=crs");
@@ -6898,6 +7013,9 @@ TEST(operation, IGNF_LAMB1_TO_EPSG_4326) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), std::string());
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
ctxt->setAllowUseIntermediateCRS(
CoordinateOperationContext::IntermediateCRSUse::ALWAYS);
auto list = CoordinateOperationFactory::create()->createOperations(
@@ -7187,6 +7305,30 @@ TEST(operation,
// ---------------------------------------------------------------------------
TEST(
operation,
createOperation_fallback_to_proj4_strings_regular_to_projliteral_with_towgs84) {
auto objSrc =
createFromUserInput("EPSG:4326", DatabaseContext::create(), false);
auto src = nn_dynamic_pointer_cast<CRS>(objSrc);
ASSERT_TRUE(src != nullptr);
auto objDst = PROJStringParser().createFromPROJString(
"+proj=utm +zone=31 +ellps=GRS80 +towgs84=1,2,3 +over +type=crs");
auto dst = nn_dynamic_pointer_cast<CRS>(objDst);
ASSERT_TRUE(dst != nullptr);
auto op = CoordinateOperationFactory::create()->createOperation(
NN_CHECK_ASSERT(src), NN_CHECK_ASSERT(dst));
ASSERT_TRUE(op != nullptr);
EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=pipeline +step +proj=axisswap +order=2,1 "
"+step +proj=unitconvert +xy_in=deg +xy_out=rad "
"+step +proj=utm +zone=31 +ellps=GRS80 +towgs84=1,2,3 +over");
}
// ---------------------------------------------------------------------------
TEST(operation, createOperation_on_crs_with_bound_crs_and_wktext) {
auto objSrc = PROJStringParser().createFromPROJString(
"+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 "
+1 -1
View File
@@ -12,7 +12,7 @@ fi
echo "$TRAVIS_SECURE_ENV_VARS"
./travis/build_docs.sh
# Only build and publish docs when changes are made on most recent maintenance branch
if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "6.1"; then
if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "6.2"; then
echo "publish website";
./travis/add_deploy_key.sh;
./travis/deploy_website.sh $TRAVIS_BUILD_DIR/docs/build /tmp;
+4 -1
View File
@@ -15,7 +15,10 @@ sudo apt-get install -qq openjdk-7-jdk
scripts/cppcheck.sh
scripts/doxygen.sh
pip3 install --user sphinxcontrib-bibtex
# Force sphinxcontrib-bibtex version to 0.4.2, because 1.0.0 requires
# sphinx >= 2.0 which is only available on Python >= 3.5, and this config
# has only 3.4
pip3 install --user sphinxcontrib-bibtex==0.4.2
pip3 install --user cpp-coveralls
./travis/docker.sh