Compare commits

...
136 Commits
Author SHA1 Message Date
Mike Taves 1da380dc0c ReadTheDocs: update output directory for artefacts, other updates 2023-01-25 21:07:51 +13:00
Mike Taves 01321f61c4 Improve docs for 6.2 2023-01-25 01:36:23 +13:00
Mike Taves 3475c76fc6 Implement ReadTheDocs for 6.2, disable other CI workflows (#3581) 2023-01-22 14:49:39 +13:00
Kristian Evers da953c042e disable website builds on commits to 6.2 branch 2020-01-01 21:47:10 +01:00
Kristian Evers 5113b00d01 isea docs: Rewrite intro and reference to reflect actual projection
Previous version was describing oea by mistake. It is also a projection
by Snyder and the isea docs was based on the paper on the oea
projection. This commit fixes that.
2019-12-09 11:50:00 +01:00
Kristian Evers 4c39aa63fd Add intro and table to isea doc page 2019-12-07 19:48:35 +01:00
Even Rouault 4e356ecad6 Doc: resource_files.rst: remove mentions of no longer existing esri, epsg and IGNF init-files 2019-12-06 15:04:54 +01:00
Even Rouault 90189a594d Doc: resource_files.rst: document recent Win32 specific addition (https://github.com/OSGeo/PROJ/pull/1755) regarding how resource files are looked for 2019-12-06 15:04:49 +01:00
Even Rouault a049985cac Doc: resource_files.rst: document where resource files are looked for (without recent Win32 specific addition) 2019-12-06 15:04:44 +01:00
Jeff McKenna 8d0b84bd72 [Docs] Minor changes regarding datumgrid pages (#1751) (#1760)
Update README, install.rst and resource_files.rst
2019-11-30 22:50:16 +01:00
Even Rouault e8d2f811b4 Doc: clarifications regarding grid packages (fixes #1751)
- Content partly borrowed from @kbevers ' suggestions of
  https://github.com/OSGeo/PROJ/issues/1751#issuecomment-558976968

- Remove mention about Swiss grids. Included in the europe package

- Remove section about HARN / HPGN grids. Those have been included
  in the north-america package, and there is no longer any point in
  mentionning the particularities of how ancient ones had to be
  used with PROJ.4

- Remove section about obsolete proj_defs.dat
2019-11-30 18:22:51 +01:00
Kristian Evers fb9c269f4f Replace OSGeo Community logo with OSGeo Project logo
PROJ is now a proper OSGeo project, let's advertise it as such!
2019-11-28 14:58:24 +01:00
Kristian Evers ac2762b581 Merge branch '6.2' of https://github.com/OSGeo/proj.4 into 6.2 2019-11-28 14:58:14 +01:00
Even Rouault bce4b158ab normalizeForVisualization() and other methods applying on a ProjectedCRS: do not mess the derivingConversion object of the original object (fixes #1736)
normalizeForVisualization(), promoteTo3D(), demoteTo2D(), alterGeodeticCRS(),
alterCSLinearUnit() and alterParametersLinearUnit() all used the object
returned by derivingConversionRef() to create a new ProjectedCRS. While doing
so, this caused the derivingConversion of the original object to have its
targetCRS set to the object returned by normalizeForVisualization() and similar.
If that object died, then the weak pointer would be reset, and the original
ProjectedCRS() has now its derivingConversionRef()->targetCRS() nullptr

So bottom line is use derivingConversion() for anything that is not pure
reading !!!

This is confirmed to be the fix for the QGIS scenario in
https://github.com/qgis/QGIS/issues/30569#issuecomment-540060919

In QGIS use case, the issue arised when using a projected CRS with a non-GIS
friendly axis (that is where normalizeForVisualization() created a new projectedCRS)
2019-11-25 13:14:35 +01:00
Even Rouault 6b067b1190 travis/osx/before_install.sh: attempt to fix 'pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.' 2019-11-22 15:29:43 +01:00
Even Rouault 8fd8024518 Doc: configure the 'Edit on GitHub' button 2019-11-22 13:30:00 +01:00
Even Rouault e4045d66ec projjson.rst: typo fix 2019-11-21 21:17:35 +01:00
Even Rouault 6ed02f5a84 Doc: add a about_core.rst file to avoid duplication between index.rst and about.rst 2019-11-21 21:17:35 +01:00
Even Rouault 5d87ea0e97 Doc: update status of RFC-2 [skip appveyor] 2019-11-19 15:27:43 +01:00
Even Rouault 2ab603d262 data/ITRF2014: replace errouneous minus Unicode character by its ASCII version
Affected parameters of Plate Motion Models.
Spotted by Xavier Collilieux on https://lists.osgeo.org/pipermail/proj/2019-November/009011.html
2019-11-18 21:54:08 +01:00
Even Rouault d0b5e070b9 schemas/v0.2/projjson.schema.json: update (just for the sake of having a refreshed online version. Does not concern 6.2 branch itself)
[skip appveyor]
2019-11-14 17:57:38 +01:00
Even Rouault a13e7646a9 Merge pull request #1727 from OSGeo/backport-1726-to-6.2
[Backport 6.2] Fix proj_assign_context()/pj_set_ctx() with pipelines and alternative coord operations
2019-11-13 00:04:52 +01:00
Guillaume Lostis d5e5c96b46 Minor typo fix in docs faq.rst 2019-11-12 17:38:46 +01:00
Even Rouault f970636daa Fix proj_assign_context()/pj_set_ctx() with pipelines and alternative coord operations
Fixes https://github.com/OSGeo/gdal/issues/1989

pj_set_ctx() only changes the context to the main object. It should also
recurse down to the steps of the pipeline and the alternative coordinate
operations hold in alternativeCoordinateOperations

In the GDAL use case with multithreaded reprojection, and objects being transferred
between thread, this would cause a failed coordinate transformation to affect
an unrelated transformation of another thread...
2019-11-12 16:05:03 +01:00
Even Rouault 67ee557a66 Merge pull request #1723 from OSGeo/backport-1722-to-6.2
[Backport 6.2] Doc: document oddity related to identification of CRS from ESRI WKT
2019-11-12 00:53:03 +01:00
Even Rouault 8fdd512ea8 Doc: document oddity related to identification of CRS from ESRI WKT
Or more generally formulations that don't have an explicit axis order.
Refs https://github.com/pyproj4/pyproj/issues/475

projinfo 'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]'
returns EPSG:4326 with 100% confidence.
But its axis order is not the same as EPSG:4326.

I've pondered about this, like decreasing the confidence of the match,
but this would have downstream effects on GDAL (shapefiles with the
above content in a .prj would no longer be identified as EPSG:4326).
So for now, document that oddity.
2019-11-09 12:22:48 +00:00
Mike Taves 6e58a6f906 README.md: update badges to specify branch [ci skip] 2019-11-08 15:28:53 +13:00
Kristian Evers 564d0a9fcc [Backport 6.2] updated docker URLs and added Fedora entry (#1720)
[Backport 6.2] updated docker URLs and added Fedora entry
2019-11-07 15:05:05 +01:00
Markus Neteler f0e9f1e2f0 updated docker URLs and added Fedora entry 2019-11-07 09:51:32 +00:00
Kristian Evers da5bd4b704 Doc: fix formatting in usage/transformation.rst 2019-11-05 08:23:08 +01:00
Even Rouault 86c24e0bcd Add schemas/v0.2/projjson.schema.json 2019-11-04 22:38:18 +01:00
Even Rouault 2b96d78884 Merge pull request #1715 from OSGeo/backport-1712-to-6.2
[Backport 6.2] Doc: fixes in usage/transformation.rst
2019-11-04 22:36:38 +01:00
Even Rouault 2637f3c52c Doc: fixes in usage/transformation.rst
- Section about cs2cs no longer applies to PROJ 6. Ammended to underline
  that.
- Remove no longer relevant/unclear caveats.
2019-11-04 12:21:59 +00:00
Even Rouault 29c2c5cfbd Merge pull request #1713 from OSGeo/backport-1711-to-6.2
[Backport 6.2] createOperations(): in some circumstances we wrongly promoted a Helmert geog2D transformation to a geog3D
2019-11-03 18:16:46 +01:00
Even Rouault 97a468bbbe createOperations(): in some circumstances we wrongly promoted a Helmert geog2D transformation to a geog3D
Fixes for example EPSG:4979 to EPSG:2189, as raised in
https://github.com/OSGeo/gdal/issues/1972#issuecomment-548814354
2019-11-03 14:33:55 +00:00
Kristian Evers f95d199570 Bump version number of website 2019-11-01 19:40:39 +01:00
Kristian Evers 1e6d233d05 Update website with 6.2.1 release 2019-11-01 19:40:16 +01:00
Even Rouault c89abf2873 Merge pull request #1706 from OSGeo/backport-1701-to-6.2
[Backport 6.2] Document PROJJSON
2019-10-31 16:15:46 +01:00
Even Rouault 72dd7b0fbb Merge pull request #1705 from OSGeo/backport-1702-to-6.2
[Backport 6.2] createFromWkt(): be tolerant to missing scale_factor parameter (fixes #1700)
2019-10-31 00:49:39 +01:00
Even Rouault 970946b566 createFromWkt(): be tolerant to missing scale_factor parameter (fixes #1700)
This is invalid WKT, but GDAL 2.4 used to accept it and make a reasonable
use of it...

Currently we default it to 0 which is non sensical. Better use 1 as GDAL 2.4
did, and emit a warning.

Other fix: proj_create_from_wkt() was documented to operate by default in
non-strict validation mode, but it was actually in strict mode. So do as
documented.
2019-10-30 16:49:39 +00:00
Even Rouault 1acb10c65f Doc: add a redirects extension, and make a projjson.html redirect at the top to its current location 2019-10-30 16:41:10 +00:00
Even Rouault 0d96216201 Document PROJJSON
More could probably be written, but at least this can serve as a
landing/reference page for other documents/specifications to point to.
2019-10-30 15:22:17 +00:00
Even Rouault 45b2d5ff3b news.rst: fix hyperlink 2019-10-29 23:37:42 +01:00
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 2bc1e2e1a9 Add PROJ log
Courtesy of Sylvain Beorchia. The logo is put under the CC-0 license.
2019-10-07 13:46:36 +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
118 changed files with 4626 additions and 845 deletions
+2
View File
@@ -98,6 +98,8 @@ install_manifest.txt
tmp_breathe
/docs/.doxygen_up_to_date
/docs/build
/docs/plot/images
/latex
# m4
m4/libtool.m4
+50
View File
@@ -0,0 +1,50 @@
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
build:
os: "ubuntu-22.04"
tools:
python: "mambaforge-4.10"
jobs:
post_checkout:
# Cancel building pull requests when there aren't changed in the docs directory or YAML file.
# You can add any other files or directories that you'd like here as well,
# like your docs requirements file, or other files that will change your docs build.
#
# If there are no changes (git diff exits with 0) we force the command to return with 183.
# This is a special exit code on Read the Docs that will cancel the build immediately.
- |
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/6.2 -- docs/ .readthedocs.yaml;
then
exit 183;
fi
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | grep -viq "skip ci") || exit 183
pre_build:
- ./docs/rtd/pre_build.sh
- ./scripts/doxygen.sh
- ./docs/rtd/plot.sh
post_build:
- ./docs/rtd/post_build.sh
apt_packages:
- cmake
- ninja-build
- g++
- sqlite3
- libsqlite3-dev
formats:
- pdf
- epub
conda:
environment: docs/environment.yml
sphinx:
configuration: docs/source/conf.py
fail_on_warning: true
+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
+3
View File
@@ -243,3 +243,6 @@ If the previous active version was, let's say, 6.1 and the new version is, let's
then checkout 6.1 branch, and in travis/after_success.sh, remove the code
that causes commits to 6.1 to cause a website refresh, that is remove the
code under `if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "6.1"; then`.
Also edit docs/source/conf.py to change the active branch for documentation
in the `github_version` variable.
+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
-------------------
+19 -15
View File
@@ -1,10 +1,11 @@
# PROJ
[![Travis Status](https://travis-ci.com/OSGeo/PROJ.svg?branch=master)](https://travis-ci.com/OSGeo/PROJ)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/por8r52bjt8ocga9?svg=true)](https://ci.appveyor.com/project/OSGeo/PROJ)
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/PROJ/badge.svg?branch=master)](https://coveralls.io/github/OSGeo/PROJ?branch=master)
[![Travis Status](https://travis-ci.com/OSGeo/PROJ.svg?branch=6.2)](https://travis-ci.com/OSGeo/PROJ)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/OSGeo/PROJ?branch=6.2&svg=true)](https://ci.appveyor.com/project/OSGeo/PROJ?branch=6.2)
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/PROJ/badge.svg?branch=6.2)](https://coveralls.io/github/OSGeo/PROJ?branch=6.2)
[![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.
@@ -22,18 +23,21 @@ See the NEWS file for changes between versions.
The following command line utilities are included in the PROJ package:
- proj, for cartographic projection of geodetic coordinates
- cs2cs, for transformation from one CRS to another CRS.
- geod, for geodesic (great circle) computations.
- cct, for generic Coordinate Conversions and Transformations.
- gie, the Geospatial Integrity Investigation Environment.
- projinfo, for geodetic object and coordinate operation queries
- `proj`: for cartographic projection of geodetic coordinates
- `cs2cs`: for transformation from one CRS to another CRS.
- `geod`: for geodesic (great circle) computations.
- `cct`: for generic Coordinate Conversions and Transformations.
- `gie`: the Geospatial Integrity Investigation Environment.
- `projinfo`: for geodetic object and coordinate operation queries
> More information on the utilities can be found on the [PROJ website](https://proj.org/apps).
## Installation
### Build dependencies
PROJ requires C and C++11 compilers.
It also requires SQLite3 (headers, library and executable).
It also requires SQLite3 (headers, library and executable). The minimum
version of SQLite3 required is 3.11
### Building with CMake
@@ -104,14 +108,14 @@ which will generate a configure script that can be used as described above.
### Distribution files and format
Sources are distributed in one or more files. The principle elements
of the system are in a compress tar file named `proj-x.y.z.tar.gz` where
"x" will indicate major release number, "y" indicates minor release
number and "z" indicates the patch number of the release.
of the system are stored in a compressed tar file named `proj-x.y.z.tar.gz` where
"x" will indicate the major release number, "y" indicates the minor release
number, and "z" indicates the patch number of the release.
In addition to the PROJ software package, distributions of datum
conversion grid files and PROJ parameter files are also available.
The grid package is distributed under the name `proj-datumgrid-x.y.zip`,
where "x" is the major release version and "y" the minor release
where "x" is the major release version and "y" is the minor release
version numbers. Similarly regional packages are distributed. The
regional packages contain resources that are not essential to the
functionality of PROJ but still of value to users in the region
@@ -119,7 +123,7 @@ specific to the package. All grids that were in proj-datumgrids-1.6
remain in proj-datumgrids-1.7; the regional datumgrid files contain
grids for datums not previously supported (prior to PROJ 5.0.0).
The resource packages can be downloaded from the PROJ.4 website.
The resource packages can be downloaded from the [PROJ website](https://proj.org/download.html).
More info on the contents of the various resource packages can be
found at the
+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)
+9 -9
View File
@@ -32,24 +32,24 @@
# Z. Altamimi et al, 2017, ITRF2014 plate motion model,
# doi: 10.1093/gji/ggx136
<ANTA> +proj=helmert +drx=−0.000248 +dry=−0.000324 +drz=0.000675 +convention=position_vector
<ANTA> +proj=helmert +drx=-0.000248 +dry=-0.000324 +drz=0.000675 +convention=position_vector
<ARAB> +proj=helmert +drx=0.001154 +dry=−0.000136 +drz=0.001444 +convention=position_vector
<ARAB> +proj=helmert +drx=0.001154 +dry=-0.000136 +drz=0.001444 +convention=position_vector
<AUST> +proj=helmert +drx=0.001510 +dry=0.001182 +drz=0.001215 +convention=position_vector
<EURA> +proj=helmert +drx=−0.000085 +dry=−0.000531 +drz=0.000770 +convention=position_vector
<EURA> +proj=helmert +drx=-0.000085 +dry=-0.000531 +drz=0.000770 +convention=position_vector
<INDI> +proj=helmert +drx=0.001154 +dry=−0.000005 +drz=0.001454 +convention=position_vector
<INDI> +proj=helmert +drx=0.001154 +dry=-0.000005 +drz=0.001454 +convention=position_vector
<NAZC> +proj=helmert +drx=−0.000333 +dry=−0.001544 +drz=0.001623 +convention=position_vector
<NAZC> +proj=helmert +drx=-0.000333 +dry=-0.001544 +drz=0.001623 +convention=position_vector
<NOAM> +proj=helmert +drx=0.000024 +dry=-0.000694 +drz=-0.000063 +convention=position_vector
<NUBI> +proj=helmert +drx=0.000099 +dry=−0.000614 +drz=0.000733 +convention=position_vector
<NUBI> +proj=helmert +drx=0.000099 +dry=-0.000614 +drz=0.000733 +convention=position_vector
<PCFC> +proj=helmert +drx=−0.000409 +dry=0.001047 +drz=-0.002169 +convention=position_vector
<PCFC> +proj=helmert +drx=-0.000409 +dry=0.001047 +drz=-0.002169 +convention=position_vector
<SOAM> +proj=helmert +drx=−0.000270 +dry=−0.000301 +drz=−0.000140 +convention=position_vector
<SOAM> +proj=helmert +drx=-0.000270 +dry=-0.000301 +drz=-0.000140 +convention=position_vector
<SOMA> +proj=helmert +drx=−0.000121 +dry=−0.000794 +drz=0.000884 +convention=position_vector
<SOMA> +proj=helmert +drx=-0.000121 +dry=-0.000794 +drz=0.000884 +convention=position_vector
+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);
+17
View File
@@ -0,0 +1,17 @@
name: proj
channels:
- conda-forge
dependencies:
- descartes
- doxygen < 1.8.17
- geojson
- matplotlib
- shapely < 1.8
- pip
- pip:
- breathe < 4.15
- Jinja2 < 3.1
- pybtex
- sphinx < 3
- sphinx-rtd-theme < 1.0
- sphinxcontrib-bibtex
Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

-86
View File
@@ -1,86 +0,0 @@
name: proj
channels:
- defaults
dependencies:
- blas=1.0=mkl
- bzip2=1.0.6=h1de35cc_5
- ca-certificates=2018.03.07=0
- cairo=1.14.12=hc4e6be7_4
- certifi=2018.8.24=py37_1
- click=6.7=py37_0
- click-plugins=1.0.3=py37_1
- cligj=0.4.0=py37_1
- curl=7.61.0=ha441bb4_0
- cycler=0.10.0=py37_0
- descartes=1.1.0=py37_0
- expat=2.2.6=h0a44026_0
- fiona=1.7.12=py37h0dff353_0
- fontconfig=2.13.0=h5d5b041_1
- freetype=2.9.1=hb4e5f40_0
- freexl=1.0.5=h1de35cc_0
- gdal=2.2.4=py37h6440ff4_1
- geos=3.6.2=h5470d99_2
- gettext=0.19.8.1=h15daf44_3
- giflib=5.1.4=h1de35cc_1
- glib=2.56.2=hd9629dc_0
- hdf4=4.2.13=h39711bb_2
- hdf5=1.10.2=hfa1e0ec_1
- icu=58.2=h4b95b61_1
- intel-openmp=2019.0=118
- jpeg=9b=he5867d9_2
- json-c=0.13.1=h3efe00b_0
- kealib=1.4.7=h40e48e4_6
- kiwisolver=1.0.1=py37h0a44026_0
- krb5=1.16.1=h24a3359_6
- libboost=1.67.0=hebc422b_4
- libcurl=7.61.0=hf30b1f0_0
- libcxx=4.0.1=h579ed51_0
- libcxxabi=4.0.1=hebd6815_0
- libdap4=3.19.1=h3d3e54a_0
- libedit=3.1.20170329=hb402a30_2
- libffi=3.2.1=h475c297_4
- libgdal=2.2.4=h7b1ea53_1
- libgfortran=3.0.1=h93005f0_2
- libiconv=1.15=hdd342a3_7
- libkml=1.3.0=hbe12b63_4
- libnetcdf=4.6.1=h4e6abe9_1
- libpng=1.6.34=he12f830_0
- libpq=10.5=hf30b1f0_0
- libspatialite=4.3.0a=ha12ebda_19
- libssh2=1.8.0=h322a93b_4
- libtiff=4.0.9=hcb84e12_2
- libuuid=1.0.3=h6bb4b03_2
- libxml2=2.9.8=hab757c2_1
- matplotlib=2.2.3=py37h54f8f79_0
- mkl=2019.0=118
- mkl_fft=1.0.4=py37h5d10147_1
- mkl_random=1.0.1=py37h5d10147_1
- munch=2.3.2=py37_0
- ncurses=6.1=h0a44026_0
- numpy=1.15.1=py37h6a91979_0
- numpy-base=1.15.1=py37h8a80b8c_0
- openjpeg=2.3.0=hb95cd4c_1
- openssl=1.0.2p=h1de35cc_0
- pcre=8.42=h378b8a2_0
- pip=10.0.1=py37_0
- pixman=0.34.0=hca0a616_3
- poppler=0.65.0=ha097c24_1
- poppler-data=0.4.9=0
- proj4=5.0.1=h1de35cc_0
- pyparsing=2.2.0=py37_1
- python=3.7.0=hc167b69_0
- python-dateutil=2.7.3=py37_0
- pytz=2018.5=py37_0
- readline=7.0=h1de35cc_5
- setuptools=40.2.0=py37_0
- shapely=1.6.4=py37h20de77a_0
- six=1.11.0=py37_1
- sqlite=3.24.0=ha441bb4_0
- tk=8.6.8=ha441bb4_0
- tornado=5.1=py37h1de35cc_0
- wheel=0.31.1=py37_0
- xerces-c=3.2.1=h44e365a_0
- xz=5.2.4=h1de35cc_4
- zlib=1.2.11=hf3cbc9b_2
prefix: /usr/local/miniconda3/envs/proj
Regular → Executable
+110 -58
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
'''
Plot map data in different projections supported by PROJ.4
Plot map data in different projections supported by PROJ.
Call with:
@@ -41,28 +42,31 @@ or "line". The rest of the inputs are fairly free form.
Change PROJ to path on your local system before running the script.
'''
from __future__ import print_function
from __future__ import division
import argparse
import os
import os.path
import shutil
import sys
import json
import subprocess
import functools
from pathlib import Path
import geojson
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import fiona
from shapely.geometry import Polygon
from shapely.geometry import MultiPolygon
from shapely.geometry import MultiPolygon, Polygon, box as Box
from shapely.geometry import shape
from shapely.ops import transform
from descartes import PolygonPatch
PROJ = '../../src/proj'
PROJ_LIB = '../../data'
PROJ_COMMAND = os.environ.get('PROJ_EXE', '../../src/proj')
if not os.path.exists(PROJ_COMMAND):
PROJ = shutil.which('proj')
if PROJ is None:
raise ValueError("specify PROJ_EXE or modify PATH to find proj")
else:
PROJ = PROJ_COMMAND
PROJ_LIB = os.environ.get('PROJ_LIB', '../../data')
LINE_LOW = 'data/coastline.geojson'
LINE_MED = 'data/coastline50.geojson'
@@ -160,9 +164,9 @@ def project(coordinates, proj_string, in_radians=False):
try:
proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
env={'PROJ_LIB': os.path.abspath(PROJ_LIB)})
except FileNotFoundError:
print("'proj' binary not found, please update PROJ constant in plot.py "
"to point to your local 'proj' binary")
except FileNotFoundError as e:
print("'proj' binary not found, set the PROJ_EXE environment variable "
"to point to your local 'proj' binary --%s--" % e)
exit(1)
stdout, _ = proc.communicate(coordinates.tobytes(order='C'))
@@ -223,7 +227,10 @@ def resample_polygon(polygon):
'''
Use interp_coords() to resample (multi)polygons.
'''
xy = polygon.exterior.coords.xy
try:
xy = polygon.exterior.coords.xy
except AttributeError: #no xy's
return polygon
ext = interp_coords(xy, 2)
# interiors
rings = []
@@ -232,27 +239,46 @@ def resample_polygon(polygon):
return Polygon(ext, rings)
def plot_with_interruptions(axes, x, y, delta_cut=1e100, **kwargs):
"""
Plot x/y with proper splitting for interrupted projections.
"""
_x = np.atleast_1d(x)
_y = np.atleast_1d(y)
dx = np.nan_to_num(_x[1: ]) - np.nan_to_num(_x[0: -1])
dy = np.nan_to_num(_y[1: ]) - np.nan_to_num(_y[0: -1])
split, = ((np.abs(dx) > delta_cut) | (np.abs(dy) > delta_cut)).nonzero()
split = np.append(split, _x.size - 1)
split += 1
last_part = 0
for part in split:
axes.plot(x[last_part: part],
y[last_part: part],
**kwargs)
last_part = part
def plotproj(plotdef, data, outdir):
'''
Plot map.
'''
axes = plt.axes()
bounds = (plotdef['lonmin'], plotdef['latmin'], plotdef['lonmax'], plotdef['latmax'])
for geom in data.filter(bbox=bounds):
temp_pol = shape(geom['geometry'])
box = Box(
plotdef['lonmin'], plotdef['latmin'],
plotdef['lonmax'], plotdef['latmax'])
for feat in data["features"]:
geom = shape(feat["geometry"])
if not geom.intersects(box):
continue
box = Polygon([
(plotdef['lonmin'], plotdef['latmin']),
(plotdef['lonmin'], plotdef['latmax']),
(plotdef['lonmax'], plotdef['latmax']),
(plotdef['lonmax'], plotdef['latmin']),
])
temp_pol = temp_pol.intersection(box)
temp_pol = geom.intersection(box)
if plotdef['type'] == 'poly':
if isinstance(temp_pol, MultiPolygon):
polys = [resample_polygon(polygon) for polygon in temp_pol]
polys = [resample_polygon(polygon) for polygon in temp_pol.geoms]
pol = MultiPolygon(polys)
else:
pol = resample_polygon(temp_pol)
@@ -263,11 +289,15 @@ def plotproj(plotdef, data, outdir):
proj_geom = transform(trans, pol)
if plotdef['type'] == 'poly':
patch = PolygonPatch(proj_geom, fc=COLOR_LAND, zorder=0)
axes.add_patch(patch)
try:
patch = PolygonPatch(proj_geom, fc=COLOR_LAND, zorder=0)
axes.add_patch(patch)
except TypeError:
pass
else:
x, y = proj_geom.xy
axes.plot(x, y, color=COLOR_COAST, linewidth=0.5)
plot_with_interruptions(axes, x, y, color=COLOR_COAST, linewidth=0.5,
delta_cut=plotdef.get('delta_cut', 1e100))
# Plot frame
frame = [
@@ -278,7 +308,8 @@ def plotproj(plotdef, data, outdir):
line = project(line, plotdef['projstring'])
x = line[:, 0]
y = line[:, 1]
axes.plot(x, y, '-k')
plot_with_interruptions(axes, x, y, color='black', linestyle='-',
delta_cut=plotdef.get('delta_cut', 1e6))
graticule = build_graticule(
plotdef['lonmin'],
@@ -292,7 +323,28 @@ def plotproj(plotdef, data, outdir):
feature = project(feature, plotdef['projstring'])
x = feature[:, 0]
y = feature[:, 1]
axes.plot(x, y, color=COLOR_GRAT, linewidth=0.4)
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
delta_cut=plotdef.get('delta_cut', 1e6))
# Plot interrupted boundaries if necessary
interrupted_lines = []
if 'top_interrupted_lons' in plotdef:
for lon in plotdef['top_interrupted_lons']:
for delta in [-0.0001, 0.0001]:
merid = meridian(lon + delta, 0.0, plotdef['latmax'])
interrupted_lines.append(project(merid, plotdef['projstring']))
if 'bottom_interrupted_lons' in plotdef:
for lon in plotdef['bottom_interrupted_lons']:
for delta in [-0.0001, 0.0001]:
merid = meridian(lon + delta, plotdef['latmin'], 0)
interrupted_lines.append(project(merid, plotdef['projstring']))
for line in interrupted_lines:
x = line[:, 0]
y = line[:, 1]
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
delta_cut=plotdef.get('delta_cut', 1e100))
# Switch off the axis lines...
plt.axis('off')
@@ -311,9 +363,12 @@ def plotproj(plotdef, data, outdir):
# Make sure the plot is not stretched
axes.set_aspect('equal')
if not os.path.exists(outdir):
os.makedirs(outdir)
plt.savefig(outdir + '/' + plotdef['filename'],
outdir = Path(outdir)
if not outdir.exists():
outdir.mkdir(parents=True)
if not outdir.is_dir():
raise OSError("outdir is not a directory")
plt.savefig(outdir / plotdef['filename'],
dpi=400,
bbox_inches='tight')
@@ -323,36 +378,22 @@ def plotproj(plotdef, data, outdir):
plt.close()
def main():
def main(plotdefs, outdir, plots=[]):
'''
Main function of plotting script.
Parses json-file with plot setups and runs the plotting
for each plot setup.
'''
plotdefs = json.loads(Path(plotdefs).read_text())
data = {
('line', 'low'): fiona.open(LINE_LOW),
('line', 'med'): fiona.open(LINE_MED),
('poly', 'low'): fiona.open(POLY_LOW),
('poly', 'med'): fiona.open(POLY_MED),
('line', 'low'): geojson.loads(Path(LINE_LOW).read_text()),
('line', 'med'): geojson.loads(Path(LINE_MED).read_text()),
('poly', 'low'): geojson.loads(Path(POLY_LOW).read_text()),
('poly', 'med'): geojson.loads(Path(POLY_MED).read_text()),
}
if os.path.exists(sys.argv[1]):
# first argument is the JSON plot definition setup file
with open(sys.argv[1]) as plotsetup:
plotdefs = json.load(plotsetup)
else:
raise ValueError('No plot definition file entered')
plots = []
# second argument is the output dir
outdir = sys.argv[2]
# subsecond arguments are (optional) names of plot in plotdef.json
if len(sys.argv) > 3:
plots = sys.argv[3:len(sys.argv)]
for i, plotdef in enumerate(plotdefs):
if plots != [] and plotdef['name'] not in plots:
continue
@@ -364,9 +405,20 @@ def main():
plotproj(plotdef, data[(plotdef['type'], plotdef['res'])], outdir)
for key in data:
data[key].close()
if __name__ == "__main__":
sys.exit(main())
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument(
'plotdefs',
help='A JSON file with setup for each auto-generated plot')
parser.add_argument(
'outdir',
help='Directory to put the plots in.')
parser.add_argument(
'plots', nargs='*',
help='A list of plot names within the plotdefs file. '
'More than one plotname can be given at once.')
args = parser.parse_args()
sys.exit(main(**vars(args)))
-2
View File
@@ -1,2 +0,0 @@
python3 plot.py plotdefs.json images/
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
set -e
export PATH="$HOME/.local/bin:$PATH"
export PROJ_LIB="$HOME/.local/share/proj"
cd docs/plot
python plot.py plotdefs.json images
cd ../..
mkdir -p docs/source/operations/projections/images/
cp -r docs/plot/images/* docs/source/operations/projections/images/
+19
View File
@@ -0,0 +1,19 @@
#!/bin/sh
set -e
# https://github.com/readthedocs/readthedocs.org/pull/9888
READTHEDOCS_OUTPUT="_readthedocs"
find ${READTHEDOCS_OUTPUT} -type d
READTHEDOCS_OUTPUT_HTML="${READTHEDOCS_OUTPUT}/html"
# Undoes the hack done in scripts/doxygen.sh
sed "s/io::Convention_/io::Convention/g" < ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html | sed "s/>Convention_/>Convention/g" | sed "s/_WKT2/WKT2/g" | sed "s/_WKT1/WKT1/g" > ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html.tmp
mv ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html.tmp ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html
# Undoes the hacks of scripts/generate_breathe_friendly_general_doc.py
sed "s/<em class=\"property\">namespace <\/em>//g" < ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/cpp_general.html > ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/cpp_general.html.tmp
mv ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/cpp_general.html.tmp ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/cpp_general.html
# Copy JSON schemas for public consumption
READTHEDOCS_OUTPUT_SCHEMAS="${READTHEDOCS_OUTPUT_HTML}/schemas"
cp -r schemas ${READTHEDOCS_OUTPUT_SCHEMAS}
+9
View File
@@ -0,0 +1,9 @@
#!/bin/sh
set -e
mkdir build
cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DPROJ_TESTS=OFF -DCMAKE_INSTALL_PREFIX=$HOME/.local ..
ninja install
+39
View File
@@ -0,0 +1,39 @@
import os
# https://tech.signavio.com/2017/managing-sphinx-redirects
template="""<html>
<head>
<meta http-equiv="refresh" content="1; url=%s" />
<script>
window.location.href = "%s"
</script>
</head>
</html>"""
def gather_redirects():
output = {}
output.update({ 'projjson.html' : 'usage/projjson.html' })
return output
from shutil import copyfile
# copy legacy redirects
def copy_legacy_redirects(app, docname): # Sphinx expects two arguments
if app.builder.name == 'html':
for key in app.config.redirect_files:
src = key
tgt = app.config.redirect_files[key]
html = template % (tgt, tgt)
with open(os.path.join(app.outdir, src), 'wb') as f:
f.write(html.encode('utf-8'))
f.close()
def setup(app):
app.add_config_value('redirect_files', {}, 'html')
app.connect('build-finished', copy_legacy_redirects)
return { 'parallel_read_safe': False, 'parallel_write_safe': True }
+6 -20
View File
@@ -2,27 +2,11 @@
About
###############################################################################
PROJ is a generic coordinate transformation software that transforms geospatial
coordinates from one coordinate reference system (CRS) to another. This
includes cartographic projections as well as geodetic transformations.
.. include:: about_core.rst
PROJ includes :ref:`command line applications<apps>` for easy conversion of
coordinates from text files or directly from user input. In addition to the
command line utilities PROJ also exposes an
:ref:`application programming interface<reference>`, or API in short. The API
lets developers use the functionality of PROJ in their own software without having
to implement similar functionality themselves.
PROJ started purely as a cartography application letting users convert geodetic
coordinates into projected coordinates using a number of different cartographic
projections. Over the years, as the need has become apparent, support for datum
shifts has slowly worked its way into PROJ as well. Today PROJ supports more
than a hundred different map projections and can transform coordinates between
datums using all but the most obscure geodetic techniques.
.. image:: ../images/OSGeo_community.png
:scale: 30 %
:alt: OSGeo Community
.. image:: ../images/OSGeo_project.png
:scale: 30 %
:alt: OSGeo Project
Citation
-------------------------------------------------------------------------------
@@ -31,6 +15,8 @@ Citation
.. include:: ../../CITATION
.. _license:
License
-------------------------------------------------------------------------------
+18
View File
@@ -0,0 +1,18 @@
PROJ is a generic coordinate transformation software that transforms geospatial
coordinates from one coordinate reference system (CRS) to another. This
includes cartographic projections as well as geodetic transformations. PROJ
is released under the :ref:`X/MIT open source license <license>`
PROJ includes :ref:`command line applications<apps>` for easy conversion of
coordinates from text files or directly from user input. In addition to the
command line utilities PROJ also exposes an
:ref:`application programming interface<reference>`, or API in short. The API
lets developers use the functionality of PROJ in their own software without having
to implement similar functionality themselves.
PROJ started purely as a cartography application letting users convert geodetic
coordinates into projected coordinates using a number of different cartographic
projections. Over the years, as the need has become apparent, support for datum
shifts has slowly worked its way into PROJ as well. Today PROJ supports more
than a hundred different map projections and can transform coordinates between
datums using all but the most obscure geodetic techniques.
+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
+1 -1
View File
@@ -6,7 +6,7 @@ PROJ RFC 2: Initial integration of "GDAL SRS barn" work
:Author: Even Rouault
:Contact: even.rouault at spatialys.com
:Status: Adopted (not yet merged into master)
:Status: Adopted, implemented in PROJ 6.0
:Initial version: 2018-10-09
:Last Updated: 2018-10-31
+41 -17
View File
@@ -14,12 +14,12 @@
import sys
import os
import datetime
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('_extensions'))
import bibstyle
@@ -35,11 +35,15 @@ extensions = [
'sphinx.ext.mathjax',
'sphinxcontrib.bibtex',
'breathe',
'redirects',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# BibTeX configuration
bibtex_bibfiles = ['references.bib']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md']
@@ -59,28 +63,24 @@ project = 'PROJ'
# See CITATION file
title = 'PROJ coordinate transformation software library'
author = 'PROJ contributors'
now = datetime.datetime.now()
copyright = u'1983-{0}'.format(now.year)
copyright = u'1983-2019'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
version = '6.2.0'
# use same |release| as |version|
release = version
version = '6.2'
release = '6.2.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# language = 'en'
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
today = 'November 2019'
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
@@ -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
@@ -156,10 +168,16 @@ html_theme_options = {}
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
htm_css_files = [
'theme_overrides.css', # override wide tables in RTD theme
]
html_context = {
'css_files': [
'_static/theme_overrides.css', # override wide tables in RTD theme
],
'display_github': True,
'theme_vcs_pageview_mode': 'edit',
'github_user': 'OSGeo',
'github_repo': 'PROJ',
'github_version': '/6.2/docs/source/',
}
# Add any extra paths that contain custom files (such as robots.txt or
@@ -232,6 +250,8 @@ preamble = r"""
\ifdefined\DeclareUnicodeCharacter
\DeclareUnicodeCharacter{2032}{$'$}% prime
\fi
\usepackage[notbib]{tocbibind}
"""
latex_elements = {
@@ -243,7 +263,8 @@ latex_elements = {
# Additional stuff for the LaTeX preamble.
'preamble': preamble,
'inputenc':'\\usepackage[utf8]{inputenc}'
'inputenc': r'\usepackage[utf8]{inputenc}',
'makeindex': r'\usepackage[columns=1]{idxlayout}\makeindex',
# Latex figure (float) alignment
#'figure_align': 'htbp',
@@ -358,3 +379,6 @@ texinfo_documents = [
breathe_projects = {
"cpp_stuff":"../build/xml/",
}
import redirects
redirect_files = redirects.gather_redirects()
+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
================================================================================
+9 -5
View File
@@ -13,17 +13,18 @@ distribution of the source code and various resource file archives. See
Current Release
--------------------------------------------------------------------------------
* **2019-07-01** `proj-6.1.1.tar.gz`_ (`md5`_)
* **2019-11-01** `proj-6.2.1.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`_
* **PDF Manual** `proj.pdf`_
Past Releases
--------------------------------------------------------------------------------
* **2019-09-01** `proj-6.2.0.tar.gz`_
* **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,15 @@ 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.1.tar.gz`: https://download.osgeo.org/proj/proj-6.2.1.tar.gz
.. _`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 +63,10 @@ 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
.. _`proj.pdf`: https://raw.githubusercontent.com/OSGeo/PROJ/gh-pages/proj.pdf
.. _`md5`: https://download.osgeo.org/proj/proj-6.2.1.tar.gz.md5
+1 -1
View File
@@ -115,7 +115,7 @@ There are however exceptions, especially when dealing with coordinate systems th
don't align with the cardinal directions of a compass. For example it is not
obvious which coordinate component aligns to which axis in a skewed coordinate
system with a 45 degrees angle against the north direction. Similarly, a geocentric
cartesain coordinate system usually has the z-component aligned with the rotational
cartesian coordinate system usually has the z-component aligned with the rotational
axis of the earth and hence the axis points towards north. Both cases are
incompatible with the convention of always having the x-component be the east/west
axis, the y-component the north/south axis and the z-component the up/down axis.
+1 -22
View File
@@ -24,29 +24,8 @@ PROJ
.. only:: html
PROJ is a generic coordinate transformation software that transforms geospatial
coordinates from one coordinate reference system (CRS) to another. This
includes cartographic projections as well as geodetic transformations.
PROJ includes :ref:`command line applications<apps>` for easy conversion of
coordinates from text files or directly from user input. In addition to the
command line utilities PROJ also exposes an
:ref:`application programming interface<reference>`, or API in short. The API
lets developers use the functionality of PROJ in their own software without having
to implement similar functionality themselves.
PROJ started purely as a cartography application letting users convert geodetic
coordinates into projected coordinates using a number of different cartographic
projections. Over the years, as the need has become apparent, support for datum
shifts has slowly worked its way into PROJ as well. Today PROJ supports more
than a hundred different map projections and can transform coordinates between
datums using all but the most obscure geodetic techniques.
.. include:: about_core.rst
You can download the source code for PROJ on the :ref:`download section<download>`
and find links to prepackaged executables in the
:ref:`installation section<install>`.
In addition to this website the PROJ documentation is also available in `PDF`_
form.
.. _`PDF`: https://raw.githubusercontent.com/OSGeo/proj.4/gh-pages/proj.pdf
+22 -4
View File
@@ -24,7 +24,18 @@ 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``.
.. tip::
Read more about the various datumgrid packages available :ref:`here<datumgrid>`.
Docker
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -34,8 +45,8 @@ files is available on `DockerHub`_. Get the package with::
docker pull osgeo/proj
.. _`Docker`: https://docker.org
.. _`DockerHub`: https://hub.docker.com/r/osgeo/proj.4/
.. _`Docker`: https://www.docker.com/
.. _`DockerHub`: https://hub.docker.com/r/osgeo/proj/
Windows
--------------------------------------------------------------------------------
@@ -86,6 +97,13 @@ On Debian and similar systems (e.g. Ubuntu) the APT package manager is used::
sudo apt-get install proj-bin
Fedora
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
On Fedora the dnf package manager is used::
sudo dnf install proj
Red Hat
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -108,7 +126,7 @@ PROJ is also available from the MacPorts system::
Compilation and installation from source code
################################################################################
The classical way of installing PROJ is via the source code distribution. The
The classic way of installing PROJ is via the source code distribution. The
most recent version is available from the :ref:`download page<current_release>`.
PROJ requires C and C++11 compilers. It also requires SQLite3 (headers,
+105
View File
@@ -2,6 +2,111 @@
News
###############################################################################
6.2.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*November 1st 2019*
Updates
-------
* Update the EPSG database to version 9.8.2
Bug fixes
----------
* Fixed erroneous spelling of "Potsdam" (`#1573 <https://github.com/OSGeo/PROJ/issues/1573>`_)
* Calculate y-coordinate correctly in :ref:`bertin1953` in all cases (`#1579 <https://github.com/OSGeo/PROJ/issues/1579>`_)
* :c:func:`proj_create_crs_to_crs_from_pj()`: make the PJ* arguments const PJ* (`#1583 <https://github.com/OSGeo/PROJ/issues/1583>`_)
* :c:func:`PROJStringParser::createFromPROJString()`: avoid potential infinite
recursion (`#1574 <https://github.com/OSGeo/PROJ/issues/1574>`_)
* Avoid core dump when setting ``ctx==NULL`` in functions
:c:func:`proj_coordoperation_is_instantiable` and
:c:func:`proj_coordoperation_has_ballpark_transformation` (`#1590 <https://github.com/OSGeo/PROJ/issues/1590>`_)
* :c:func:`createOperations()`: fix conversion from/to PROJ.4 CRS strings with
non-ISO-kosher options and ``+towgs84``/``+nadgrids`` (`#1602 <https://github.com/OSGeo/PROJ/issues/1602>`_)
* :c:func:`proj_trans_generic()`: properly set coordinate time to ``HUGE_VAL``
when no value is passed to the function (`#1604 <https://github.com/OSGeo/PROJ/issues/1604>`_)
* Fix support for ``+proj=ob_tran +o_proj=lonlat/latlong/latlon`` instead of only
only allowing ``+o_proj=longlat`` (`#1601 <https://github.com/OSGeo/PROJ/issues/1601>`_)
* Improve backwards compatibility of vertical transforms (`#1613 <https://github.com/OSGeo/PROJ/issues/1613>`_)
* Improve emulation of deprecated ``+init`` style initialization (`#1614 <https://github.com/OSGeo/PROJ/issues/1614>`_)
* :program:`cs2cs`: autopromote CRS to 3D when there's a mix of 2D and 3D (`#1563 <https://github.com/OSGeo/PROJ/issues/1563>`_)
* Avoid divisions by zero in odd situations (`#1620 <https://github.com/OSGeo/PROJ/issues/1620>`_)
* Avoid compile error on Solaris (`#1639 <https://github.com/OSGeo/PROJ/issues/1639>`_)
* :c:func:`proj_create_crs_to_crs()`: fix when there are only transformations with
ballpark steps (`#1643 <https://github.com/OSGeo/PROJ/issues/1643>`_)
* PROJ string CRS ingester: recognize more unit-less parameters, and general
handling of ``+key=string_value`` parameters (`#1645 <https://github.com/OSGeo/PROJ/issues/1645>`_)
* Only call pkg-config in configure when necessary (`#1652 <https://github.com/OSGeo/PROJ/issues/1652>`_)
* :ref:`aeqd`: for spherical forward path, go to higher precision ellipsoidal
case when the point coordinates are super close to the origin (`#1654 <https://github.com/OSGeo/PROJ/issues/1654>`_)
* :c:func:`proj_create_crs_to_crs()`: remove elimination of Ballpark operations
that caused transformation failures in some cases (`#1665 <https://github.com/OSGeo/PROJ/issues/1665>`_)
* :c:func:`createOperations()`: allow transforming from a compoundCRS of a bound
verticalCRS to a 2D CRS (`#1667 <https://github.com/OSGeo/PROJ/issues/1667>`_)
* Avoid segfaults in case of out-of-memory situations (`#1679 <https://github.com/OSGeo/PROJ/issues/1679>`_)
* :c:func:`createOperations()`: fix double vertical unit conversion from CompoundCRS
to other CRS when the horizontal part of the projected CRS uses non-metre
unit (#1683)(`#1683 <https://github.com/OSGeo/PROJ/issues/1683>`_)
* :c:func:`importFromWkt()`: fix axis orientation for non-standard ESRI WKT (`#1690 <https://github.com/OSGeo/PROJ/issues/1690>`_)
6.2.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*September 1st 2019*
Updates
-------
* Introduced :ref:`PROJJSON`, a JSON encoding of WKT2 (`#1547 <https://github.com/OSGeo/PROJ/issues/1547>`_)
* 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

@@ -4,6 +4,31 @@
Icosahedral Snyder Equal Area
********************************************************************************
Snyder's Icosahedral Equal Area map projections on polyhedral globes for the
dodecahedron and truncated icosahedron offer relatively low scale and
angular distortion. The equations involved are relatively straight-forward,
and for certain instructional tools and databases, the projections are useful
for world maps. The interruptions remain a disadvantage, as with any low-error
projection system applied to the entire globe :cite:`Snyder1992`.
+---------------------+----------------------------------------------------------+
| **Classification** | Polyhedral, equal area |
+---------------------+----------------------------------------------------------+
| **Available forms** | Forward, spherical |
+---------------------+----------------------------------------------------------+
| **Defined area** | Global |
+---------------------+----------------------------------------------------------+
| **Alias** | isea |
+---------------------+----------------------------------------------------------+
| **Domain** | 2D |
+---------------------+----------------------------------------------------------+
| **Input type** | Geodetic coordinates |
+---------------------+----------------------------------------------------------+
| **Output type** | Projected coordinates |
+---------------------+----------------------------------------------------------+
.. figure:: ./images/isea.png
:width: 500 px
:align: center
@@ -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
................................................................................
+1 -1
View File
@@ -100,7 +100,7 @@ Parameters
Mathematical definition
#######################
The formulas describing the Transverse Mercator below are quoted from Evenden's [Evenden2005]_.
The formulas describing the Transverse Mercator below are quoted from :cite:`Evenden2005`.
:math:`\phi_0` is the latitude of origin that match the center of the map. It can be set with ``+lat_0``.
+1 -1
View File
@@ -37,7 +37,7 @@ to which specific parameters, such as central meridians, have been applied.
The Earth is divided into 60 zones each generally 6° wide in longitude.
Bounding meridians are evenly divisible by 6°, and zones are
numbered from 1 to 60 proceeding east from the 180th meridian from Greenwich
with minor exceptions [Snyder1987]_.
with minor exceptions :cite:`Snyder1987`.
Usage
#####
@@ -64,7 +64,7 @@ Parameters
Mathematical definition
#######################
The formulas describing the Mercator projection are all taken from G. Evenden's libproj manuals [Evenden2005]_.
The formulas describing the Mercator projection are all taken from G. Evenden's libproj manuals :cite:`Evenden2005`.
Forward projection
==================
+13
View File
@@ -317,6 +317,19 @@
Url = {https://www.researchgate.net/publication/290447301_The_Natural_Earth_II_world_map_projection}
}
@Article{Snyder1992,
Title = {An Equal-Area Map Projection For Polyhedral Globes},
Author = {John P. Snyder},
Journal = {Cartographica},
Year = {1992},
Number = {1},
Pages = {10--21},
Volume = {29},
Doi = {DOI: 10.3138/27H7-8K88-4882-1752},
Uri = {https://doi.org/10.3138/27H7-8K88-4882-1752}
}
@Book{Snyder1993,
Title = {Flattening the Earth},
Author = {John P. Snyder},
+83 -89
View File
@@ -6,14 +6,40 @@ Resource files
A number of files containing preconfigured transformations and default parameters
for certain projections are bundled with the PROJ distribution. Init files
contains preconfigured proj-strings for various coordinate reference systems
and the defaults file contains default values for parameters of select
contain preconfigured proj-strings for various coordinate reference systems
and the `defaults` file contains default values for parameters of select
projections.
In addition to the bundled init-files the PROJ.4 project also distribute a number
In addition to the bundled init-files the PROJ project also distributes a number
of packages containing transformation grids and additional init-files not included
in the main PROJ package.
Where are PROJ resource files looked for ?
-------------------------------------------------------------------------------
PROJ will attempt to locate its resource files - database, transformation grids
or init-files - from several dictionaries.
The following paths are checked in order:
- For transformation grids that have an explict relative or absolute path,
the directory specified in the grid filename.
- Path resolved by the callback function set with
the :c:func:`proj_context_set_file_finder`. If it is set, the next tests
will not be run.
- Path(s) set with the :c:func:`proj_context_set_search_paths`. If set, the
next tests will not be run.
- Path(s) set with by the environment variable :envvar:`PROJ_LIB`.
On Linux/MacOSX/Unix, use ``:`` to separate paths. On Windows, ``;``
- On Windows, the *..\\share\\proj\\* and its contents are found automatically
at run-time if the installation respects the build structure. That is, the
binaries and proj.dll are installed under *..\\bin\\*, and resource files
are in *..\\share\\proj\\*.
- A path built into PROJ as its resource installation directory (whose value is
$(pkgdatadir)), for builds using the Makefile build system. Note, however,
that since this is a hard-wired path setting, it only works if the whole
PROJ installation is not moved somewhere else.
- The current directory
.. _proj-db:
proj.db
@@ -23,17 +49,37 @@ A proj installation includes a SQLite database of transformation information
that must be accessible for the library to work properly. The library will
print an error if the database can't be found.
External resources
Transformation grids
-------------------------------------------------------------------------------
For a functioning PROJ installation of the
Grid files are important for shifting and transforming between datums.
PROJ supports CTable2, NTv1 and NTv2 files for horizontal grid corrections and
the GTX file format for vertical corrections. Details about the formats can be
found in the `GDAL documentation <http://gdal.org/>`_. GDAL reads and writes
all formats. Using GDAL for construction of new grids is recommended.
.. _datumgrid:
External resources and packaged grids
-------------------------------------------------------------------------------
proj-datumgrid
++++++++++++++
For a functioning PROJ, installation of the
`proj-datumgrid <https://github.com/OSGeo/proj-datumgrid>`_ is needed. If you
have installed PROJ from a package system chances are that this will already be
done for you. The *proj-datumgrid* package provides transformation grids that
are essential for many of the predefined transformations in PROJ. Which grids
are included in the package can be seen on the
`proj-datumgrid repository <https://github.com/OSGeo/proj-datumgrid>`_ as well
as descriptions of those grids.
as descriptions of those grids. This is the main grid package and the only one
that is required. It includes various older grids that is mostly needed for
legacy reasons. Without this package, the test suite fails miserably.
Regional packages
+++++++++++++++++
In addition to the default *proj-datumgrid* package regional packages are also
distributed. These include grids and init-files that are valid within the given
@@ -47,46 +93,43 @@ At the moment three regional resource file packages are distributed:
* `Oceania <https://github.com/OSGeo/proj-datumgrid/tree/master/oceania#proj-datumgrid-oceania>`_
* `North America <https://github.com/OSGeo/proj-datumgrid/tree/master/north-america#proj-datumgrid-north-america>`_
If someone supplies grids relevant for Africa, South-America, Asia or Antarctica
we will create new regional packages.
Click the links to jump to the relevant README files for each package. Details
on the content of the packages maintained there.
Links to the resource packages can be found in the :ref:`download section <download>`.
.. tip::
To download the various datumgrid packages head to the :ref:`download section <download>`.
World package
+++++++++++++
The `world package <https://github.com/OSGeo/proj-datumgrid/tree/master/world#proj-datumgrid-world>`_
includes grids that have global extent, e.g. the global geoid model EGM08.
-latest packages
++++++++++++++++
All packages above come in different versions, e.g proj-datumgrid-1.8 or
proj-datumgrid-europe-1.4. The `-latest` packages are symbolic links to the
latest version of a given packages. That means that the link
https://download.osgeo.org/proj/proj-datumgrid-north-america-latest.zip is
equivalent to https://download.osgeo.org/proj/proj-datumgrid-north-america-1.2.zip
(as of the time of writing this).
.. _transformation_grids:
Transformation grids
Other transformation grids
-------------------------------------------------------------------------------
Grid files are important for shifting and transforming between datums.
PROJ supports CTable2, NTv1 and NTv2 files for horizontal grid corrections and
the GTX file format for vertical corrections. Details about the formats can be
found in the `GDAL documentation <http://gdal.org/>`_. GDAL reads and writes
all formats. Using GDAL for construction of new grids is recommended.
Below is a given a list of grid resources for various countries which are not
Below is a list of grid resources for various countries which are not
included in the grid distributions mentioned above.
Free grids
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Below is a list of grids distributed under a free and open license.
Switzerland
................................................................................
Background in ticket `#145 <https://github.com/OSGeo/PROJ/issues/145>`__
We basically have two shift grids available. An official here:
`Swiss CHENyx06 dataset in NTv2 format <https://shop.swisstopo.admin.ch/en/products/geo_software/GIS_info>`__
And a derived in a temporary location which is probably going to disappear soon.
Main problem seems to be there's no mention of distributivity of the grid from
the official website. It just tells: "you can use freely". The "contact" link
is also broken, but maybe someone could make a phone call to ask for rephrasing
that.
The following is a list of grids distributed under a free and open license.
Hungary
................................................................................
@@ -105,7 +148,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
................................................................................
@@ -133,49 +177,10 @@ Spain
`Spanish grids <http://www.ign.es/ign/layoutIn/herramientas.do#DATUM>`__ for ED50.
HARN
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
With the support of `i-cubed <http://www.i3.com>`__, Frank Warmerdam has
written tools to translate the HPGN grids from NOAA/NGS from ``.los/.las`` format
into NTv2 format for convenient use with PROJ. This project included
implementing a `.los/.las reader <https://github.com/OSGeo/gdal/tree/trunk/gdal/frmts/raw/loslasdataset.cpp>`__
for GDAL, and an `NTv2 reader/writer <https://github.com/OSGeo/gdal/tree/trunk/gdal/frmts/raw/ntv2dataset.cpp>`__.
Also, a script to do the bulk translation was implemented in
https://github.com/OSGeo/gdal/tree/trunk/gdal/swig/python/samples/loslas2ntv2.py.
The command to do the translation was:
::
loslas2ntv2.py -auto *hpgn.los
As GDAL uses NAD83/WGS84 as a pivot datum, the sense of the HPGN datum shift offsets were negated to map from HPGN to NAD83 instead of the other way. The files can be used with PROJ like this:
::
cs2cs +proj=latlong +datum=NAD83
+to +proj=latlong +nadgrids=./azhpgn.gsb +ellps=GRS80
::
# input:
-112 34
::
# output:
111d59'59.996"W 34d0'0.006"N -0.000
This was confirmed against the `NGS HPGN calculator
<http://www.ngs.noaa.gov/cgi-bin/nadcon2.prl>`__.
The grids are available at https://download.osgeo.org/proj/hpgn_ntv2.zip
HTDP
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This page documents use of the `crs2crs2grid.py` script and the HTDP
This section describes the use of the `crs2crs2grid.py` script and the HTDP
(Horizontal Time Dependent Positioning) grid shift modelling program from
NGS/NOAA to produce PROJ compatible grid shift files for fine grade
conversions between various NAD83 epochs and WGS84. Traditionally PROJ has
@@ -211,7 +216,8 @@ Getting crs2crs2grid.py
The `crs2crs2grid.py` script can be found at
https://github.com/OSGeo/gdal/tree/trunk/gdal/swig/python/samples/crs2crs2grid.py
It depends on having the GDAL Python bindings operational. If they are not
The script depends on having the GDAL Python bindings operational; if they are not you
will get an error such as:
::
@@ -310,7 +316,7 @@ Init files
Init files are used for preconfiguring proj-strings for often used
transformations, such as those found in the EPSG database. Most init files contain
transformations from a given coordinate reference system to WGS84. This makes
it easy to transformations between any two coordinate reference systems with
it easy to transform between any two coordinate reference systems with
``cs2cs``. Init files can however contain any proj-string and don't necessarily
have to follow the *cs2cs* paradigm where WGS84 is used as a pivot datum. The
ITRF init file is a good example of that.
@@ -319,7 +325,7 @@ A number of init files come pre-bundled with PROJ but it is also possible to
add your own custom init files. PROJ looks for the init files in the directory
listed in the ``PROJ_LIB`` environment variable.
The format of init files made up of a identifier in angled brackets and a
The format of init files is an identifier in angled brackets and a
proj-string:
::
@@ -383,11 +389,7 @@ Below is a list of the init files that are packaged with PROJ.
======== ================================================================
Name Description
======== ================================================================
esri Auto-generated mapping from Esri projection index. Not
maintained any more
epsg EPSG database
GL27 Great Lakes Grids
IGNF French coordinate systems supplied by the IGNF
ITRF2000 Full set of transformation parameters between ITRF2000 and other
ITRF's
ITRF2008 Full set of transformation parameters between ITRF2008 and other
@@ -397,11 +399,3 @@ Below is a list of the init files that are packaged with PROJ.
nad27 State plane coordinate systems, North American Datum 1927
nad83 State plane coordinate systems, North American Datum 1983
======== ================================================================
The defaults file
-------------------------------------------------------------------------------
Before PROJ 6.0, a ``proj_def.dat`` file could be used to supply default
parameters to PROJ. It has been removed due to the confusion and errors it
caused.
+2
View File
@@ -17,3 +17,5 @@ command line applications or the C API that is a part of the software package.
transformation
environmentvars
differences
projjson
+261
View File
@@ -0,0 +1,261 @@
.. _projjson:
================================================================================
PROJJSON
================================================================================
PROJJSON is a JSON encoding of
`WKT2:2019 / ISO-19162:2019 <http://docs.opengeospatial.org/is/18-010r7/18-010r7.html>`_,
which itself implements the model of
`OGC Topic 2: Referencing by coordinates <http://docs.opengeospatial.org/as/18-005r4/18-005r4.html>`_.
Apart from the difference of encodings, the semantics is intended to be exactly
the same as WKT2:2019.
PROJJSON is available as input and output of PROJ since PROJ 6.2.
The current version is 0.1.
Schema
------
A JSON schema of its grammar is available at
https://proj.org/schemas/v0.1/projjson.schema.json
Content
-------
The high level objects are:
* Coordinate Reference Systems (CRS):
- Common ones:
+ ``GeographicCRS``
+ ``GeodeticCRS``
+ ``ProjectedCRS``
+ ``CompoundCRS``
+ ``BoundCRS``
- More esoteric ones:
+ ``VerticalCRS``
+ ``EngineeringCRS``
+ ``TemporalCRS``
+ ``ParametricCRS``
+ ``DerivedGeographicCRS``
+ ``DerivedGeodeticCRS``
+ ``DerivedProjectedCRS``
+ ``DerivedVerticalCRS``
+ ``DerivedEngineeringCRS``
+ ``DerivedTemporalCRS``
+ ``DerivedParametricCRS``
* Coordinate operations:
- ``Transformation``
- ``Conversion``
- ``ConcatenatedOperation``
* Others:
- ``PrimeMeridian``
- ``Ellipsoid``
- ``Datum``
- ``DatumEnsemble``
Examples
--------
GeographicCRS
+++++++++++++
The following invokation
::
projinfo EPSG:4326 -o PROJJSON -q
will output:
.. code-block:: json
{
"$schema": "https://proj.org/schemas/v0.1/projjson.schema.json",
"type": "GeographicCRS",
"name": "WGS 84",
"datum": {
"type": "GeodeticReferenceFrame",
"name": "World Geodetic System 1984",
"ellipsoid": {
"name": "WGS 84",
"semi_major_axis": 6378137,
"inverse_flattening": 298.257223563
}
},
"coordinate_system": {
"subtype": "ellipsoidal",
"axis": [
{
"name": "Geodetic latitude",
"abbreviation": "Lat",
"direction": "north",
"unit": "degree"
},
{
"name": "Geodetic longitude",
"abbreviation": "Lon",
"direction": "east",
"unit": "degree"
}
]
},
"area": "World",
"bbox": {
"south_latitude": -90,
"west_longitude": -180,
"north_latitude": 90,
"east_longitude": 180
},
"id": {
"authority": "EPSG",
"code": 4326
}
}
ProjectedCRS
++++++++++++
The following invokation
::
projinfo EPSG:32631 -o PROJJSON -q
will output:
.. code-block:: json
{
"$schema": "https://proj.org/schemas/v0.1/projjson.schema.json",
"type": "ProjectedCRS",
"name": "WGS 84 / UTM zone 31N",
"base_crs": {
"name": "WGS 84",
"datum": {
"type": "GeodeticReferenceFrame",
"name": "World Geodetic System 1984",
"ellipsoid": {
"name": "WGS 84",
"semi_major_axis": 6378137,
"inverse_flattening": 298.257223563
}
},
"coordinate_system": {
"subtype": "ellipsoidal",
"axis": [
{
"name": "Geodetic latitude",
"abbreviation": "Lat",
"direction": "north",
"unit": "degree"
},
{
"name": "Geodetic longitude",
"abbreviation": "Lon",
"direction": "east",
"unit": "degree"
}
]
},
"id": {
"authority": "EPSG",
"code": 4326
}
},
"conversion": {
"name": "UTM zone 31N",
"method": {
"name": "Transverse Mercator",
"id": {
"authority": "EPSG",
"code": 9807
}
},
"parameters": [
{
"name": "Latitude of natural origin",
"value": 0,
"unit": "degree",
"id": {
"authority": "EPSG",
"code": 8801
}
},
{
"name": "Longitude of natural origin",
"value": 3,
"unit": "degree",
"id": {
"authority": "EPSG",
"code": 8802
}
},
{
"name": "Scale factor at natural origin",
"value": 0.9996,
"unit": "unity",
"id": {
"authority": "EPSG",
"code": 8805
}
},
{
"name": "False easting",
"value": 500000,
"unit": "metre",
"id": {
"authority": "EPSG",
"code": 8806
}
},
{
"name": "False northing",
"value": 0,
"unit": "metre",
"id": {
"authority": "EPSG",
"code": 8807
}
}
]
},
"coordinate_system": {
"subtype": "Cartesian",
"axis": [
{
"name": "Easting",
"abbreviation": "E",
"direction": "east",
"unit": "metre"
},
{
"name": "Northing",
"abbreviation": "N",
"direction": "north",
"unit": "metre"
}
]
},
"area": "World - N hemisphere - 0°E to 6°E - by country",
"bbox": {
"south_latitude": 0,
"west_longitude": 0,
"north_latitude": 84,
"east_longitude": 6
},
"id": {
"authority": "EPSG",
"code": 32631
}
}
+46 -13
View File
@@ -12,7 +12,8 @@ large scale cartographic projections as well as coordinate transformation at a
geodetic high precision level. This chapter delves into the details of how
geodetic transformations of varying complexity can be performed.
In PROJ, two frameworks for geodetic transformations exists, the *cs2cs*
In PROJ, two frameworks for geodetic transformations exists, the
*PROJ 4.x/5.x* / :program:`cs2cs` / :c:func:`pj_transform`
framework and the *transformation pipelines* framework. The first is the original,
and limited, framework for doing geodetic transforms in PROJ The latter is a
newer addition that aims to be a more complete transformation framework. Both are
@@ -133,7 +134,7 @@ coordinate timestamps back to GPS weeks.
step proj=unitconvert t_in=decimalyear t_out=gps_week
cs2cs paradigm
PROJ 4.x/5.x paradigm
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.. _cs2cs_specific_options:
@@ -148,9 +149,19 @@ cs2cs paradigm
+vto_meter Vertical conversion to meters
============ ==============================================================
The *cs2cs* framework delivers a subset of the geodetic transformations available
.. warning::
This section documents the behaviour of PROJ 4.x and 5.x. In PROJ 6.x,
:program:`cs2cs` has been reworked to use :c:func:`proj_create_crs_to_crs` internally,
with *late binding* capabilities, and thus is no longer constrained to using
WGS84 as a pivot (also called as *early binding* method).
When :program:`cs2cs` of PROJ 6 is used with PROJ.4 expanded strings to describe the CRS,
including ``+towgs84``, ``+nadgrids`` and ``+geoidgrids``, it will generally give
the same results as earlier PROJ versions. When used with AUTHORITY:CODE
CRS descriptions, it may return different results.
The *cs2cs* framework in PROJ 4 and 5 delivers a subset of the geodetic transformations available
with the *pipeline* framework. Coordinate transformations done in this framework
are transformed in a two-step process with WGS84 as a pivot datum That is, the
were transformed in a two-step process with WGS84 as a pivot datum. That is, the
input coordinates are transformed to WGS84 geodetic coordinates and then transformed
from WGS84 coordinates to the specified output coordinate reference system, by
utilizing either the Helmert transform, datum shift grids or a combination of both.
@@ -173,7 +184,7 @@ Both grid correction methods allow inclusion of more than one grid in the same
transformation
In contrast to the *transformation pipeline* framework, transformations with the
*cs2cs* framework are expressed as two separate proj-strings. One proj-string *to*
*cs2cs* framework in PROJ 4 and 5 were expressed as two separate proj-strings. One proj-string *to*
WGS84 and one *from* WGS84. Together they form the mapping from the source
coordinate reference system to the destination coordinate reference system.
When used with the ``cs2cs`` the source and destination CRS's are separated by the
@@ -189,6 +200,21 @@ to WGS84 with the ``+towgs84`` parameter.
20 35
20d0'5.467"E 35d0'9.575"N 0.000
With PROJ 6, you can simply use the following:
.. note:: With PROJ 6, the order of coordinates for EPSG geographic coordinate
reference systems is latitude first, longitude second.
::
cs2cs "GGRS87" "WGS 84"
35 20
35d0'9.575"N 20d0'5.467"E 0.000
cs2cs EPSG:4121 EPSG:4326
35 20
35d0'9.575"N 20d0'5.467"E 0.000
The EPSG database provides this example for transforming from WGS72 to WGS84
using an approximated 7 parameter transformation.
@@ -199,6 +225,19 @@ using an approximated 7 parameter transformation.
4 55
4d0'0.554"E 55d0'0.09"N 0.000
With PROJ 6, you can simply use the following (note the reversed order for
latitude and longitude)
::
cs2cs "WGS 72" "WGS 84"
55 4
55d0'0.09"N 4d0'0.554"E 0.000
cs2cs EPSG:4322 EPSG:4326
55 4
55d0'0.09"N 4d0'0.554"E 0.000
Grid Based Datum Adjustments
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -266,8 +305,8 @@ fallback to using the ``ntv1_can.dat`` file.
The null Grid
................................................................................
A special ``null`` grid shift file is shift with releases after 4.4.6 (not
inclusive). This file provides a zero shift for the whole world. It may be
A special ``null`` grid shift file is distributed with PROJ.
This file provides a zero shift for the whole world. It may be
listed at the end of a nadgrids file list if you want a zero shift to be
applied to points outside the valid region of all the other grids. Normally if
no grid is found that contains the point to be transformed an error will occur.
@@ -301,13 +340,7 @@ Caveats
Careful selection of files and file order is necessary. In some cases
border spanning datasets may need to be pre-segmented into Canadian and
American points so they can be properly grid shifted
* There are additional grids for shifting between NAD83 and various HPGN
versions of the NAD83 datum. Use of these haven't been tried recently so
you may encounter problems. The FL.lla, WO.lla, MD.lla, TN.lla and WI.lla
are examples of high precision grid shifts. Take care!
* Additional detail on the grid shift being applied can be found by setting
the PROJ_DEBUG environment variable to a value. This will result in output
to stderr on what grid is used to shift points, the bounds of the various
grids loaded and so forth
* The *cs2cs* framework always assumes that grids contain a shift **to** NAD83 (essentially
WGS84). Other types of grids can be used with the *pipeline* framework.
+7
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 *
@@ -503,6 +507,9 @@ class PROJ_GCC_DLL DerivedCRS : virtual public SingleCRS {
PROJ_PRIVATE :
//! @cond Doxygen_Suppress
// Use this method with extreme care ! It should never be used
// to recreate a new Derived/ProjectedCRS !
PROJ_INTERNAL const operation::ConversionNNPtr &
derivingConversionRef() PROJ_PURE_DECL;
+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

+982
View File
@@ -0,0 +1,982 @@
{
"$id": "https://proj.org/schemas/v0.2/projjson.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Schema for PROJJSON",
"$comment": "This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And if changing the value of $id, change PROJJSON_CURRENT_VERSION accordingly in io.cpp",
"oneOf": [
{ "$ref": "#/definitions/crs" },
{ "$ref": "#/definitions/datum" },
{ "$ref": "#/definitions/datum_ensemble" },
{ "$ref": "#/definitions/ellipsoid" },
{ "$ref": "#/definitions/prime_meridian" },
{ "$ref": "#/definitions/single_operation" },
{ "$ref": "#/definitions/concatenated_operation" }
],
"definitions": {
"abridged_transformation": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["AbridgedTransformation"] },
"name": { "type": "string" },
"method": { "$ref": "#/definitions/method" },
"parameters": {
"type": "array",
"items": { "$ref": "#/definitions/parameter_value" }
},
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "method", "parameters" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"axis": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["Axis"] },
"name": { "type": "string" },
"abbreviation": { "type": "string" },
"direction": { "type": "string",
"enum": [ "north",
"northNorthEast",
"northEast",
"eastNorthEast",
"east",
"eastSouthEast",
"southEast",
"southSouthEast",
"south",
"southSouthWest",
"southWest",
"westSouthWest",
"west",
"westNorthWest",
"northWest",
"northNorthWest",
"up",
"down",
"geocentricX",
"geocentricY",
"geocentricZ",
"columnPositive",
"columnNegative",
"rowPositive",
"rowNegative",
"displayRight",
"displayLeft",
"displayUp",
"displayDown",
"forward",
"aft",
"port",
"starboard",
"clockwise",
"counterClockwise",
"towards",
"awayFrom",
"future",
"past",
"unspecified" ] },
"unit": { "$ref": "#/definitions/unit" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "abbreviation", "direction" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"bbox": {
"type": "object",
"properties": {
"east_longitude": { "type": "number" },
"west_longitude": { "type": "number" },
"south_latitude": { "type": "number" },
"north_latitude": { "type": "number" }
},
"required" : [ "east_longitude", "west_longitude",
"south_latitude", "north_latitude" ],
"additionalProperties": false
},
"bound_crs": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["BoundCRS"] },
"source_crs": { "$ref": "#/definitions/crs" },
"target_crs": { "$ref": "#/definitions/crs" },
"transformation": { "$ref": "#/definitions/abridged_transformation" }
},
"required" : [ "source_crs", "target_crs", "transformation" ],
"additionalProperties": false
},
"compound_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["CompoundCRS"] },
"name": { "type": "string" },
"components": {
"type": "array",
"items": { "$ref": "#/definitions/crs" }
},
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "components" ],
"additionalProperties": false
},
"concatenated_operation": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["ConcatenatedOperation"] },
"name": { "type": "string" },
"source_crs": { "$ref": "#/definitions/crs" },
"target_crs": { "$ref": "#/definitions/crs" },
"steps": {
"type": "array",
"items": { "$ref": "#/definitions/single_operation" }
},
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "source_crs", "target_crs", "steps" ],
"additionalProperties": false
},
"conversion": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["Conversion"] },
"name": { "type": "string" },
"method": { "$ref": "#/definitions/method" },
"parameters": {
"type": "array",
"items": { "$ref": "#/definitions/parameter_value" }
},
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "method" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"coordinate_system": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["CoordinateSystem"] },
"name": { "type": "string" },
"subtype": { "type": "string",
"enum": ["Cartesian",
"spherical",
"ellipsoidal",
"vertical",
"ordinal",
"parametric",
"TemporalDateTime",
"TemporalCount",
"TemporalMeasure"] },
"axis": {
"type": "array",
"items": { "$ref": "#/definitions/axis" }
},
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "subtype", "axis" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"crs": {
"oneOf": [
{ "$ref": "#/definitions/bound_crs" },
{ "$ref": "#/definitions/compound_crs" },
{ "$ref": "#/definitions/derived_engineering_crs" },
{ "$ref": "#/definitions/derived_geodetic_crs" },
{ "$ref": "#/definitions/derived_parametric_crs" },
{ "$ref": "#/definitions/derived_projected_crs" },
{ "$ref": "#/definitions/derived_temporal_crs" },
{ "$ref": "#/definitions/derived_vertical_crs" },
{ "$ref": "#/definitions/engineering_crs" },
{ "$ref": "#/definitions/geodetic_crs" },
{ "$ref": "#/definitions/parametric_crs" },
{ "$ref": "#/definitions/projected_crs" },
{ "$ref": "#/definitions/temporal_crs" },
{ "$ref": "#/definitions/vertical_crs" }
]
},
"datum": {
"oneOf": [
{ "$ref": "#/definitions/geodetic_reference_frame" },
{ "$ref": "#/definitions/vertical_reference_frame" },
{ "$ref": "#/definitions/dynamic_geodetic_reference_frame" },
{ "$ref": "#/definitions/dynamic_vertical_reference_frame" },
{ "$ref": "#/definitions/temporal_datum" },
{ "$ref": "#/definitions/parametric_datum" },
{ "$ref": "#/definitions/engineering_datum" }
]
},
"datum_ensemble": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["DatumEnsemble"] },
"name": { "type": "string" },
"members": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
}
},
"ellipsoid": { "$ref": "#/definitions/ellipsoid" },
"accuracy": { "type": "string" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "members", "accuracy" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"derived_engineering_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["DerivedEngineeringCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/engineering_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"derived_geodetic_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["DerivedGeodeticCRS",
"DerivedGeographicCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/geodetic_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"derived_parametric_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["DerivedParametricCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/parametric_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"derived_projected_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["DerivedProjectedCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/projected_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"derived_temporal_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["DerivedTemporalCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/temporal_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"derived_vertical_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["DerivedVerticalCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/vertical_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"dynamic_geodetic_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/geodetic_reference_frame" }],
"properties": {
"type": { "type": "string", "enum": ["DynamicGeodeticReferenceFrame"] },
"name": {},
"anchor": {},
"ellipsoid": {},
"prime_meridian": {},
"frame_reference_epoch": { "type": "number" },
"deformation_model": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "ellipsoid", "frame_reference_epoch" ],
"additionalProperties": false
},
"dynamic_vertical_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/vertical_reference_frame" }],
"properties": {
"type": { "type": "string", "enum": ["DynamicVerticalReferenceFrame"] },
"name": {},
"anchor": {},
"frame_reference_epoch": { "type": "number" },
"deformation_model": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "frame_reference_epoch" ],
"additionalProperties": false
},
"ellipsoid": {
"type": "object",
"oneOf":[
{
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["Ellipsoid"] },
"name": { "type": "string" },
"semi_major_axis": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" },
"semi_minor_axis": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "semi_major_axis", "semi_minor_axis" ],
"additionalProperties": false
},
{
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["Ellipsoid"] },
"name": { "type": "string" },
"semi_major_axis": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" },
"inverse_flattening": { "type": "number" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "semi_major_axis", "inverse_flattening" ],
"additionalProperties": false
},
{
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["Ellipsoid"] },
"name": { "type": "string" },
"radius": { "$ref": "#/definitions/value_in_metre_or_value_and_unit" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "radius" ],
"additionalProperties": false
}
],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
]
},
"engineering_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["EngineeringCRS"] },
"name": { "type": "string" },
"datum": { "$ref": "#/definitions/engineering_datum" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "datum" ],
"additionalProperties": false
},
"engineering_datum": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["EngineeringDatum"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name" ],
"additionalProperties": false
},
"geodetic_crs": {
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["GeodeticCRS", "GeographicCRS"] },
"name": { "type": "string" },
"datum": {
"oneOf": [
{ "$ref": "#/definitions/geodetic_reference_frame" },
{ "$ref": "#/definitions/dynamic_geodetic_reference_frame" }
]
},
"datum_ensemble": { "$ref": "#/definitions/datum_ensemble" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name" ],
"description": "One and only one of datum and datum_ensemble must be provided",
"allOf": [
{ "$ref": "#/definitions/object_usage" },
{ "$ref": "#/definitions/one_and_only_one_of_datum_or_datum_ensemble" }
],
"additionalProperties": false
},
"geodetic_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["GeodeticReferenceFrame"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"ellipsoid": { "$ref": "#/definitions/ellipsoid" },
"prime_meridian": { "$ref": "#/definitions/prime_meridian" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "ellipsoid" ],
"additionalProperties": false
},
"id": {
"type": "object",
"properties": {
"authority": { "type": "string" },
"code": {
"oneOf": [ { "type": "string" }, { "type": "integer" } ]
}
},
"required" : [ "authority", "code" ],
"additionalProperties": false
},
"ids": {
"type": "array",
"items": { "$ref": "#/definitions/id" }
},
"method": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["OperationMethod"]},
"name": { "type": "string" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"id_ids_mutually_exclusive": {
"not": {
"type": "object",
"required": [ "id", "ids" ]
}
},
"one_and_only_one_of_datum_or_datum_ensemble": {
"allOf": [
{
"not": {
"type": "object",
"required": [ "datum", "datum_ensemble" ]
}
},
{
"oneOf": [
{ "type": "object", "required": ["datum"] },
{ "type": "object", "required": ["datum_ensemble"] }
]
}
]
},
"object_usage": {
"anyOf": [
{
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"scope": { "type": "string" },
"area": { "type": "string" },
"bbox": { "$ref": "#/definitions/bbox" },
"remarks": { "type": "string" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
]
},
{
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"usages": { "$ref": "#/definitions/usages" },
"remarks": { "type": "string" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
]
}
]
},
"parameter_value": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["ParameterValue"] },
"name": { "type": "string" },
"value": {
"oneOf": [
{ "type": "string" },
{ "type": "number" }
]
},
"unit": { "$ref": "#/definitions/unit" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name", "value" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"parametric_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["ParametricCRS"] },
"name": { "type": "string" },
"datum": { "$ref": "#/definitions/parametric_datum" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "datum" ],
"additionalProperties": false
},
"parametric_datum": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["ParametricDatum"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name" ],
"additionalProperties": false
},
"prime_meridian": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["PrimeMeridian"] },
"name": { "type": "string" },
"longitude": { "$ref": "#/definitions/value_and_unit" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "name" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
},
"single_operation": {
"oneOf": [
{ "$ref": "#/definitions/conversion" },
{ "$ref": "#/definitions/transformation" }
]
},
"projected_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string",
"enum": ["ProjectedCRS"] },
"name": { "type": "string" },
"base_crs": { "$ref": "#/definitions/geodetic_crs" },
"conversion": { "$ref": "#/definitions/conversion" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "base_crs", "conversion", "coordinate_system" ],
"additionalProperties": false
},
"temporal_crs": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["TemporalCRS"] },
"name": { "type": "string" },
"datum": { "$ref": "#/definitions/temporal_datum" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "datum" ],
"additionalProperties": false
},
"temporal_datum": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["TemporalDatum"] },
"name": { "type": "string" },
"calendar": { "type": "string" },
"time_origin": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "calendar" ],
"additionalProperties": false
},
"transformation": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["Transformation"] },
"name": { "type": "string" },
"source_crs": { "$ref": "#/definitions/crs" },
"target_crs": { "$ref": "#/definitions/crs" },
"interpolation_crs": { "$ref": "#/definitions/crs" },
"method": { "$ref": "#/definitions/method" },
"parameters": {
"type": "array",
"items": { "$ref": "#/definitions/parameter_value" }
},
"accuracy": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name", "source_crs", "target_crs", "method", "parameters" ],
"additionalProperties": false
},
"unit": {
"oneOf": [
{
"type": "string",
"enum": ["metre", "degree", "unity"]
},
{
"type": "object",
"properties": {
"type": { "type": "string",
"enum": ["LinearUnit", "AngularUnit", "ScaleUnit",
"TimeUnit", "ParametricUnit", "Unit"] },
"name": { "type": "string" },
"conversion_factor": { "type": "number" },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
"required" : [ "type", "name" ],
"allOf": [
{ "$ref": "#/definitions/id_ids_mutually_exclusive" }
],
"additionalProperties": false
}
]
},
"usages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"scope": { "type": "string" },
"area": { "type": "string" },
"bbox": { "$ref": "#/definitions/bbox" }
},
"additionalProperties": false
}
},
"value_and_unit": {
"type": "object",
"properties": {
"value": { "type": "number" },
"unit": { "$ref": "#/definitions/unit" }
},
"required" : [ "value", "unit" ],
"additionalProperties": false
},
"value_in_metre_or_value_and_unit": {
"oneOf": [
{ "type": "number" },
{ "$ref": "#/definitions/value_and_unit" }
]
},
"vertical_crs": {
"type": "object",
"properties": {
"type": { "type": "string", "enum": ["VerticalCRS"] },
"name": { "type": "string" },
"datum": {
"oneOf": [
{ "$ref": "#/definitions/vertical_reference_frame" },
{ "$ref": "#/definitions/dynamic_vertical_reference_frame" }
]
},
"datum_ensemble": { "$ref": "#/definitions/datum_ensemble" },
"coordinate_system": { "$ref": "#/definitions/coordinate_system" },
"geoid_model": {
"type": "object",
"properties": {
"name": { "type": "string" },
"interpolation_crs": { "$ref": "#/definitions/crs" },
"id": { "$ref": "#/definitions/id" }
},
"required" : [ "name" ],
"additionalProperties": false
},
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name"],
"description": "One and only one of datum and datum_ensemble must be provided",
"allOf": [
{ "$ref": "#/definitions/object_usage" },
{ "$ref": "#/definitions/one_and_only_one_of_datum_or_datum_ensemble" }
],
"additionalProperties": false
},
"vertical_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["VerticalReferenceFrame"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
"bbox": {},
"usages": {},
"remarks": {},
"id": {}, "ids": {}
},
"required" : [ "name" ],
"additionalProperties": false
}
}
}
+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
+9
View File
@@ -18,6 +18,15 @@ TOPDIR="$SCRIPT_DIR/.."
pushd "${TOPDIR}" > /dev/null || exit
doxygen_version_cmd=$(doxygen --version)
# remove extra info after space
doxygen_version=${doxygen_version_cmd%% *}
echo "Doxygen version $doxygen_version"
if test $doxygen_version = "1.8.17" ; then
echo "Doxygen 1.8.17 is incompatible" && /bin/false;
fi
# HTML generation
# Check that doxygen runs warning free
rm -rf docs/build/html/
+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));
+8
View File
@@ -60,6 +60,14 @@ void pj_set_ctx( projPJ pj, projCtx ctx )
if (pj==nullptr)
return;
pj->ctx = ctx;
if( pj->is_pipeline )
{
pj_pipeline_assign_context_to_steps(pj, ctx);
}
for( const auto &alt: pj->alternativeCoordinateOperations )
{
pj_set_ctx(alt.pj, ctx);
}
}
/************************************************************************/
+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;
+182 -11
View File
@@ -498,7 +498,7 @@ template <class T> static PROJ_STRING_LIST to_string_list(T &&set) {
* proj_string_list_destroy().
* @param out_grammar_errors Pointer to a PROJ_STRING_LIST object, or NULL.
* If provided, *out_grammar_errors will contain a list of errors regarding the
* WKT grammaer. It must be freed with proj_string_list_destroy().
* WKT grammar. It must be freed with proj_string_list_destroy().
* @return Object that must be unreferenced with proj_destroy(), or NULL in
* case of error.
*/
@@ -522,6 +522,7 @@ PJ *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt,
if (dbContext) {
parser.attachDatabaseContext(NN_NO_CHECK(dbContext));
}
parser.setStrict(false);
for (auto iter = options; iter && iter[0]; ++iter) {
const char *value;
if ((value = getOptionValue(*iter, "STRICT="))) {
@@ -536,10 +537,19 @@ PJ *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt,
auto obj = nn_dynamic_pointer_cast<IdentifiedObject>(
parser.createFromWKT(wkt));
std::vector<std::string> warningsFromParsing;
if (out_grammar_errors) {
auto warnings = parser.warningList();
if (!warnings.empty()) {
*out_grammar_errors = to_string_list(warnings);
auto rawWarnings = parser.warningList();
std::vector<std::string> grammarWarnings;
for (const auto &msg : rawWarnings) {
if (msg.find("Default it to") != std::string::npos) {
warningsFromParsing.push_back(msg);
} else {
grammarWarnings.push_back(msg);
}
}
if (!grammarWarnings.empty()) {
*out_grammar_errors = to_string_list(grammarWarnings);
}
}
@@ -548,6 +558,8 @@ PJ *proj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt,
if (derivedCRS) {
auto warnings =
derivedCRS->derivingConversionRef()->validateParameters();
warnings.insert(warnings.end(), warningsFromParsing.begin(),
warningsFromParsing.end());
if (!warnings.empty()) {
*out_warnings = to_string_list(warnings);
}
@@ -2089,14 +2101,26 @@ PJ *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj) {
* The method returns a list of matching reference CRS, and the percentage
* (0-100) of confidence in the match. The list is sorted by decreasing
* confidence.
*
* 100% means that the name of the reference entry
* <ul>
* <li>100% means that the name of the reference entry
* perfectly matches the CRS name, and both are equivalent. In which case a
* single result is returned.
* 90% means that CRS are equivalent, but the names are not exactly the same.
* 70% means that CRS are equivalent), but the names do not match at all.
* 25% means that the CRS are not equivalent, but there is some similarity in
* the names.
* Note: in the case of a GeographicCRS whose axis
* order is implicit in the input definition (for example ESRI WKT), then axis
* order is ignored for the purpose of identification. That is the CRS built
* from
* GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
* PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
* will be identified to EPSG:4326, but will not pass a
* isEquivalentTo(EPSG_4326, util::IComparable::Criterion::EQUIVALENT) test,
* but rather isEquivalentTo(EPSG_4326,
* util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)
* </li>
* <li>90% means that CRS are equivalent, but the names are not exactly the same.</li>
* <li>70% means that CRS are equivalent), but the names do not match at all.</li>
* <li>25% means that the CRS are not equivalent, but there is some similarity in
* the names.</li>
* </ul>
* Other confidence values may be returned by some specialized implementations.
*
* This is implemented for GeodeticCRS, ProjectedCRS, VerticalCRS and
@@ -3148,7 +3172,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 +3221,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 +6208,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 +6251,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());
+426 -141
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
@@ -5925,24 +5927,31 @@ void Conversion::_exportToPROJString(
if (!param->proj_name) {
continue;
}
auto value =
const auto value =
parameterValueMeasure(param->wkt2_name, param->epsg_code);
double valueConverted = 0;
if (value == nullMeasure) {
// Deal with missing values. In an ideal world, this would
// not happen
if (param->epsg_code ==
EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN) {
valueConverted = 1.0;
}
} else if (param->unit_type ==
common::UnitOfMeasure::Type::ANGULAR) {
valueConverted =
value.convertToUnit(common::UnitOfMeasure::DEGREE);
} else {
valueConverted = value.getSIValue();
}
if (mapping->epsg_code ==
EPSG_CODE_METHOD_LAMBERT_CONIC_CONFORMAL_1SP &&
strcmp(param->proj_name, "lat_1") == 0) {
formatter->addParam(
param->proj_name,
value.convertToUnit(common::UnitOfMeasure::DEGREE));
formatter->addParam(
"lat_0",
value.convertToUnit(common::UnitOfMeasure::DEGREE));
} else if (param->unit_type ==
common::UnitOfMeasure::Type::ANGULAR) {
formatter->addParam(
param->proj_name,
value.convertToUnit(common::UnitOfMeasure::DEGREE));
formatter->addParam(param->proj_name, valueConverted);
formatter->addParam("lat_0", valueConverted);
} else {
formatter->addParam(param->proj_name, value.getSIValue());
formatter->addParam(param->proj_name, valueConverted);
}
}
@@ -6504,6 +6513,24 @@ static void getTransformationType(const crs::CRSNNPtr &sourceCRSIn,
isGeog2D = nSrcAxisCount == 2 && nTargetAxisCount == 2;
isGeog3D = !isGeog2D && nSrcAxisCount >= 2 && nTargetAxisCount >= 2;
}
// ---------------------------------------------------------------------------
static int
useOperationMethodEPSGCodeIfPresent(const util::PropertyMap &properties,
int nDefaultOperationMethodEPSGCode) {
const auto *operationMethodEPSGCode =
properties.get("OPERATION_METHOD_EPSG_CODE");
if (operationMethodEPSGCode) {
const auto boxedValue = dynamic_cast<const util::BoxedValue *>(
(*operationMethodEPSGCode).get());
if (boxedValue &&
boxedValue->type() == util::BoxedValue::Type::INTEGER) {
return boxedValue->integerValue();
}
}
return nDefaultOperationMethodEPSGCode;
}
//! @endcond
// ---------------------------------------------------------------------------
@@ -6532,12 +6559,13 @@ TransformationNNPtr Transformation::createGeocentricTranslations(
isGeog3D);
return create(
properties, sourceCRSIn, targetCRSIn, nullptr,
createMethodMapNameEPSGCode(
createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent(
properties,
isGeocentric
? EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOCENTRIC
: isGeog2D
? EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_2D
: EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D),
: EPSG_CODE_METHOD_GEOCENTRIC_TRANSLATION_GEOGRAPHIC_3D)),
VectorOfParameters{
createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_X_AXIS_TRANSLATION),
createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_Y_AXIS_TRANSLATION),
@@ -6590,11 +6618,12 @@ TransformationNNPtr Transformation::createPositionVector(
isGeog3D);
return createSevenParamsTransform(
properties,
createMethodMapNameEPSGCode(
createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent(
properties,
isGeocentric
? EPSG_CODE_METHOD_POSITION_VECTOR_GEOCENTRIC
: isGeog2D ? EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_2D
: EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D),
: EPSG_CODE_METHOD_POSITION_VECTOR_GEOGRAPHIC_3D)),
sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre,
translationZMetre, rotationXArcSecond, rotationYArcSecond,
rotationZArcSecond, scaleDifferencePPM, accuracies);
@@ -6639,11 +6668,12 @@ TransformationNNPtr Transformation::createCoordinateFrameRotation(
isGeog3D);
return createSevenParamsTransform(
properties,
createMethodMapNameEPSGCode(
createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent(
properties,
isGeocentric
? EPSG_CODE_METHOD_COORDINATE_FRAME_GEOCENTRIC
: isGeog2D ? EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_2D
: EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D),
: EPSG_CODE_METHOD_COORDINATE_FRAME_GEOGRAPHIC_3D)),
sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre,
translationZMetre, rotationXArcSecond, rotationYArcSecond,
rotationZArcSecond, scaleDifferencePPM, accuracies);
@@ -6782,12 +6812,13 @@ TransformationNNPtr Transformation::createTimeDependentPositionVector(
isGeog3D);
return createFifteenParamsTransform(
properties,
createMethodMapNameEPSGCode(
createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent(
properties,
isGeocentric
? EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOCENTRIC
: isGeog2D
? EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_2D
: EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D),
: EPSG_CODE_METHOD_TIME_DEPENDENT_POSITION_VECTOR_GEOGRAPHIC_3D)),
sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre,
translationZMetre, rotationXArcSecond, rotationYArcSecond,
rotationZArcSecond, scaleDifferencePPM, rateTranslationX,
@@ -6859,12 +6890,13 @@ TransformationNNPtr Transformation::createTimeDependentCoordinateFrameRotation(
isGeog3D);
return createFifteenParamsTransform(
properties,
createMethodMapNameEPSGCode(
createMethodMapNameEPSGCode(useOperationMethodEPSGCodeIfPresent(
properties,
isGeocentric
? EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOCENTRIC
: isGeog2D
? EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_2D
: EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D),
: EPSG_CODE_METHOD_TIME_DEPENDENT_COORDINATE_FRAME_GEOGRAPHIC_3D)),
sourceCRSIn, targetCRSIn, translationXMetre, translationYMetre,
translationZMetre, rotationXArcSecond, rotationYArcSecond,
rotationZArcSecond, scaleDifferencePPM, rateTranslationX,
@@ -7446,6 +7478,14 @@ createPropertiesForInverse(const CoordinateOperation *op, bool derivedFrom,
addModifiedIdentifier(map, op, true, derivedFrom);
const auto so = dynamic_cast<const SingleOperation *>(op);
if (so) {
const int soMethodEPSGCode = so->method()->getEPSGCode();
if (soMethodEPSGCode > 0) {
map.set("OPERATION_METHOD_EPSG_CODE", soMethodEPSGCode);
}
}
return map;
}
@@ -10169,6 +10209,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 +10235,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 +10298,7 @@ CoordinateOperationPtr CoordinateOperationFactory::createOperation(
struct PrecomputedOpCharacteristics {
double area_{};
double accuracy_{};
bool isPROJExportable_ = false;
bool hasGrids_ = false;
bool gridsAvailable_ = false;
bool gridsKnown_ = false;
@@ -10259,13 +10307,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 +10342,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 +10367,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 +10728,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 +11011,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 +11051,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 +11093,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 +11106,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 +11128,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 +11217,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 +11230,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 +12138,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 +12241,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 +12299,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 +12342,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 +12415,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 +12502,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 +12657,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 +12693,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 +12715,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 +12758,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 +12906,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) {
+151 -30
View File
@@ -237,7 +237,7 @@ CRSNNPtr CRS::alterGeodeticCRS(const GeodeticCRSNNPtr &newGeodCRS) const {
auto projCRS = dynamic_cast<const ProjectedCRS *>(this);
if (projCRS) {
return ProjectedCRS::create(createPropertyMap(this), newGeodCRS,
projCRS->derivingConversionRef(),
projCRS->derivingConversion(),
projCRS->coordinateSystem());
}
@@ -264,7 +264,7 @@ CRSNNPtr CRS::alterCSLinearUnit(const common::UnitOfMeasure &unit) const {
if (projCRS) {
return ProjectedCRS::create(
createPropertyMap(this), projCRS->baseCRS(),
projCRS->derivingConversionRef(),
projCRS->derivingConversion(),
projCRS->coordinateSystem()->alterUnit(unit));
}
}
@@ -675,9 +675,8 @@ CRSNNPtr CRS::normalizeForVisualization() const {
axisList[0])
: cs::CartesianCS::create(util::PropertyMap(), axisList[1],
axisList[0], axisList[2]);
return util::nn_static_pointer_cast<CRS>(
ProjectedCRS::create(props, projCRS->baseCRS(),
projCRS->derivingConversionRef(), cs));
return util::nn_static_pointer_cast<CRS>(ProjectedCRS::create(
props, projCRS->baseCRS(), projCRS->derivingConversion(), cs));
}
}
@@ -697,14 +696,26 @@ CRSNNPtr CRS::normalizeForVisualization() const {
* The method returns a list of matching reference CRS, and the percentage
* (0-100) of confidence in the match. The list is sorted by decreasing
* confidence.
*
* 100% means that the name of the reference entry
* <ul>
* <li>100% means that the name of the reference entry
* perfectly matches the CRS name, and both are equivalent. In which case a
* single result is returned.
* 90% means that CRS are equivalent, but the names are not exactly the same.
* 70% means that CRS are equivalent), but the names do not match at all.
* 25% means that the CRS are not equivalent, but there is some similarity in
* the names.
* Note: in the case of a GeographicCRS whose axis
* order is implicit in the input definition (for example ESRI WKT), then axis
* order is ignored for the purpose of identification. That is the CRS built
* from
* GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
* PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
* will be identified to EPSG:4326, but will not pass a
* isEquivalentTo(EPSG_4326, util::IComparable::Criterion::EQUIVALENT) test,
* but rather isEquivalentTo(EPSG_4326,
* util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)
* </li>
* <li>90% means that CRS are equivalent, but the names are not exactly the same.</li>
* <li>70% means that CRS are equivalent), but the names do not match at all.</li>
* <li>25% means that the CRS are not equivalent, but there is some similarity in
* the names.</li>
* </ul>
* Other confidence values may be returned by some specialized implementations.
*
* This is implemented for GeodeticCRS, ProjectedCRS, VerticalCRS and
@@ -756,6 +767,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->derivingConversion(), 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>>
@@ -1464,17 +1565,30 @@ static bool hasCodeCompatibleOfAuthorityFactory(
* authorityFactory is not null.
*
* The method returns a list of matching reference CRS, and the percentage
* (0-100) of confidence in the match.
* 100% means that the name of the reference entry
* (0-100) of confidence in the match:
* <ul>
* <li>100% means that the name of the reference entry
* perfectly matches the CRS name, and both are equivalent. In which case a
* single result is returned.
* 90% means that CRS are equivalent, but the names are not exactly the same.
* 70% means that CRS are equivalent (equivalent datum and coordinate system),
* but the names do not match at all.
* 60% means that ellipsoid, prime meridian and coordinate systems are
* equivalent, but the CRS and datum names do not match.
* 25% means that the CRS are not equivalent, but there is some similarity in
* the names.
* Note: in the case of a GeographicCRS whose axis
* order is implicit in the input definition (for example ESRI WKT), then axis
* order is ignored for the purpose of identification. That is the CRS built
* from
* GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
* PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
* will be identified to EPSG:4326, but will not pass a
* isEquivalentTo(EPSG_4326, util::IComparable::Criterion::EQUIVALENT) test,
* but rather isEquivalentTo(EPSG_4326,
* util::IComparable::Criterion::EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)
* </li>
* <li>90% means that CRS are equivalent, but the names are not exactly the same.
* <li>70% means that CRS are equivalent (equivalent datum and coordinate system),
* but the names do not match at all.</li>
* <li>60% means that ellipsoid, prime meridian and coordinate systems are
* equivalent, but the CRS and datum names do not match.</li>
* <li>25% means that the CRS are not equivalent, but there is some similarity in
* the names.</li>
* </ul>
*
* @param authorityFactory Authority factory (or null, but degraded
* functionality)
@@ -1898,14 +2012,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;
}
@@ -3124,10 +3242,10 @@ bool ProjectedCRS::_isEquivalentTo(
ProjectedCRSNNPtr
ProjectedCRS::alterParametersLinearUnit(const common::UnitOfMeasure &unit,
bool convertToNewUnit) const {
return create(createPropertyMap(this), baseCRS(),
derivingConversionRef()->alterParametersLinearUnit(
unit, convertToNewUnit),
coordinateSystem());
return create(
createPropertyMap(this), baseCRS(),
derivingConversion()->alterParametersLinearUnit(unit, convertToNewUnit),
coordinateSystem());
}
//! @endcond
@@ -3145,13 +3263,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) {
+170 -50
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(
@@ -3467,6 +3476,14 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
}
propertiesMethod.set(IdentifiedObject::NAME_KEY, projectionName);
std::vector<bool> foundParameters;
if (mapping) {
size_t countParams = 0;
while (mapping->params[countParams] != nullptr) {
++countParams;
}
foundParameters.resize(countParams);
}
for (const auto &childNode : projCRSNode->GP()->children()) {
if (ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER)) {
const auto &childNodeChildren = childNode->GP()->children();
@@ -3487,11 +3504,18 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
continue;
}
}
const auto *paramMapping =
auto *paramMapping =
mapping ? getMappingFromWKT1(mapping, parameterName) : nullptr;
if (mapping &&
mapping->epsg_code == EPSG_CODE_METHOD_MERCATOR_VARIANT_B &&
ci_equal(parameterName, "latitude_of_origin")) {
for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) {
if (mapping->params[idx]->epsg_code ==
EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN) {
foundParameters[idx] = true;
break;
}
}
parameterName = EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN;
propertiesParameter.set(
Identifier::CODE_KEY,
@@ -3499,6 +3523,12 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
propertiesParameter.set(Identifier::CODESPACE_KEY,
Identifier::EPSG);
} else if (paramMapping) {
for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) {
if (mapping->params[idx] == paramMapping) {
foundParameters[idx] = true;
break;
}
}
parameterName = paramMapping->wkt2_name;
if (paramMapping->epsg_code != 0) {
propertiesParameter.set(Identifier::CODE_KEY,
@@ -3522,6 +3552,38 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
}
}
// Add back important parameters that should normally be present, but
// are sometimes missing. Currently we only deal with Scale factor at
// natural origin. This is to avoid a default value of 0 to slip in later.
// But such WKT should be considered invalid.
if (mapping) {
for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) {
if (!foundParameters[idx] &&
mapping->params[idx]->epsg_code ==
EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN) {
emitRecoverableWarning(
"The WKT string lacks a value "
"for " EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN
". Default it to 1.");
PropertyMap propertiesParameter;
propertiesParameter.set(
Identifier::CODE_KEY,
EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN);
propertiesParameter.set(Identifier::CODESPACE_KEY,
Identifier::EPSG);
propertiesParameter.set(
IdentifiedObject::NAME_KEY,
EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN);
parameters.push_back(
OperationParameter::create(propertiesParameter));
values.push_back(ParameterValue::create(
Measure(1.0, UnitOfMeasure::SCALE_UNITY)));
}
}
}
return Conversion::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"),
propertiesMethod, parameters, values)
@@ -4444,12 +4506,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 +4519,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 +4527,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 +7544,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 +8297,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 +8390,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 +8616,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 +8663,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 +8727,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 +8756,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 +8807,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 +8914,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 +9057,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);
+6 -1
View File
@@ -105,6 +105,7 @@ Thomas Knudsen, thokn@sdfe.dk, 2016-05-20
#include "geodesic.h"
#include "proj.h"
#include "proj_internal.h"
#include "proj_experimental.h"
PROJ_HEAD(pipeline, "Transformation pipeline manager");
PROJ_HEAD(pop, "Retrieve coordinate value from pipeline stack");
@@ -136,7 +137,11 @@ static PJ_LPZ pipeline_reverse_3d (PJ_XYZ xyz, PJ *P);
static PJ_XY pipeline_forward (PJ_LP lp, PJ *P);
static PJ_LP pipeline_reverse (PJ_XY xy, PJ *P);
void pj_pipeline_assign_context_to_steps( PJ* P, PJ_CONTEXT* ctx )
{
for (int i = 1; i <= static_cast<struct pj_opaque*>(P->opaque)->steps; i++)
proj_assign_context(static_cast<struct pj_opaque*>(P->opaque)->pipeline[i], ctx);
}
static PJ_COORD pipeline_forward_4d (PJ_COORD point, PJ *P) {
+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);
+3 -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&);
@@ -926,6 +926,8 @@ std::string pj_double_quote_string_param_if_needed(const std::string& str);
PJ *pj_create_internal (PJ_CONTEXT *ctx, const char *definition);
PJ *pj_create_argv_internal (PJ_CONTEXT *ctx, int argc, char **argv);
void pj_pipeline_assign_context_to_steps( PJ* P, PJ_CONTEXT* ctx );
/* classic public API */
#include "proj_api.h"
+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;

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