Compare commits

...
108 Commits
Author SHA1 Message Date
Mike Taves 766bc9f56d ReadTheDocs: update output directory for artefacts, other updates 2023-01-25 20:56:41 +13:00
Mike Taves 59c5e47141 Improve docs for 6.3 2023-01-25 01:45:42 +13:00
Mike Taves 48fc4f3ed6 Implement ReadTheDocs for 6.3, disable other CI workflows (#3580) 2023-01-22 14:05:43 +13:00
Kristian Evers df59a7047e Bump version numbers for a potential 6.3.3 release 2020-05-01 11:05:39 +02:00
Kristian Evers 274948f792 Update NEWS for 6.3.2 2020-04-27 11:02:28 +02:00
Kristian Evers 0ea51a6a2b Bump version numbers for 6.3.2 2020-04-27 10:27:55 +02:00
Kristian Evers 60b47101b7 Update man-pages from Sphinx-docs 2020-04-27 10:24:51 +02:00
Kristian Evers 2058fffadb Update ABI numbers for 6.3.2 2020-04-27 10:22:56 +02:00
Even Rouault 5732970a48 pipeline initialization: avoid deep recursion on corrupted PROJ string like https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=21889 2020-04-26 16:48:09 +02:00
Kristian EversandGreg Troxel 3f348c9da4 Update cs2cs options -r/-s to reflect axis ordering of PROJ >6
Originally proposed by Greg Troxel on the mailing list:
https://lists.osgeo.org/pipermail/proj/2020-April/009597.html

Co-authored-by: Greg Troxel <gdt@lexort.com>
2020-04-26 15:54:50 +02:00
Even Rouault c07974f92b projinfo: do not emit warnings about missing grids in quiet mode 2020-04-25 23:47:00 +02:00
Even Rouault 83ca01b4ea Merge pull request #2188 from rouault/backport_6_3_pr2183
[Backport 6.3] io.hpp: avoid dependency to proj_json_streaming_writer.hpp (fixes #2182)
2020-04-24 11:23:40 +02:00
Even Rouault 0fc46e9175 Merge pull request #2187 from rouault/backport_6_3_pr2185
[Backport 6.3] Fix support of WKT1_GDAL with netCDF rotated pole formulation (#2185)
2020-04-24 11:23:26 +02:00
Even Rouault d328c1c85c Fix support of WKT1_GDAL with netCDF rotated pole formulation (#2185)
Contributes to fixing issue raised in
https://lists.osgeo.org/pipermail/gdal-dev/2020-April/052003.html
2020-04-23 22:46:08 +02:00
Even Rouault dd2dd6cd2e io.hpp: avoid dependency to proj_json_streaming_writer.hpp (fixes #2182) (#2183) 2020-04-23 22:45:50 +02:00
Even Rouault 34fde0b4a4 Merge pull request #2189 from rouault/backport_6_3_cirrusyml_improvements
.cirrus.yml: backport improvements [skip travis] [skip appveyor]
2020-04-23 22:42:54 +02:00
Even Rouault d53437f0f8 .cirrus.yml: backport improvements [skip travis] [skip appveyor] 2020-04-23 22:26:58 +02:00
Even Rouault 3d2a627e49 Merge pull request #2178 from rouault/backport_6_3_pr2174
[Backport 6.3] PROJ4 string import: take into correctly non-metre unit when the string looks like the one for WGS 84 / Pseudo Mercator
2020-04-22 22:47:25 +02:00
Even Rouault 34a6fef7de PROJ4 string import: take into correctly non-metre unit when the string looks like the one for WGS 84 / Pseudo Mercator (fixes https://github.com/OSGeo/gdal/issues/2433) (#2174) 2020-04-22 19:54:45 +02:00
Even Rouault d9934eb07f Ingestion of WKT1_GDAL: correctly map 'Cylindrical_Equal_Area'
Map it to 'Lambert Cylindrical Equal Area' / EPSG:9835 non-spherical
method, when the ellipsoid is not a sphere. And rationalize the
handling of this for other methods with spherical vs non-spherical formulations
2020-04-19 16:11:33 +02:00
Even Rouault d032e0d957 Doxyfile: remove TCL_SUBST variable considered obsolete by latest Doxygen 2020-04-19 16:11:23 +02:00
Even Rouault 678fa3e2a1 travis/osx/before_install.sh: 'brew install graphviz' for missing 'dot' program 2020-04-19 16:11:18 +02:00
Even Rouault df1e73fc6e proj_create(): improve error message in case of PJ* failure instanciation 2020-04-10 20:24:11 +02:00
Even Rouault 2af259f649 travis/osx/before_install.sh: use fixed version of sphinx and breathe to avoid build failure [skip appveyor] 2020-04-09 12:33:42 +02:00
Even Rouault adc9c9976b createFromPROJString(): ignore +wktext in '+init=epsg:XXX +wktext' string (refs https://github.com/OSGeo/gdal/issues/2392) 2020-04-09 11:15:05 +02:00
Even Rouault c04b2274c3 createOperations(): improve results of compoundCRS to compoundCRS case (fixes #2115) 2020-04-04 19:22:39 +02:00
Even Rouault 4d9e3c07cd .travis.yml: fix issue with ubuntu-toolchain-r-test source 2020-04-03 14:45:02 +02:00
Even Rouault 799963acba Merge pull request #2124 from PROJ-BOT/backport-2123-to-6.3
[Backport 6.3] Make sure that importing a Projected 3D CRS from WKT:2019 keeps the base geographic CRS as 3D (fixes #2122)
2020-04-03 10:36:15 +02:00
github-actions[bot] 09a936a29c Make sure that importing a Projected 3D CRS from WKT:2019 keeps the base geographic CRS as 3D (fixes #2122) 2020-04-03 08:06:26 +00:00
Even Rouault 5bb88a1d8c Merge pull request #2118 from rouault/backport_6_3_fix_2116
[Backport 6.3] ESRI_WKT ingestion: make sure to identify to non-deprecated EPSG entry when possible (fixes #2116)
2020-03-30 23:56:39 +02:00
Even Rouault 9c8dc7e59d ESRI_WKT ingestion: make sure to identify to non-deprecated EPSG entry when possible (fixes #2116) 2020-03-30 19:48:20 +02:00
Even Rouault 977305e82a Merge pull request #2110 from PROJ-BOT/backport-2109-to-6.3
[Backport 6.3] Fix working of Helmert transform between the horizontal part of 2 compoundCRS (fixes #2108)
2020-03-30 10:32:21 +02:00
github-actions[bot] 2b91a50729 Fix working of Helmert transform between the horizontal part of 2 compoundCRS (fixes #2108) 2020-03-29 22:37:47 +00:00
Pedro Venancio 9d596034ce Add entries in grid_alternatives for Portugal grids coming from ESRI entries (#2103)
Fixes #2096
2020-03-27 15:35:31 +01:00
Even Rouault b3fe4a04ed Merge pull request #2091 from PROJ-BOT/backport-2090-to-6.3
[Backport 6.3] EngineeringCRS: when exporting to WKT1_GDAL, output unit and axis (fixes https://github.com/OSGeo/gdal/issues/2347)
2020-03-25 17:55:46 +01:00
github-actions[bot] 2eb726f0e1 EngineeringCRS: when exporting to WKT1_GDAL, output unit and axis (fixes https://github.com/OSGeo/gdal/issues/2347) 2020-03-25 14:16:02 +00:00
github-actions[bot] 60ed38a248 ProjectedCRS::identify(): tune it to better work with ESRI WKT representation of EPSG:2193 2020-03-12 11:03:55 +01:00
Even Rouault e89734162c Merge pull request #2047 from PROJ-BOT/backport-2044-to-6.3
[Backport 6.3] data/Makefile.am: remove bashism
2020-03-10 23:05:43 +01:00
github-actions[bot] 3a8a9f7a00 data/Makefile.am: remove bashism 2020-03-10 20:53:06 +00:00
Kristian Evers f49b248a9f Merge pull request #2035 from kbevers/backport-6.3-60d3df6
[backport 6.3] src/projections/: remove assignments in expression and multiple state…
2020-03-09 13:58:51 +01:00
Even Rouault f830121a2f src/projections/: remove assignments in expression and multiple statements per line
Should hopefully result in no change in results, and hopefully more
readable code...
2020-03-09 11:08:58 +01:00
Even Rouault 04f74f5396 Merge pull request #2013 from PROJ-BOT/backport-2011-to-6.3
[Backport 6.3] createUnitOfMeasure(): use full double resolution for the conversion factor
2020-03-04 00:32:01 +01:00
github-actions[bot] 0fce24abcb createUnitOfMeasure(): use full double resolution for the conversion factor 2020-03-03 18:43:14 +00:00
github-actions[bot] e8fbfa59a9 Fix bad copy&replace pattern on HEALPix and rHEALPix projection names 2020-03-03 07:49:13 +01:00
Even Rouault 73be5b1e68 6.3 branch: disable doc publication [ci skip] 2020-03-01 12:52:24 +01:00
Even Rouault b0d27b2cc3 createOperations(): fix wrong pipeline generation with CRS that has +nadgrids= and +pm= (#1998)
Fixes issue reported at
https://lists.osgeo.org/pipermail/gdal-dev/2020-February/051749.html

The generated pipeline assumes that the input coordinates for the grid transformation
were related to the non-Greenwich based datum, so we must compensate for that and
add logic to go back to Greenwich.
2020-03-01 11:51:21 +01:00
Even Rouault df73b75b3d Merge pull request #1993 from PROJ-BOT/backport-1990-to-6.3
[Backport 6.3] proj_create_crs_to_crs(): avoid potential reprojection failures when reprojecting area of use to source and target CRS
2020-02-27 19:28:37 +01:00
github-actions[bot] 0224644ae6 proj_create_crs_to_crs(): avoid potential reprojection failures when reprojecting area of use to source and target CRS 2020-02-27 11:20:02 +00:00
Even Rouault 4dbb80b693 createOperations(): be robust to a GeographicCRS having a wrong ID attached to it (fixes #1982) 2020-02-25 16:32:08 +01:00
Even Rouault 8a1f24dd37 Doc: advertize lat_0 for proj=nsper 2020-02-21 13:36:36 +01:00
Martin Dobias b07d8d8077 Improvements to the INSERT 2020-02-21 11:25:19 +01:00
Martin Dobias 9e0148f844 Added more comments 2020-02-21 11:25:19 +01:00
Martin Dobias c9d4b0efb9 Add alternative grid for JTSK - JTSK03 transform (EPSG:8364)
The definition of EPSG:8364 uses NADCON method for horizontal grid (.las/.los files)
but this format is not supported by PROJ.

UGKK (Slovak Geodetic and Cartographic Institute) provides NADCON .las/.los files here:
https://www.geoportal.sk/files/gz/slovakia_jtsk03_to_jtsk.zip

Additionally UGKK also provides the same grid file in NTv2 format:
https://www.geoportal.sk/files/gz/slovakia_jtsk03_to_jtsk_ntv2.zip

So let's add the NTv2 file the grid_alternatives table so that PROJ can automatically pick it up...
2020-02-21 11:25:19 +01:00
Even Rouault 50fc420386 Merge pull request #1947 from PROJ-BOT/backport-1945-to-6.3
[Backport 6.3] validateParameters(): fix false-positive warning on Equidistant Cylindrical
2020-02-19 22:35:56 +01:00
github-actions[bot] b33b2d8ac0 validateParameters(): fix false-positive warning on Equidistant Cylindrical 2020-02-19 17:13:34 +00:00
Even Rouault 078eb3e601 Doc: update with 6.3.1 release [skip appveyor] 2020-02-13 16:28:29 +01:00
Bas Couwenberg a6425535db Create README from README.md when calling make.
The README file was only generated when calling `make README`.

Closes: #1927
2020-02-12 14:53:17 +01:00
Even Rouault 0e993d9744 Update NEWS to 6.3.1 2020-02-10 10:51:02 +01:00
Even Rouault fd9c81b60a Update version and libtool number to 6.3.1 2020-02-10 10:34:57 +01:00
Even Rouault e379c1116f Update man-pages from Sphinx-docs 2020-02-10 10:32:50 +01:00
Even Rouault 83d02d0d17 Dockerfile: make it non-git dependent, so that it can work in branches, and Docker Hub builds; update version of grid archives 2020-02-09 17:59:16 +01:00
Even Rouault 98f38e4b57 Merge pull request #1919 from rouault/backport_fix_for_1906
[Backport 6.3] fixes for #1906 (test failures on i386)
2020-02-08 14:49:48 +01:00
Even Rouault a5d856771e Fix numerical precision issues in vandg and robin
Refs #1906
Fix remaining issues of https://github.com/OSGeo/PROJ/issues/1906#issuecomment-583168348
as found with gcc 8.2.0 -m32 -O2
2020-02-08 10:50:32 +01:00
Even Rouault 0fc56e02e5 Fix test issues on i386
Fix a few issues of #1906 found when running the test suite
on Ubuntu 16.04 with gcc 5.5 -m32. When applied on top of
the fix of #1912, make check succeeds
2020-02-08 10:50:32 +01:00
Kristian Evers 0019962137 cart: Avoid discontinuity at poles in the inverse case
This should avoid issues with numerical stability as uncovered in
https://github.com/OSGeo/PROJ/issues/1906.

Practically speaking this change isn't going to affect real life
scenarios since the position of the center of the Earth is rarely
expressed in geodetic coordinates.
2020-02-08 10:50:31 +01:00
Even Rouault 20e9bdea53 Merge pull request #1916 from rouault/backport_1884_1914_1915
[Backport 6.3] PR #1884 #1914 #1915
2020-02-06 19:42:04 +01:00
Even Rouault 7fb3ebbf37 Fix identification of ESRI-style datum names starting with D_ but without alias
Fixes #1911
2020-02-06 14:18:39 +01:00
Even Rouault 589c44aa12 Fix performance issue, affecting projinfo EPSG:7842
Fixes #1913

AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates() issued
a complex SQL query that pushes the SQLite3 query plan optimizer to its limits.
Was working reasonably with sqlite 3.11, but not with later versions.
So put less constraints in the main query and do post-processing checks and
auxiliary requests to avoid such issues.

For some unknown reason, this slightly slows down a bit execution time of the
whole test_cpp_api binary (~ 10%), but couldn't come with something better,
despite trying many variations of the main SQL query. It seems that in the
general case the non-filter LEFT JOIN on the supersession table helped,
except on this EPSG:7842 case.
2020-02-06 13:55:06 +01:00
Even Rouault d7cd77244e Fix ingestion of +proj=cea with +k_0
Fixes #1881

Digging into the implementation of proj=cea, it appears that
k_0 and lat_ts are intended to be exclusive ways of specifying the
same concept. EPSG only models the variant using lat_s.
So if k_0 is found and lat_ts is absent, compute the equivalent
value of lat_ts from k_0.

Note: k_0 should normally be in the [0,1] range. In case creative users
would use something outside, we raise an exception, even if the cea
implementation could potentially deal with any k_0 value. Hopefully
this is a (reasonable) limitation that will address nominal use cases.
2020-02-06 13:45:17 +01:00
Kristian Evers 4d0b2e91c5 Merge pull request #1905 from russkel/patch-1
tests: force use of bash for proj_add_test_script_sh
2020-02-04 13:27:40 +01:00
Russ e7450dd3ac tests: force use of bash for proj_add_test_script_sh 2020-02-04 10:44:46 +11:00
Anshul Singhvi 471822610b Mention the Julia package Proj4.jl
in `docs/src/development/bindings.rst`
2020-01-28 12:16:16 +01:00
Kristian Evers bd500d9a7e Merge pull request #1889 from PROJ-BOT/backport-1888-to-6.3
[Backport 6.3] Doc: advertize FOSS4G 2020
2020-01-27 09:15:46 +01:00
github-actions[bot] 18569b7f30 Doc: advertize FOSS4G 2020 2020-01-26 20:37:53 +00:00
Even Rouault 28121d1688 Merge pull request #1875 from rouault/backport_fix_wrong_use_of_derivingConversion
[6.3 backport] Fix wrong use of derivingConversionRef() that caused GDAL bug
2020-01-23 23:26:26 +01:00
Even Rouault 9a4b8a6c21 Merge pull request #1874 from rouault/backport_epsg_9_8_6
[6.3 backport] Database: update to EPSG v9.8.6
2020-01-23 23:26:17 +01:00
Even Rouault 79eed0da28 Fix wrong use of derivingConversionRef() that caused GDAL bug
Hopefully final cut at solving the same class of bug that the one
that affected QGIS in December.

This time, this hit GDAL in the situation of
https://lists.osgeo.org/pipermail/gdal-dev/2020-January/051500.html
The bug fix for that particular issue is in
PROJStringParser::createFromPROJString()

But grepping more in the code base, I could find other potential smelly
situations (might not be issues, but better be safe than sorry),
so let's fix them too.

Bottom line is:
derivingConversionRef() should *only* be used for consultation, and
never to create a new ProjectedCRS()
2020-01-23 19:11:05 +01:00
Even Rouault ba37cd70b2 Database: add a geoid_like value for proj_method column of grid_alternatives, fix related entries and simplify/robustify logic to deal with EPSG 'Geographic3D to GravityRelatedHeight' methods 2020-01-23 19:05:50 +01:00
Even Rouault ae1a0324fb Database: update to EPSG v9.8.6
Fixes #1867
2020-01-23 19:05:48 +01:00
Kristian Evers 0bd886d8b2 docs: add note about autogen.sh to install guide 2020-01-23 10:49:56 +01:00
Even Rouault a217239fa5 appveyor.yml: tune PATH order to fix error when running 'proj' on x64 builds 2020-01-22 15:06:47 +01:00
Kristian Evers 9b00240f4b Add explanation of the PROJ.4 -> PROJ shift to FAQ
closes #1511
2020-01-22 08:24:36 +01:00
Kristian Evers 1d4654847d Merge pull request #1861 from ravenAtSafe/patch-1
Document need for quotes when a pipeline grid path contains spaces
2020-01-22 08:19:13 +01:00
Even Rouault 31060c33c9 ProjectedCRS::identify(): fix wrong identification of some ESRI WKT linked to units
Fixes bug reported in https://lists.osgeo.org/pipermail/gdal-dev/2020-January/051481.html
2020-01-21 22:53:22 +01:00
Raven Kopelman 46d97de5bb Doc use of vertical grids with spaces in path 2020-01-21 09:53:10 -08:00
Raven Kopelman 673c60b140 Doc use of deformation grids with spaces in path 2020-01-21 09:51:41 -08:00
Raven Kopelman c28701eea5 grammar cleanup, removed confusing "either" 2020-01-21 09:48:41 -08:00
Raven Kopelman 28ff9563e4 Fix spelling mistake in "horizontal" 2020-01-21 09:46:56 -08:00
Raven Kopelman e311d508b5 Need quotes when a pipeline grid path contains spaces
Not certain whether this is appropriate when you are dealing with lists of grids, but it definitely helps for a single grid.
2020-01-20 16:35:03 -08:00
Kristian Evers d6330021e8 Explain why sweep axis affects geolocation (#1853)
Explain why sweep axis affects geolocation
2020-01-16 16:39:14 +01:00
Gerrit Holl 4915321e19 Explain why sweep axis affects geolocation
In the note on the sweep angle, add a line explaining why the sweep angle ultimately affects the geolocation, as it is not immediately or trivially obvious to see why it should matter what the outer or inner gimbal is.  To this end, link to a post on Mathematics Stack Exchange that explains this very well.
2020-01-16 14:52:11 +01:00
Even Rouault 3889496c8e Add RFC 4 text: Remote access to grids and GeoTIFF grids (#1747) 2020-01-15 22:12:59 +01:00
Kristian Evers 8583e33bad doc: Fix error in previous commit (duplicate link targets) 2020-01-14 12:48:20 +01:00
Kristian Evers 33a29c833f Doc: Update index of development section
Adds links to git repositories and adjusts deprecation warnings to
reflect that PROJ 6 has been released.
2020-01-14 11:02:55 +01:00
Even Rouault 1302fc0463 unitconvert with mjd time format: avoid potential integer overflow
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=20072
2020-01-13 22:13:58 +01:00
Even Rouault e18e4823ac WKT1_GDAL export: limit datum name massaging to names matching EPSG (fixes #1835) 2020-01-11 12:02:14 +01:00
Even Rouault 6a2ee6fbc8 createOperations(): fix dealing with projected 3D CRS whose Z units != metre 2020-01-11 11:59:21 +01:00
Even Rouault 7d46771382 CompoundCRS::identify(): avoid exception when horiz/vertical part is a BoundCRS
The exception only affects C++ users. It was caught by the C layer.
2020-01-11 11:56:57 +01:00
Even Rouault 91e360027b projinfo: use No. abbreviation instead of UTF-8 character (fixes #1828) 2020-01-07 22:02:11 +01:00
Even Rouault d65f44248a Doc: add a 'Feedback from downstream projects' for PROJ6 migration 2020-01-06 16:22:10 +01:00
Even Rouault 6358877b2a operations_computation.rst: update with latest 6.3 adjustments 2020-01-02 15:30:38 +01:00
snowman2 b391fbc78b fix exporting CoordinateSystem to PROJ JSON with ID 2020-01-02 13:30:48 +01:00
Kristian Evers 6baadad43b Update github version in Sphinx config 2020-01-01 21:48:21 +01:00
Kristian Evers 77ae7cadbe switch to 6.3 branch for website generation 2020-01-01 21:45:19 +01:00
Kristian Evers 40e8677bf5 Update website for 6.3.0 release 2020-01-01 21:40:07 +01:00
Even Rouault 6d64ff8817 Travis: fix OSX builds 2019-12-29 00:30:41 +01:00
Even Rouault 5bd8446ef4 Database: add mapping for TOR27CSv1.GSB 2019-12-28 23:27:25 +01:00
Even Rouault 737e71f3b2 Database: add mapping for gg10_smv2.mnt and gg10_sbv2.mnt French grids 2019-12-28 23:27:25 +01:00
179 changed files with 12415 additions and 2019 deletions
+2
View File
@@ -0,0 +1,2 @@
.git
build
+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.3 -- 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
+1 -1
View File
@@ -1,6 +1,6 @@
To cite PROJ in publications use:
PROJ contributors (2019). PROJ coordinate transformation software
PROJ contributors (2020). PROJ coordinate transformation software
library. Open Source Geospatial Foundation. URL https://proj.org/.
A BibTeX entry for LaTeX users is
+2 -2
View File
@@ -103,9 +103,9 @@ colormsg(_HIBLUE_ "Configuring PROJ:")
#PROJ version information
################################################################################
include(ProjVersion)
proj_version(MAJOR 6 MINOR 3 PATCH 0)
proj_version(MAJOR 6 MINOR 3 PATCH 3)
set(PROJ_API_VERSION "18")
set(PROJ_BUILD_VERSION "18.0.3")
set(PROJ_BUILD_VERSION "18.2.3")
################################################################################
# Build features and variants
+8 -8
View File
@@ -5,21 +5,21 @@ FROM ubuntu:18.04 as builder
MAINTAINER Howard Butler <howard@hobu.co>
ARG PROJ_VERSION=master
ARG DESTDIR="/build"
# Setup build env
RUN apt-get update -y \
&& apt-get install -y --fix-missing --no-install-recommends \
software-properties-common build-essential ca-certificates \
git make cmake wget unzip libtool automake \
make cmake wget unzip libtool automake \
zlib1g-dev libsqlite3-dev pkg-config sqlite3
RUN git clone https://github.com/OSGeo/PROJ.git \
&& cd PROJ \
COPY . /PROJ
RUN cd /PROJ \
&& ./autogen.sh \
&& ./configure --prefix=/usr \
&& make \
&& make -j$(nproc) \
&& make install
@@ -38,10 +38,10 @@ RUN apt-get update; \
RUN \
mkdir -p /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-1.8.zip && unzip -j -u -o proj-datumgrid-1.8.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-europe-1.2.zip && unzip -j -u -o proj-datumgrid-europe-1.2.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-oceania-1.0.zip && unzip -j -u -o proj-datumgrid-oceania-1.0.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-europe-1.5.zip && unzip -j -u -o proj-datumgrid-europe-1.5.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-oceania-1.1.zip && unzip -j -u -o proj-datumgrid-oceania-1.1.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-world-1.0.zip && unzip -j -u -o proj-datumgrid-world-1.0.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-north-america-1.2.zip && unzip -j -u -o proj-datumgrid-north-america-1.2.zip -d /usr/share/proj; \
curl -LOs https://download.osgeo.org/proj/proj-datumgrid-north-america-1.3.zip && unzip -j -u -o proj-datumgrid-north-america-1.3.zip -d /usr/share/proj; \
rm *.zip
COPY --from=builder /build/usr/share/proj/ /usr/share/proj/
-6
View File
@@ -230,12 +230,6 @@ TAB_SIZE = 4
ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
+1
View File
@@ -12,6 +12,7 @@ ACLOCAL_AMFLAGS = -I m4
check-local:
cd test; $(MAKE) check
all-local: README
README: README.md
fgrep -v "[![" $< > $@
+120
View File
@@ -1,3 +1,123 @@
6.3.2 Release Notes
-------------------
Bug fixes
---------
o validateParameters(): fix false-positive warning on
Equidistant Cylindrical (#1947)
o proj_create_crs_to_crs(): avoid potential reprojection failures when
reprojecting area of use to source and target CRS (#1993)
o createOperations(): fix wrong pipeline generation with CRS that has +nadgrids=
and +pm= (#2003)
o Fix bad copy&replace pattern on HEALPix and rHEALPix projection names (#2006)
o createUnitOfMeasure(): use full double resolution for the conversion
factor (#2013)
o data/Makefile.am: remove bashism (#2047)
o ProjectedCRS::identify(): tune it to better work with ESRI WKT representation
of EPSG:2193 (#2058)
o EngineeringCRS: when exporting to WKT1_GDAL, output unit and axis (#2091)
o Add missing entries in grid_alternatives for Portugal grids coming from
ESRI entries (#2103)
o Fix working of Helmert transform between the horizontal part of 2
compoundCRS (#2110)
o ESRI_WKT ingestion: make sure to identify to non-deprecated EPSG entry when
possible (#2118)
o Make sure that importing a Projected 3D CRS from WKT:2019 keeps the base
geographic CRS as 3D (#2124)
o createOperations(): improve results of compoundCRS to compoundCRS case (#2130)
o PROJ4 string import: take into correctly non-metre unit when the string looks
like the one for WGS 84 / Pseudo Mercator (#2178)
o Fix support of WKT1_GDAL with netCDF rotated pole formulation (#2187)
o io.hpp: avoid dependency to proj_json_streaming_writer.hpp (#2188)
THANKS TO
---------
Pedro Venancio
Bas Couwenberg
Martin Dobias
Kristian Evers
Even Rouault
6.3.1 Release Notes
-------------------
Updates
-------
o Update the EPSG database to version 9.8.6
o Database: add mapping for gg10_smv2.mnt and gg10_sbv2.mnt French grids
o Database: add mapping for TOR27CSv1.GSB
Bug fixes
---------
o Fix wrong use of derivingConversionRef() that caused issues with use of
+init=epsg:XXXX by GDAL (affecting R spatial libraries) or in MapServer
o fix exporting CoordinateSystem to PROJ JSON with ID
o projinfo: use No. abbreviation instead of UTF-8 character (#1828)
o CompoundCRS::identify(): avoid exception when horiz/vertical part is a
BoundCRS
o createOperations(): fix dealing with projected 3D CRS whose Z units != metre
o WKT1_GDAL export: limit datum name massaging to names matching EPSG (#1835)
o unitconvert with mjd time format: avoid potential integer overflow
(ossfuzz 20072)
o ProjectedCRS::identify(): fix wrong identification of some ESRI WKT linked
to units
o Database: add a geoid_like value for proj_method column of grid_alternatives,
fix related entries and simplify/robustify logic to deal with EPSG
'Geographic3D to GravityRelatedHeight' methods
o Fix ingestion of +proj=cea with +k_0 (#1881)
o Fix performance issue, affecting PROJ.4 string generation of EPSG:7842
(#1913)
o Fix identification of ESRI-style datum names starting with D_ but without
alias (#1911)
o cart: Avoid discontinuity at poles in the inverse case (#1906)
o Various updates to make regression test suite pass with gcc on i386 (#1906)
THANKS TO
---------
Alan D. Snow
GitHub user @russkel
Gerrit Holl
Anshul Singhvi
Raven Kopelman
Kristian Evers
Even Rouault
6.3.0 Release Notes
-------------------
+1 -1
View File
@@ -23,7 +23,7 @@ function(proj_add_test_script_sh SH_NAME BIN_USE)
if(${TEST_OK})
add_test(NAME "${testname}"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/data
COMMAND ${PROJECT_SOURCE_DIR}/test/cli/${SH_NAME}
COMMAND bash ${PROJECT_SOURCE_DIR}/test/cli/${SH_NAME}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${${BIN_USE}}
)
set_tests_properties( ${testname}
+1 -1
View File
@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([PROJ], [6.3.0],
AC_INIT([PROJ], [6.3.3],
[https://github.com/OSGeo/PROJ/issues], proj, [https://proj.org])
AC_CONFIG_MACRO_DIR([m4])
AC_LANG(C)
+1 -1
View File
@@ -82,7 +82,7 @@ proj.db: $(DATAPATH)/sql/*.sql
echo "" | head -c1; \
if [ $$? -eq 0 ] ; then \
echo "Running foreign_key_check"; \
if [[ $$(echo "pragma foreign_key_check;" | sqlite3 proj.db | head -c1 | wc -c) -ne 0 ]]; then \
if [ $$(echo "pragma foreign_key_check;" | sqlite3 proj.db | head -c1 | wc -c) -ne 0 ]; then \
echo "Foreign key check failed"; \
$(RM) proj.db; \
exit 1; \
File diff suppressed because it is too large Load Diff
+20 -10
View File
@@ -261,14 +261,14 @@ INSERT INTO "area" VALUES('EPSG','1281','Australia - mainland','Australia - Aust
INSERT INTO "area" VALUES('EPSG','1282','Australia - Tasmania','Australia - Tasmania including islands - onshore.',-43.7,-39.52,143.77,148.55,0);
INSERT INTO "area" VALUES('EPSG','1283','Canada - Maritime Provinces','Canada - New Brunswick; Nova Scotia; Prince Edward Island.',43.41,48.07,-69.05,-59.73,0);
INSERT INTO "area" VALUES('EPSG','1284','Europe - FSU, Czechoslovakia - onshore','Armenia; Azerbaijan; Belarus; Czechia; Estonia - onshore; Georgia - onshore; Kazakhstan; Kyrgyzstan; Latvia - onshore; Lithuania - onshore; Moldova; Russian Federation - onshore; Slovakia; Tajikistan; Turkmenistan; Ukraine - onshore; Uzbekistan.',35.14,77.79,12.09,-169.57,0);
INSERT INTO "area" VALUES('EPSG','1285','Indonesia - Java and Bali onshore','Indonesia - onshore Java and Bali.',-8.91,-5.83,105.06,115.77,0);
INSERT INTO "area" VALUES('EPSG','1285','Indonesia - Bali, Java and western Sumatra onshore','Indonesia - onshore - Bali, Java and western Sumatra.',-8.91,5.97,95.16,115.77,0);
INSERT INTO "area" VALUES('EPSG','1286','Europe - Liechtenstein and Switzerland','Liechtenstein; Switzerland.',45.82,47.81,5.96,10.49,0);
INSERT INTO "area" VALUES('EPSG','1287','Indonesia - Banga & Belitung Islands','Indonesia - Banga and Belitung Islands.',-3.3,-1.44,105.07,108.35,0);
INSERT INTO "area" VALUES('EPSG','1288','Angola - Angola proper','Angola - Angola proper - onshore and offshore.',-18.02,-5.82,8.2,24.09,0);
INSERT INTO "area" VALUES('EPSG','1289','Canada - CGVD28','Canada - onshore - Alberta; British Columbia; Manitoba south of 57°N; New Brunswick; Northwest Territories south west of a line between 60°N, 110°W and the coast at 132°W; Nova Scotia; Ontario south of 52°N; Prince Edward Island; Quebec - mainland west of 66°W and south of 55°N; Saskatchewan south of 55°N; Yukon.',41.67,69.8,-141.01,-59.73,0);
INSERT INTO "area" VALUES('EPSG','1290','Africa - Botswana, Eswatini, Lesotho and South Africa','Botswana; Eswatini (Swaziland); Lesotho; South Africa - mainland.',-34.88,-17.78,16.45,32.95,0);
INSERT INTO "area" VALUES('EPSG','1291','Asia - FSU - Caspian Sea','Azerbaijan - offshore; Kazakhstan - offshore; Russian Federation - Caspian Sea; Turkmenistan - offshore.',37.35,46.97,46.95,53.93,0);
INSERT INTO "area" VALUES('EPSG','1292','Argentina - Neuquen province','Argentina - Neuquen province.',-41.1,-36.14,-71.96,-68.01,0);
INSERT INTO "area" VALUES('EPSG','1292','Argentina - Neuquen basin','Argentina – Mendoza and Neuquen provinces - Neuquen basin.',-40.17,-34.26,-71.19,-66.52,0);
INSERT INTO "area" VALUES('EPSG','1293','Brazil - Corrego Alegre 1970-1972','Brazil - onshore - west of 54°W and south of 18°S; also south of 15°S between 54°W and 42°W; also east of 42°W.',-33.78,-2.68,-58.16,-34.74,0);
INSERT INTO "area" VALUES('EPSG','1294','Portugal - mainland - onshore','Portugal - mainland - onshore.',36.95,42.16,-9.56,-6.19,0);
INSERT INTO "area" VALUES('EPSG','1295','Germany - DHDN','Germany - onshore - Baden-Wurtemberg, Bayern, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein. Also former DDR states of Sachsen and Thuringen by transformation.',47.27,55.06,5.87,15.03,1);
@@ -279,7 +279,7 @@ INSERT INTO "area" VALUES('EPSG','1299','Europe - EVRF2000','Europe - onshore -
INSERT INTO "area" VALUES('EPSG','1300','Iran - FD58','Iran - Arwaz area and onshore Gulf coast west of 54°E, Lavan Island, offshore Balal field and South Pars blocks 2 and 3.',26.21,33.22,47.13,53.61,0);
INSERT INTO "area" VALUES('EPSG','1301','Portugal - Azores C - onshore','Portugal - central Azores onshore - Faial, Graciosa, Pico, Sao Jorge, Terceira.',38.32,39.14,-28.9,-26.97,0);
INSERT INTO "area" VALUES('EPSG','1302','Asia - Cambodia and Vietnam - mainland','Cambodia - mainland onshore; Vietnam - mainland onshore.',8.33,23.4,102.14,109.53,0);
INSERT INTO "area" VALUES('EPSG','1303','South America - Tierra del Fuego','Argentina and Chile - Tierra del Fuego, onshore.',-55.96,-51.99,-74.83,-63.73,0);
INSERT INTO "area" VALUES('EPSG','1303','South America - Tierra del Fuego','Chile - Tierra del Fuego, onshore; Argentina - Tierra del Fuego, onshore and offshore Atlantic west of 66°W.',-55.96,-51.65,-74.83,-63.73,0);
INSERT INTO "area" VALUES('EPSG','1304','Asia - Myanmar and Thailand onshore','Myanmar (Burma) - onshore; Thailand - onshore.',5.63,28.55,92.2,105.64,0);
INSERT INTO "area" VALUES('EPSG','1305','Europe - Ireland (Republic and Ulster) - onshore','Ireland - onshore. United Kingdom (UK) - Northern Ireland (Ulster) - onshore.',51.39,55.43,-10.56,-5.34,0);
INSERT INTO "area" VALUES('EPSG','1306','Europe - Czechoslovakia','Czechia; Slovakia.',47.73,51.06,12.09,22.56,0);
@@ -459,8 +459,8 @@ INSERT INTO "area" VALUES('EPSG','1479','Libya - west of 12°E onshore','Libya -
INSERT INTO "area" VALUES('EPSG','1480','Libya - 12°E to 18°E onshore','Libya - onshore between 12°E and 18°E.',22.51,33.06,12.0,18.01,0);
INSERT INTO "area" VALUES('EPSG','1481','Libya - 18°E to 24°E onshore','Libya - onshore between 18°E and 24°E.',19.5,33.0,17.99,24.0,0);
INSERT INTO "area" VALUES('EPSG','1482','Libya - west of 15°E onshore','Libya - onshore west of 15°E.',22.61,33.23,9.31,15.0,0);
INSERT INTO "area" VALUES('EPSG','1483','Argentina - Neuquen province east of 70.5°W','Argentina - Neuquen province east of 70°30''W.',-40.54,-36.14,-70.51,-68.01,0);
INSERT INTO "area" VALUES('EPSG','1484','Argentina - Comodoro Rivadavia - west of 67.5°W','Argentina - Comodoro Rivadavia area west of 67°30''W.',-46.7,-45.19,-69.5,-67.5,0);
INSERT INTO "area" VALUES('EPSG','1483','Argentina - Mendoza and Neuquen 70.5°W to 67.5°W','Argentina – Mendoza and Neuquen provinces between 70°30''W and 67°30''W - Neuquen and Cuyo basins.',-43.41,-31.91,-70.51,-67.49,0);
INSERT INTO "area" VALUES('EPSG','1484','Argentina - 42.5°S to 50.3°S and 70.5°W to 67.5°W','Argentina - Chibut province between 70°30''W and 67°30''W and south of approximately 42°30''S and Santa Cruz province between 70°30''W and 67°30''W and north of approximately 50°20''S.',-50.34,-42.49,-70.5,-67.49,0);
INSERT INTO "area" VALUES('EPSG','1485','Argentina - Tierra del Fuego onshore west of 67.5°W','Argentina - Tierra del Fuego onshore west of 67°30''W.',-54.9,-52.59,-68.64,-67.5,0);
INSERT INTO "area" VALUES('EPSG','1486','Argentina - Tierra del Fuego offshore','Argentina - Tierra del Fuego offshore Atlantic.',-54.93,-51.36,-68.62,-61.49,0);
INSERT INTO "area" VALUES('EPSG','1487','Cuba - onshore north of 21°30''N','Cuba - onshore north of 21°30''N but also including all of Isla de la Juventud.',21.38,23.25,-85.01,-76.91,0);
@@ -1301,7 +1301,7 @@ INSERT INTO "area" VALUES('EPSG','2321','Angola - offshore blocks 1 and 16','Ang
INSERT INTO "area" VALUES('EPSG','2322','Angola - offshore blocks 3 7 15 and 17','Angola - offshore blocks 3, 7,15 and 17.',-10.09,-6.03,10.83,13.39,0);
INSERT INTO "area" VALUES('EPSG','2323','Angola - offshore blocks 1 16 and 18','Angola - offshore blocks 1, 16 and 18.',-8.34,-6.03,11.08,12.75,0);
INSERT INTO "area" VALUES('EPSG','2324','Angola - offshore blocks 2 3 17-18 and 31-33','Angola - offshore blocks 2, 3, 17, 18, 31, 32 and 33.',-8.59,-6.01,10.41,12.84,0);
INSERT INTO "area" VALUES('EPSG','2325','Argentina - Neuquen province Chos Malal area','Argentina - Neuquen province - Chos Malal area.',-37.5,-36.14,-70.5,-70.03,0);
INSERT INTO "area" VALUES('EPSG','2325','Argentina - Neuquen province Auca Mahuida area','Argentina - Neuquen province - Auca Mahuida area.',-38.75,-37.5,-69.5,-68.25,0);
INSERT INTO "area" VALUES('EPSG','2326','Germany - West Germany all states','Germany - states of former West Germany onshore - Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein.',47.27,55.09,5.87,13.84,0);
INSERT INTO "area" VALUES('EPSG','2327','Syria - Al Whaleed area','Syria - Al Whaleed area',35.33,35.9,39.15,40.41,0);
INSERT INTO "area" VALUES('EPSG','2328','Syria - Shaddadeh area','Syria - Shaddadeh area (36°N, 41°E)',35.79,36.5,40.5,41.39,0);
@@ -2642,7 +2642,7 @@ INSERT INTO "area" VALUES('EPSG','3662','Norway - onshore - 20ºE to 21ºE','Nor
INSERT INTO "area" VALUES('EPSG','3663','Norway - onshore - 21ºE to 22ºE','Norway - onshore - between 21ºE and 22ºE.',69.03,70.71,21.0,22.0,0);
INSERT INTO "area" VALUES('EPSG','3664','USA - CONUS and Alaska - onshore','United States (USA) - CONUS and Alaska - onshore - Alabama; Alaska mainland; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',24.41,71.4,-168.26,-66.91,0);
INSERT INTO "area" VALUES('EPSG','3665','Norway - onshore - 22ºE to 23ºE','Norway - onshore - between 22ºE and 23ºE.',68.69,70.81,22.0,23.0,0);
INSERT INTO "area" VALUES('EPSG','3666','Indonesia - Java and Java Sea','Indonesia - Java and Bali onshore, offshore southern Java Sea, Madura Strait and western Bali Sea.',-8.91,-4.07,105.06,117.01,0);
INSERT INTO "area" VALUES('EPSG','3666','Indonesia - Java, Java Sea and western Sumatra','Indonesia - Bali, Java and western Sumatra onshore, offshore southern Java Sea, Madura Strait and western Bali Sea.',-8.91,5.97,95.16,117.01,0);
INSERT INTO "area" VALUES('EPSG','3667','Norway - onshore - 23ºE to 24ºE','Norway - onshore - between 23ºE and 24ºE.',68.62,71.08,23.0,24.0,0);
INSERT INTO "area" VALUES('EPSG','3668','Norway - onshore - 24ºE to 25ºE','Norway - onshore - between 24ºE and 25ºE.',68.58,71.16,24.0,25.0,0);
INSERT INTO "area" VALUES('EPSG','3669','Norway - onshore - 25ºE to 26ºE','Norway - onshore - between 25ºE and 26ºE.',68.59,71.21,25.0,26.0,0);
@@ -3181,7 +3181,7 @@ INSERT INTO "area" VALUES('EPSG','4201','USA - Oregon - Gresham-Warm Springs','U
INSERT INTO "area" VALUES('EPSG','4202','USA - Oregon - Columbia River West','United States (USA) - Oregon - Columbia River area west of approximately 121°30''W.',45.17,46.56,-124.33,-121.47,0);
INSERT INTO "area" VALUES('EPSG','4203','USA - Oregon - Cottage Grove-Canyonville','United States (USA) - Oregon - Cottage Grove-Canyonville area.',42.82,43.88,-123.96,-122.4,0);
INSERT INTO "area" VALUES('EPSG','4204','USA - Oregon - Dufur-Madras','United States (USA) - Oregon - Dufur-Madras area.',44.63,45.55,-121.95,-120.46,0);
INSERT INTO "area" VALUES('EPSG','4205','[enter here applicable extent]','[enter here applicable extent]',89.99,90.0,179.99,180.0,0);
INSERT INTO "area" VALUES('EPSG','4205','enter here applicable extent','enter here applicable extent',89.99,90.0,179.99,180.0,0);
INSERT INTO "area" VALUES('EPSG','4206','USA - Oregon - La Grande','United States (USA) - Oregon - La Grande area.',45.13,45.8,-118.17,-117.14,0);
INSERT INTO "area" VALUES('EPSG','4207','USA - Oregon - Ontario','United States (USA) - Oregon - Ontario area.',43.41,44.65,-117.9,-116.7,0);
INSERT INTO "area" VALUES('EPSG','4208','USA - Oregon - Oregon Coast','United States (USA) - Oregon - coastal area.',41.89,46.4,-124.84,-123.35,0);
@@ -3496,10 +3496,10 @@ INSERT INTO "area" VALUES('EPSG','4516','USA - CONUS and GoM','United States (US
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);
INSERT INTO "area" VALUES('EPSG','4520','World centred on 90°W','World centred on the Americas.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "area" VALUES('EPSG','4520','World centred on 90°W','World centred on the Americas.',-90.0,90.0,90.01,89.99,0);
INSERT INTO "area" VALUES('EPSG','4521','Northern Mariana Islands - onshore','Northern Mariana Islands - onshore.',14.06,20.61,144.83,146.12,0);
INSERT INTO "area" VALUES('EPSG','4522','Finland - mainland south of 66°N','Finland - onshore mainland south of approximately 66°N.',59.75,66.73,20.95,31.59,0);
INSERT INTO "area" VALUES('EPSG','4523','World centred on 150°E','World centred on Asia-Pacific.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "area" VALUES('EPSG','4523','World centred on 150°E','World centred on Asia-Pacific.',-90.0,90.0,-29.99,-30.01,0);
INSERT INTO "area" VALUES('EPSG','4524','Saudi Arabia - west of 36°E','Saudi Arabia - onshore and offshore - west of 36°E.',24.92,29.38,34.44,36.01,0);
INSERT INTO "area" VALUES('EPSG','4525','Pacific - Guam and NMI - onshore','Guam - onshore. Northern Mariana Islands - onshore.',13.18,20.61,144.58,146.12,0);
INSERT INTO "area" VALUES('EPSG','4526','Saudi Arabia - 36°E to 42°E','Saudi Arabia - onshore and offshore - between 36°E and 42°E.',16.29,32.16,36.0,42.0,0);
@@ -3536,6 +3536,16 @@ INSERT INTO "area" VALUES('EPSG','4557','Vietnam - Kon Tum','Vietnam - Kon Tum p
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','4561','Argentina - Mendoza - Cuyo basin','Argentina - Mendoza province - Cuyo basin.',-36.37,-31.96,-69.4,-66.42,0);
INSERT INTO "area" VALUES('EPSG','4562','Argentina - Mendoza and Neuquen','Argentina - Mendoza province, Neuquen province, western La Pampa province and western Rio Negro province.',-43.41,-31.91,-72.14,-65.86,0);
INSERT INTO "area" VALUES('EPSG','4563','Argentina - 42.5°S to 50.3°S','Argentina - Chibut province south of approximately 42°30''S and Santa Cruz province north of approximately 50°20''S.',-50.34,-42.49,-73.59,-65.47,0);
INSERT INTO "area" VALUES('EPSG','4564','Argentina - 42.5°S to 50.3°S and west of 70.5°W','Argentina - Chibut province west of 70°30''W and south of approximately 44°55''S and Santa Cruz province west of 70°30''W and north of approximately 50°20''S.',-50.34,-44.94,-73.59,-70.5,0);
INSERT INTO "area" VALUES('EPSG','4565','Argentina - 42.5°S to 50.3°S and east of 67.5°W','Argentina - Chibut province east of 67°30''W and south of approximately 43°35''S and Santa Cruz province east of 67°30''W and north of approximately 49°23''S.',-49.05,-43.58,-67.5,-65.47,0);
INSERT INTO "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);
INSERT INTO "area" VALUES('EPSG','4569','Argentina - south Santa Cruz','Argentina - Santa Cruz province south of approximately 50°20''S.',-52.43,-50.33,-73.28,-68.3,0);
INSERT INTO "area" VALUES('EPSG','4570','Argentina - south Santa Cruz west of 70.5°W','Argentina - Santa Cruz province south of approximately 50°20''S and west of 70°30''W.',-52.0,-50.33,-73.28,-70.5,0);
INSERT INTO "area" VALUES('EPSG','4571','Argentina - south Santa Cruz east of 70.5°W','Argentina - Santa Cruz province south of approximately 50°20''S and east of 70°30''W.',-52.43,-50.33,-70.5,-68.3,0);
INSERT INTO "area" VALUES('EPSG','4572','Argentina - 44°S to 47.5°S','Argentina - Chubut province south of approximately 44°S and Santa Cruz province north of approximately 47°30''S - Golfo San Jorge basin onshore and offshore.',-47.5,-43.99,-72.36,-63.24,0);
INSERT INTO "area" VALUES('EPSG','4573','Argentina - onshore','Argentina - onshore.',-55.11,-21.78,-73.59,-53.65,0);
+2 -2
View File
@@ -18,9 +18,9 @@ INSERT INTO "axis" VALUES('EPSG','1102','Westing','X','west','EPSG','1031',2,'EP
INSERT INTO "axis" VALUES('EPSG','1110','Plant East','x','east','EPSG','1032',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1111','Plant North','y','north','EPSG','1032',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1112','Gravity-related height','z','up','EPSG','1032',3,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1428','Bin grid I','I','J-axis plus 90°','EPSG','1033',1,'EPSG','1024');
INSERT INTO "axis" VALUES('EPSG','1428','Bin grid I','I','J-axis plus 90 degrees','EPSG','1033',1,'EPSG','1024');
INSERT INTO "axis" VALUES('EPSG','1429','Bin grid J','J','See associated operation','EPSG','1033',2,'EPSG','1024');
INSERT INTO "axis" VALUES('EPSG','1431','Bin grid I','I','J-axis minus 90°','EPSG','1034',1,'EPSG','1024');
INSERT INTO "axis" VALUES('EPSG','1431','Bin grid I','I','J-axis minus 90 degrees','EPSG','1034',1,'EPSG','1024');
INSERT INTO "axis" VALUES('EPSG','1432','Bin grid J','J','See associated operation','EPSG','1034',2,'EPSG','1024');
INSERT INTO "axis" VALUES('EPSG','1466','Easting','X','South along 180°E','EPSG','1035',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1467','Northing','Y','South along 90°W','EPSG','1035',2,'EPSG','9001');
+5
View File
@@ -132,6 +132,11 @@ FOR EACH ROW BEGIN
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12B');
SELECT RAISE(ABORT, 'missing GEOID18 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID18');
-- check presence of NZ height shift grids
SELECT RAISE(ABORT, 'missing NZ height shift grids')
WHERE NOT EXISTS(SELECT 1 FROM grid_alternatives WHERE original_grid_name = 'auckht1946-nzvd2016.gtx');
END;
INSERT INTO dummy DEFAULT VALUES;
DROP TRIGGER final_checks;
+1 -1
View File
@@ -27,7 +27,7 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','8094','NTF (Paris) to WGS 84
INSERT INTO "concatenated_operation" VALUES('EPSG','8174','Bogota 1975 (Bogota) to WGS 84 (1)','','For military purposes. Accuracy 6m, 5m and 6m in X, Y and Z axes.','EPSG','4802','EPSG','4326','EPSG','3229',NULL,'DMA-Col',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8175','Monte Mario (Rome) to WGS 84 (1)','','For military purposes. Accuracy 25m in each axis.','EPSG','4806','EPSG','4326','EPSG','2339',NULL,'EPSG-Ita',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8176','Tananarive (Paris) to WGS 84 (1)','','For military purposes. Accuracy not available.','EPSG','4810','EPSG','4326','EPSG','3273',NULL,'EPSG-Mdg',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8178','Batavia (Jakarta) to WGS 84 (1)','','For military purposes. Accuracy 3m in each axis.','EPSG','4813','EPSG','4326','EPSG','1355',NULL,'EPSG-Idn Sumatra',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8178','Batavia (Jakarta) to WGS 84 (1)','','For military purposes. Accuracy 3m in each axis.','EPSG','4813','EPSG','4326','EPSG','1285',NULL,'EPSG-Idn Sumatra',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8183','HD72 to WGS 84 (1)','Approximation at the +/- 1m level assuming that ETRF89 is equivalent to WGS 84.','Approximation at the +/- 1m level assuming that ETRS89 is equivalent to WGS 84.','EPSG','4237','EPSG','4326','EPSG','1119',NULL,'EPSG-Hun',1);
INSERT INTO "concatenated_operation" VALUES('EPSG','8186','NTF (Paris) to ED50 (1)','','Not known.','EPSG','4807','EPSG','4230','EPSG','3694',NULL,'EPSG-Fra',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8188','NTF (Paris) to WGS 72 (1)','','Not known.','EPSG','4807','EPSG','4322','EPSG','3694',NULL,'EPSG-Fra',0);
+5 -2
View File
@@ -837,8 +837,8 @@ INSERT INTO "conversion" VALUES('EPSG','8515','Kansas regional zone 19 Coffeyvil
INSERT INTO "conversion" VALUES('EPSG','8516','Kansas regional zone 20 Pittsburg (ftUS)',NULL,NULL,'EPSG','4513','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',36.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-95.05,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000031,'EPSG','9201','EPSG','8806','False easting',20500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','8825','Idaho Transverse Mercator',NULL,NULL,'EPSG','1381','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',42.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-114.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',2500000.0,'EPSG','9001','EPSG','8807','False northing',1200000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "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','8855','Equal Earth Americas',NULL,NULL,'EPSG','4520','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','4523','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);
@@ -856,6 +856,9 @@ INSERT INTO "conversion" VALUES('EPSG','9203','Vietnam TM-3 108-15',NULL,NULL,'E
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','9268','Austria West',NULL,NULL,'EPSG','1706','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',10.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9269','Austria Central',NULL,NULL,'EPSG','1707','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',13.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9270','Austria East',NULL,NULL,'EPSG','1708','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',16.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "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);
+2
View File
@@ -454,3 +454,5 @@ INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7082','EPSG','8456','EP
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7082','EPSG','8455','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3911','EPSG','8686','EPSG');
INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','8449','EPSG','8860','EPSG');
INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4280','EPSG','4211','EPSG');
INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4808','EPSG','4813','EPSG');
+12 -4
View File
@@ -104,8 +104,8 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','4156','S-JTSK',NULL,NULL,'geographic 2
INSERT INTO "geodetic_crs" VALUES('EPSG','4157','Mount Dillon',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6157','EPSG','1322',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4158','Naparima 1955',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6158','EPSG','3143',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4159','ELD79',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6159','EPSG','1143',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4160','Chos Malal 1914',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6160','EPSG','1292',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4161','Pampa del Castillo',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6161','EPSG','1265',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4160','Chos Malal 1914',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6160','EPSG','4562',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4161','Pampa del Castillo',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6161','EPSG','4563',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4162','Korean 1985',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6162','EPSG','3266',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4163','Yemen NGN96',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6163','EPSG','1257',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4164','South Yemen',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6164','EPSG','1340',NULL,0);
@@ -220,7 +220,7 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','4276','NSWC 9Z-2',NULL,NULL,'geographi
INSERT INTO "geodetic_crs" VALUES('EPSG','4277','OSGB 1936',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6277','EPSG','4390',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4278','OSGB70',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6278','EPSG','1264',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4279','OS(SN)80',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6279','EPSG','1354',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4280','Padang',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6280','EPSG','1355',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4280','Padang',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6280','EPSG','1355',NULL,1);
INSERT INTO "geodetic_crs" VALUES('EPSG','4281','Palestine 1923',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6281','EPSG','1356',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4282','Pointe Noire',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6282','EPSG','1072',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4283','GDA94',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6283','EPSG','4177',NULL,0);
@@ -506,7 +506,7 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','4804','Makassar (Jakarta)',NULL,NULL,'
INSERT INTO "geodetic_crs" VALUES('EPSG','4805','MGI (Ferro)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6805','EPSG','1321',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4806','Monte Mario (Rome)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6806','EPSG','3343',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4807','NTF (Paris)',NULL,NULL,'geographic 2D','EPSG','6403','EPSG','6807','EPSG','3694',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4808','Padang (Jakarta)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6808','EPSG','1355',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4808','Padang (Jakarta)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6808','EPSG','1355',NULL,1);
INSERT INTO "geodetic_crs" VALUES('EPSG','4809','Belge 1950 (Brussels)',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','6809','EPSG','1347',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4810','Tananarive (Paris)',NULL,NULL,'geographic 2D','EPSG','6403','EPSG','6810','EPSG','3273',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','4811','Voirol 1875 (Paris)',NULL,NULL,'geographic 2D','EPSG','6403','EPSG','6811','EPSG','1365',NULL,0);
@@ -1026,3 +1026,11 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','9153','SIRGAS-Chile 2016',NULL,NULL,'g
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);
INSERT INTO "geodetic_crs" VALUES('EPSG','9248','Tapi Aike',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1257','EPSG','4569',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9251','MMN',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1258','EPSG','2357',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9253','MMS',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1259','EPSG','2357',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9266','MGI',NULL,NULL,'geocentric','EPSG','6500','EPSG','6312','EPSG','1037',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9267','MGI',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','6312','EPSG','1037',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9331','KSA-GRF17',NULL,NULL,'geocentric','EPSG','6500','EPSG','1268','EPSG','1206',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9332','KSA-GRF17',NULL,NULL,'geographic 3D','EPSG','6423','EPSG','1268','EPSG','1206',NULL,0);
INSERT INTO "geodetic_crs" VALUES('EPSG','9333','KSA-GRF17',NULL,NULL,'geographic 2D','EPSG','6422','EPSG','1268','EPSG','1206',NULL,0);
+9 -5
View File
@@ -28,7 +28,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1057','Turkish National Reference Fr
INSERT INTO "geodetic_datum" VALUES('EPSG','1058','Bhutan National Geodetic Datum',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1048','2003-11-14',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1060','Islands Net 2004',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1120','2004-08-07',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1061','International Terrestrial Reference Frame 2008',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1262','2005-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1062','Posiciones Geodesicas Argentinas 2007',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1033','2006-08-07',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1062','Posiciones Geodesicas Argentinas 2007',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1033','2006-08-19',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1063','Marco Geodesico Nacional de Bolivia',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1049','2010-03-14',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1064','SIRGAS-Chile realization 1 epoch 2002',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066','2002-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1065','Costa Rica 2005',NULL,NULL,'EPSG','7030','EPSG','8901','EPSG','1074','2005-10-30',0);
@@ -148,6 +148,10 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1251','Kosovo Reference System 2001'
INSERT INTO "geodetic_datum" VALUES('EPSG','1252','SIRGAS-Chile realization 3 epoch 2013.00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066','2013-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1253','SIRGAS-Chile realization 4 epoch 2016.00',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066','2016-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1254','SIRGAS-Chile',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1066',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1257','Tapi Aike',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','4569','1945-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1258','Ministerio de Marina Norte',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','2357',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1259','Ministerio de Marina Sur',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','2357',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1268','Kingdom of Saudi Arabia Geodetic Reference Frame 2017',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','1206','2017-12-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6001','Not specified (based on Airy 1830 ellipsoid)',NULL,NULL,'EPSG','7001','EPSG','8901','EPSG','1263',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6002','Not specified (based on Airy Modified 1849 ellipsoid)',NULL,NULL,'EPSG','7002','EPSG','8901','EPSG','1263',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6003','Not specified (based on Australian National Spheroid)',NULL,NULL,'EPSG','7003','EPSG','8901','EPSG','1263',NULL,0);
@@ -231,8 +235,8 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','6156','System of the Unified Trigono
INSERT INTO "geodetic_datum" VALUES('EPSG','6157','Mount Dillon',NULL,NULL,'EPSG','7007','EPSG','8901','EPSG','1322',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6158','Naparima 1955',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','3143','1955-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6159','European Libyan Datum 1979',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','1143','1979-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6160','Chos Malal 1914',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','1292','1914-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6161','Pampa del Castillo',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','1265',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6160','Chos Malal 1914',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','4562','1914-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6161','Pampa del Castillo',NULL,NULL,'EPSG','7022','EPSG','8901','EPSG','4563',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6162','Korean Datum 1985',NULL,NULL,'EPSG','7004','EPSG','8901','EPSG','3266','1985-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6163','Yemen National Geodetic Network 1996',NULL,NULL,'EPSG','7030','EPSG','8901','EPSG','1257','1996-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6164','South Yemen',NULL,NULL,'EPSG','7024','EPSG','8901','EPSG','1340',NULL,0);
@@ -347,7 +351,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','6276','NSWC 9Z-2',NULL,NULL,'EPSG','
INSERT INTO "geodetic_datum" VALUES('EPSG','6277','OSGB 1936',NULL,NULL,'EPSG','7001','EPSG','8901','EPSG','4390','1936-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6278','OSGB 1970 (SN)',NULL,NULL,'EPSG','7001','EPSG','8901','EPSG','1264','1970-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6279','OS (SN) 1980',NULL,NULL,'EPSG','7001','EPSG','8901','EPSG','1354','1980-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6280','Padang 1884',NULL,NULL,'EPSG','7004','EPSG','8901','EPSG','1355','1884-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6280','Padang 1884',NULL,NULL,'EPSG','7004','EPSG','8901','EPSG','1355','1884-01-01',1);
INSERT INTO "geodetic_datum" VALUES('EPSG','6281','Palestine 1923',NULL,NULL,'EPSG','7010','EPSG','8901','EPSG','1356','1923-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6282','Congo 1960 Pointe Noire',NULL,NULL,'EPSG','7011','EPSG','8901','EPSG','1072','1960-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6283','Geocentric Datum of Australia 1994',NULL,NULL,'EPSG','7019','EPSG','8901','EPSG','4177','1994-01-01',0);
@@ -558,7 +562,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','6804','Makassar (Jakarta)',NULL,NULL
INSERT INTO "geodetic_datum" VALUES('EPSG','6805','Militar-Geographische Institut (Ferro)',NULL,NULL,'EPSG','7004','EPSG','8909','EPSG','1321','1901-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6806','Monte Mario (Rome)',NULL,NULL,'EPSG','7022','EPSG','8906','EPSG','3343',NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6807','Nouvelle Triangulation Francaise (Paris)',NULL,NULL,'EPSG','7011','EPSG','8903','EPSG','3694','1895-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6808','Padang 1884 (Jakarta)',NULL,NULL,'EPSG','7004','EPSG','8908','EPSG','1355','1884-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6808','Padang 1884 (Jakarta)',NULL,NULL,'EPSG','7004','EPSG','8908','EPSG','1355','1884-01-01',1);
INSERT INTO "geodetic_datum" VALUES('EPSG','6809','Reseau National Belge 1950 (Brussels)',NULL,NULL,'EPSG','7022','EPSG','8910','EPSG','1347','1950-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6810','Tananarive 1925 (Paris)',NULL,NULL,'EPSG','7022','EPSG','8903','EPSG','3273','1925-01-01',0);
INSERT INTO "geodetic_datum" VALUES('EPSG','6811','Voirol 1875 (Paris)',NULL,NULL,'EPSG','7011','EPSG','8903','EPSG','1365','1875-01-01',0);
+275 -127
View File
@@ -282,8 +282,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('WW15MGH.GRD',
'egm96_15.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid',
NULL, NULL, NULL, NULL);
@@ -297,8 +297,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',
'egm08_25.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-world',
NULL, NULL, NULL, NULL);
@@ -314,8 +314,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gr2000g.gri',
'gvr2000.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -329,8 +329,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggeoid16.gri',
'gvr2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -346,8 +346,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('dvr90.gtx',
'dvr90.gtx', -- no change. Just document the package
'GTX',
'vgridshift',
0, -- do not reverse here as grid_transformation_custom does reference from VerticalCRS height to Geographic height
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -362,8 +362,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('dnn.gtx',
'dnn.gtx', -- no change. Just document the package
'GTX',
'vgridshift',
0, -- do not reverse here as grid_transformation_custom does reference from VerticalCRS height to Geographic height
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -379,8 +379,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('fvr09.gtx',
'fvr09.gtx', -- no change. Just document the package
'GTX',
'vgridshift',
0, -- do not reverse here as grid_transformation_custom does reference from VerticalCRS height to Geographic height
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -396,8 +396,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('SWEN17_RH2000.gtx',
'SWEN17_RH2000.gtx', -- no change. Just document the package
'GTX',
'vgridshift',
0, -- do not reverse here as grid_transformation_custom does reference from VerticalCRS height to Geographic height
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -413,8 +413,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('OSGM15_Malin.gri',
'OSGM15_Malin.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -430,8 +430,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('OSGM15_Belfast.gri',
'OSGM15_Belfast.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -440,28 +440,28 @@ INSERT INTO grid_alternatives(original_grid_name,
----------------------------
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u01.bin', 'g1999u01.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u01.bin', 'g1999u01.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u02.bin', 'g1999u02.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u02.bin', 'g1999u02.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u03.bin', 'g1999u03.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u03.bin', 'g1999u03.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u04.bin', 'g1999u04.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u04.bin', 'g1999u04.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u05.bin', 'g1999u05.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u05.bin', 'g1999u05.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u06.bin', 'g1999u06.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u06.bin', 'g1999u06.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u07.bin', 'g1999u07.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u07.bin', 'g1999u07.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g1999u08.bin', 'g1999u08.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g1999u08.bin', 'g1999u08.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
-- Not mapped:
-- g1999a01.gtx to g1999a04.gtx : Alaska
@@ -473,7 +473,7 @@ INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_form
----------------------------
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('geoid03_conus.bin', 'geoid03_conus.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('geoid03_conus.bin', 'geoid03_conus.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
-- Not mapped:
-- g2003a01.gtx to g2003a04.gtx : Alaska
@@ -485,26 +485,26 @@ INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_form
----------------------------
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('geoid06_ak.bin', 'geoid06_ak.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('geoid06_ak.bin', 'geoid06_ak.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
----------------------------
-- US GEOID09 height models
----------------------------
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('geoid09_ak.bin', 'geoid09_ak.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('geoid09_ak.bin', 'geoid09_ak.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('geoid09_conus.bin', 'geoid09_conus.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('geoid09_conus.bin', 'geoid09_conus.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g2009g01.bin', 'g2009g01.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g2009g01.bin', 'g2009g01.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g2009s01.bin', 'g2009s01.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g2009s01.bin', 'g2009s01.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g2009p01.bin', 'g2009p01.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g2009p01.bin', 'g2009p01.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
-- Not mapped:
-- g2009h01.gtx : Hawaii
@@ -524,8 +524,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('g2012bu0.bin',
'g2012bu0.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -540,8 +540,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('g2012ba0.bin',
'g2012ba0.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -556,8 +556,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('g2012bp0.bin',
'g2012bp0.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -572,8 +572,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('g2012bg0.bin',
'g2012bg0.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -588,8 +588,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('g2012bs0.bin',
'g2012bs0.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -598,10 +598,10 @@ INSERT INTO grid_alternatives(original_grid_name,
----------------------------
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g2018u0.bin', 'g2018u0.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g2018u0.bin', 'g2018u0.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name, proj_grid_name, proj_grid_format, proj_method, inverse_direction, package_name, url, direct_download, open_license, directory)
VALUES ('g2018p0.bin', 'g2018p0.gtx', 'GTX', 'vgridshift', 1, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
VALUES ('g2018p0.bin', 'g2018p0.gtx', 'GTX', 'geoid_like', 0, 'proj-datumgrid-north-america', NULL, NULL, NULL, NULL);
----------------------------
-- French vertical grids
@@ -617,8 +617,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RAF09.mnt',
'RAF09.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -632,8 +632,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RAF18.tac',
'RAF18.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -647,8 +647,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RAC09.mnt',
'RAC09.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -662,8 +662,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggm00.txt',
'ggm00v2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -677,8 +677,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggg00.txt',
'ggg00v2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -692,8 +692,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggg00_mg.txt',
'ggg00_mgv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -707,8 +707,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggg00_sm.txt',
'ggg00_smv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -722,8 +722,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggg00_ls.txt',
'ggg00_lsv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -737,8 +737,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggg00_ld.txt',
'RALDW842016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -752,8 +752,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RALDW842016.mnt',
'RALDW842016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -767,8 +767,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggg00_sb.txt',
'ggg00_sbv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -782,8 +782,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_mart.txt',
'RAMART2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -797,8 +797,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RAMART2016.mnt',
'RAMART2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -812,8 +812,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_gtbt.txt',
'RAGTBT2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -827,8 +827,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RAGTBT2016.mnt',
'RAGTBT2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -842,8 +842,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_mg.txt',
'RAMG2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -857,8 +857,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RAMG2016.mnt',
'RAMG2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -872,8 +872,23 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_sm.txt',
'gg10_smv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('gg10_smv2.mnt',
'gg10_smv2.gtx',
'GTX',
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -887,8 +902,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_ls.txt',
'RALS2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -902,8 +917,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RALS2016.mnt',
'RALS2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -917,8 +932,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_ld.txt',
'RALD2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -932,8 +947,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RALD2016.mnt',
'RALD2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -947,8 +962,23 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('gg10_sb.txt',
'gg10_sbv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('gg10_sbv2.mnt',
'gg10_sbv2.gtx',
'GTX',
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -962,8 +992,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggguy00.txt',
'ggguy15.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -977,8 +1007,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('ggr99.txt',
'RAR07_bl.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -992,8 +1022,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('GGSPM06v1.mnt',
'ggspm06v1.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -1007,8 +1037,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('RASPM2018.mnt',
'RASPM2018.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -1116,8 +1146,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('AUSGeoid09_GDA94_V1.01_DOV_windows.gsb', -- source file contains undulation in first band, and deflection in 2nd and 3d band
'AUSGeoid09_V1.01.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
@@ -1131,8 +1161,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('AUSGeoid2020_windows_binary.gsb', -- source file contains undulation in first band, and deflection in 2nd and 3d band
'AUSGeoid2020_20180201.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
@@ -1146,8 +1176,8 @@ INSERT INTO grid_alternatives(original_grid_name,
SELECT grid_name,
'AUSGeoid98.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL FROM grid_transformation WHERE
grid_name LIKE '%DAT.htm' AND name LIKE 'GDA94 to AHD height%';
@@ -1164,7 +1194,7 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('naptrans2008.gtx',
'naptrans2008.gtx',
'GTX',
'vgridshift',
'geoid_like',
0,
NULL, -- package name
'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/naptrans2008.gtx',
@@ -1288,6 +1318,36 @@ INSERT INTO grid_alternatives(original_grid_name,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('portugal/DLX_ETRS89_geo',
'DLx_ETRS89_geo.gsb',
'NTv2',
'hgridshift',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('portugal/D73_ETRS89_geo',
'D73_ETRS89_geo.gsb',
'NTv2',
'hgridshift',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
-- Canada provincial grids
INSERT INTO grid_alternatives(original_grid_name,
@@ -1485,6 +1545,21 @@ INSERT INTO grid_alternatives(original_grid_name,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('TOR27CSv1.GSB',
'TO27CSv1.GSB',
'NTv2',
'hgridshift',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
@@ -1647,8 +1722,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('HT2_0.byn',
'HT2_2010v70.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -1662,8 +1737,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('CGG2013i08a.byn',
'CGG2013ai08.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -1677,8 +1752,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('CGG2013n83a.byn',
'CGG2013an83.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -1692,8 +1767,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('CGG2013i83.byn',
'CGG2013i08.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -1707,8 +1782,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('CGG2013n83.byn',
'CGG2013n83.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-north-america',
NULL, NULL, NULL, NULL);
@@ -1754,7 +1829,7 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('Icegeoid_ISN2004.gtx',
'Icegeoid_ISN2004.gtx',
'GTX',
'vgridshift',
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -1769,7 +1844,7 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('Icegeoid_ISN93.gtx',
'Icegeoid_ISN93.gtx',
'GTX',
'vgridshift',
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -1784,7 +1859,7 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('Icegeoid_ISN2016.gtx',
'Icegeoid_ISN2016.gtx',
'GTX',
'vgridshift',
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
@@ -1985,6 +2060,26 @@ INSERT INTO grid_alternatives(original_grid_name,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
-- WARNING: this builds the new entries from the above deprecated ones
-- A check has been added in commit.sql to verify that a mapping from
-- auckht1946-nzvd2016.gtx exists in this table, due to the below insert
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
SELECT proj_grid_name,
proj_grid_name, 'GTX',
'vgridshift',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL
FROM grid_alternatives
WHERE proj_grid_name LIKE '%-nzvd2016.gtx';
-- Superseded
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
@@ -1995,8 +2090,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('New_Zealand_Quasigeoid_2016.csv',
'nzgeoid2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
@@ -2007,12 +2102,65 @@ INSERT INTO grid_alternatives(original_grid_name,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('nzgeoid09.sid',
'nzgeoid2009.gtx',
VALUES ('nzgeoid2016.gtx',
'nzgeoid2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
-- Superseded
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('nzgeoid09.sid',
'nzgeoid2009.gtx',
'GTX',
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url, direct_download, open_license, directory)
VALUES ('nzgeoid2009.gtx',
'nzgeoid2009.gtx',
'GTX',
'geoid_like',
0,
'proj-datumgrid-oceania',
NULL, NULL, NULL, NULL);
-- Slovakia
--
-- The definition of EPSG:8364 (JTSK03 to JTSK) uses NADCON method which is not supported by PROJ.
-- UGKK (Slovak Geodetic and Cartographic Institute) provides also NTv2 grid file in addition
-- to NADCON .las/.los files, so we define the NTv2 file here as an alternative.
-- The file is available online but it does not have a confirmed open license yet,
-- so it is not available in proj-datumgrid-europe for now
INSERT INTO grid_alternatives(original_grid_name,
proj_grid_name,
proj_grid_format,
proj_method,
inverse_direction,
package_name,
url,
direct_download, open_license, directory)
VALUES ('Slovakia_JTSK03_to_JTSK.LAS',
'Slovakia_JTSK03_to_JTSK.gsb',
'NTv2',
'hgridshift',
0,
NULL,
'https://www.geoportal.sk/files/gz/slovakia_jtsk03_to_jtsk_ntv2.zip',
0, 0, NULL);
+70 -47
View File
@@ -4,7 +4,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1068','Guam 1963 to NAD83(HARN)
INSERT INTO "grid_transformation" VALUES('EPSG','1069','Guam 1963 to WGS 84 (2)','Parameter files are from Guam 1963 to NAD83(HARN) (1) (code 1068), but for many purposes NAD83(HARN) can be considered to be coincident with WGS 84 within the accuracy of the transformation.','Accuracy 5m.','EPSG','9613','NADCON','EPSG','4675','EPSG','4326','EPSG','3255',5.0,'EPSG','8657','Latitude difference file','guhpgn.las','EPSG','8658','Longitude difference file','guhpgn.los',NULL,NULL,'EPSG-Gum',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1241','NAD27 to NAD83 (1)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','Accuracy at 67% confidence level is 0.15m onshore, 5m nearshore and undetermined farther offshore.','EPSG','9613','NADCON','EPSG','4267','EPSG','4269','EPSG','2374',0.15,'EPSG','8657','Latitude difference file','conus.las','EPSG','8658','Longitude difference file','conus.los',NULL,NULL,'NGS-Usa Conus',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1243','NAD27 to NAD83 (2)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east. May be used as transformation to WGS 84 - see NAD27 to WGS 84 (85) (code 15864).','Accuracy at 67% confidence level is 0.5m onshore, 5m nearshore and undetermined farther offshore.','EPSG','9613','NADCON','EPSG','4267','EPSG','4269','EPSG','2373',0.5,'EPSG','8657','Latitude difference file','alaska.las','EPSG','8658','Longitude difference file','alaska.los',NULL,NULL,'NGS-Usa AK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1295','RGNC91-93 to NEA74 Noumea (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 15943). Note reversal of sign of parameter values in grid file.','Accuracy 5-10cm.','EPSG','9615','NTv2','EPSG','4749','EPSG','4644','EPSG','2823',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_NEA74Noumea.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1295','RGNC91-93 to NEA74 Noumea (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 9328). Note reversal of sign of parameter values in grid file.','Accuracy 5-10cm.','EPSG','9615','NTv2','EPSG','4749','EPSG','4644','EPSG','2823',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_NEA74Noumea.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1312','NAD27 to NAD83 (3)','Uses NTv1 method. Replaced in Quebec by code 1462 and elsewhere in 1997 by NTv2 (transformation code 1313). Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east.','Historic record only - now superseded - see remarks.','EPSG','9614','NTv1','EPSG','4267','EPSG','4269','EPSG','1061',1.0,'EPSG','8656','Latitude and longitude difference file','NTv1_0.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GC-Can NT1',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1313','NAD27 to NAD83 (4)','Uses NTv2 data files. Replaces NTv1 (transformation code 1312) except in Quebec. Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and (code 4269) have longitudes positive east. May be used as tfm to WGS 84 - see code 1693.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4267','EPSG','4269','EPSG','4517',1.5,'EPSG','8656','Latitude and longitude difference file','NTv2_0.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GC-Can NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1451','NAD27(CGQ77) to NAD83 (1)','Replaced by NAD27(CGQ77) to NAD83 (2) (code 1575). Uses NT method which expects longitudes positive west; EPSG GeogCRSs CGQ77 (code 4609) and NAD83 (code 4269) have longitudes positive east.','Historic record only - now superseded - see remarks.','EPSG','9614','NTv1','EPSG','4609','EPSG','4269','EPSG','1368',1.0,'EPSG','8656','Latitude and longitude difference file','PQV4.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT1',0);
@@ -163,9 +163,9 @@ INSERT INTO "grid_transformation" VALUES('EPSG','5334','ETRS89 to Belfast height
INSERT INTO "grid_transformation" VALUES('EPSG','5335','ETRS89 to Malin Head height (1)','May be used for transformations from WGS 84 to Malin Head. Replaced by ETRS89 to Malin Head height (2) (code 7959).','Derivation of gravity-related heights from GPS observations.','EPSG','1045','Geographic3D to GravityRelatedHeight (OSGM02-Ire)','EPSG','4937','EPSG','5731','EPSG','1305',0.04,'EPSG','8666','Geoid (height correction) model file','OSGM02_RoI.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire',0);
INSERT INTO "grid_transformation" VALUES('EPSG','5338','OSGB 1936 to ETRS89 (1)','Approximate alternative to official OSTN02 method (tfm code 7952). May be taken as approximate transformation OSGB 1936 to WGS 84 - see code 5339.','Accuracy at 2000 test points compared to official OSTN02 (tfm code 1039): latitude 0.5mm average, 17mm maximum; longitude 0.8mm average, 23mm maximum.','EPSG','9615','NTv2','EPSG','4277','EPSG','4258','EPSG','1264',0.03,'EPSG','8656','Latitude and longitude difference file','OSTN02_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSGB-UK Gbr02 NT',0);
INSERT INTO "grid_transformation" VALUES('EPSG','5339','OSGB 1936 to WGS 84 (7)','Parameter values taken from OSGB 1936 to ETRS89 (1) (tfm code 5338) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm. Within accuracy of the tfm equivalent to OSGB 1936 / British National Grid to WGS 84 (2) (tfm code 15956).','Accuracy 1m.','EPSG','9615','NTv2','EPSG','4277','EPSG','4326','EPSG','1264',1.0,'EPSG','8656','Latitude and longitude difference file','OSTN02_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-UK Gbr02 NT',0);
INSERT INTO "grid_transformation" VALUES('EPSG','5409','NGVD29 height to NAVD88 height (1)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','Accuracy 2cm','EPSG','9658','VERTCON','EPSG','5702','EPSG','5703','EPSG','2950',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',1);
INSERT INTO "grid_transformation" VALUES('EPSG','5410','NGVD29 height to NAVD88 height (2)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','Accuracy 2cm','EPSG','9658','VERTCON','EPSG','5702','EPSG','5703','EPSG','2949',0.02,'EPSG','8732','Vertical offset file','vertconc.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus C',1);
INSERT INTO "grid_transformation" VALUES('EPSG','5411','NGVD29 height to NAVD88 height (3)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','Accuracy 2cm','EPSG','9658','VERTCON','EPSG','5702','EPSG','5703','EPSG','2948',0.02,'EPSG','8732','Vertical offset file','vertcone.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus E',1);
INSERT INTO "grid_transformation" VALUES('EPSG','5409','NGVD29 height to NAVD88 height (1)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','Accuracy 2cm','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703','EPSG','2950',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',1);
INSERT INTO "grid_transformation" VALUES('EPSG','5410','NGVD29 height to NAVD88 height (2)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','Accuracy 2cm','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703','EPSG','2949',0.02,'EPSG','8732','Vertical offset file','vertconc.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus C',1);
INSERT INTO "grid_transformation" VALUES('EPSG','5411','NGVD29 height to NAVD88 height (3)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','Accuracy 2cm','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703','EPSG','2948',0.02,'EPSG','8732','Vertical offset file','vertcone.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus E',1);
INSERT INTO "grid_transformation" VALUES('EPSG','5502','RGAF09 to Martinique 1987 height (1)','Replaces tfm from RRAF 1991, code 4561. May be used for transformations from WGS 84 to IGN 1987. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5756','EPSG','3276',998.0,'EPSG','8666','Geoid (height correction) model file','gg10_mart.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Mtq',0);
INSERT INTO "grid_transformation" VALUES('EPSG','5503','RGAF09 to Guadeloupe 1988 height (1)','Replaces tfm from RRAF 1991, code 4562. May be used for transformations from WGS 84 to IGN 1988. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations. Accuracy 0.2m within onshore areas.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5757','EPSG','2892',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_gtbt.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp GT',0);
INSERT INTO "grid_transformation" VALUES('EPSG','5504','RGAF09 to IGN 1988 MG height (1)','Replaces tfm from RRAF 1991, code 4563. May be used for transformations from WGS 84 to IGN 1988 MG. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations. Accuracy 0.2m within onshore area.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','5488','EPSG','5617','EPSG','2894',0.2,'EPSG','8666','Geoid (height correction) model file','gg10_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',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',1);
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','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 (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 (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',1);
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);
@@ -203,12 +203,12 @@ INSERT INTO "grid_transformation" VALUES('EPSG','6946','TM75 to ETRS89 (3)','App
INSERT INTO "grid_transformation" VALUES('EPSG','6947','TM75 to WGS 84 (4)','Parameter values taken from TM75 to ETRS89 (3) (tfm code 6946) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm. Within accuracy of the tfm equivalent to TM75 to WGS 84 (1) (tfm code 1042).','Emulation of polynomial (tfm code 1042). Accuracy 1m.','EPSG','9615','NTv2','EPSG','4300','EPSG','4326','EPSG','1305',1.0,'EPSG','8656','Latitude and longitude difference file','tm75_etrs89.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ire NT',0);
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.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','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 (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',1);
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 (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 (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 (gtx)','EPSG','6324','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 (gtx)','EPSG','6324','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 (gtx)','EPSG','6321','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.','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','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','Vertical Offset by Grid Interpolation (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','Vertical Offset by Grid Interpolation (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','Vertical Offset by Grid Interpolation (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);
@@ -304,29 +304,29 @@ 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','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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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','9228','RGSPM06 to Danger 1950 height (2)','Accuracy 0.01m to 0.05m within onshore area. Replaces RGSPM06 to Danger 1950 height (1), CT code 9137.','Derivation of gravity-related heights from GPS observations.','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','4466','EPSG','5792','EPSG','1220',0.05,'EPSG','8666','Geoid (height correction) model file','RASPM2018.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-SPM',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9229','NAD83(2011) to NAVD88 height (3)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','5703','EPSG','1323',0.015,'EPSG','8666','Geoid (height correction) model file','g2018u0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus 18',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9230','NAD83(2011) to PRVD02 height (2)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','6641','EPSG','3294',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9231','NAD83(2011) to VIVD09 height (2)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (US .gtx)','EPSG','6319','EPSG','6642','EPSG','3330',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 18',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9229','NAD83(2011) to NAVD88 height (3)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','6319','EPSG','5703','EPSG','1323',0.015,'EPSG','8666','Geoid (height correction) model file','g2018u0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus 18',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9230','NAD83(2011) to PRVD02 height (2)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','6319','EPSG','6641','EPSG','3294',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Pri 12B',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9231','NAD83(2011) to VIVD09 height (2)','Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','Derivation of approximate gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','6319','EPSG','6642','EPSG','3330',0.015,'EPSG','8666','Geoid (height correction) model file','g2018p0.bin',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-Vir 18',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9232','ISN93 to ISN2016 (1)','Grid transformation based on Kriging between ISN93 and ISN2016. Accuracy is better than 5 cm in stable areas but can be around 25 cm in areas that have suffered deformation due to earthquake or volcanic eruption.','Spatial referencing.','EPSG','9615','NTv2','EPSG','4659','EPSG','8086','EPSG','1120',0.05,'EPSG','8656','Latitude and longitude difference file','ISN93_ISN2016.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LMI-Isl',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9233','ISN2004 to ISN2016 (1)','Grid transformation based on Kriging between ISN2004 and ISN2016. Accuracy is better than 5 cm in stable areas but can be around 25 cm in areas that have suffered deformation due to earthquake or volcanic eruption.','Spatial referencing.','EPSG','9615','NTv2','EPSG','5324','EPSG','8086','EPSG','1120',0.05,'EPSG','8656','Latitude and longitude difference file','ISN2004_ISN2016.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LMI-Isl',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9235','ATS77 to NAD83(CSRS)v3 (3)','Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1851. Replaced by ATS77 to NAD83(CSRS)v6 (4) (transformation code 9106).','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4122','EPSG','8240','EPSG','2313',1.5,'EPSG','8656','Latitude and longitude difference file','NS778301.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS',0);
@@ -341,6 +341,29 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9243','NAD83 to NAD83(CSRS)v3 (
INSERT INTO "grid_transformation" VALUES('EPSG','9244','NAD83 to NAD83(CSRS)v4 (3)','This gridded difference file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software suites. Formats identical, but AB file is provincial fit only. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1702.','Accuracy 1-2 metres.','EPSG','9615','NTv2','EPSG','4269','EPSG','8246','EPSG','2376',1.5,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'AB Env-Can AB',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9246','NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1)','Uses CGG2013 model which uses bi-quadratic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time. Replaced by CGG2013a model (CT code 9247).','Derivation of gravity-related heights from GPS observations.','EPSG','1060','Geographic3D to GravityRelatedHeight (CGG2013)','EPSG','8251','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','9247','NAD83(CSRS)v6 to CGVD2013(CGG2013a) height (1)','Uses CGG2013a 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. Replaces CGG2013 model (CT code 9246).','Derivation of gravity-related heights from GPS observations.','EPSG','1060','Geographic3D to GravityRelatedHeight (CGG2013)','EPSG','8251','EPSG','9245','EPSG','1061',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013n83a.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2013a',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9256','POSGAR 2007 to SRVN16 height (1)','Uses Geoid-AR16. See information source for more information.','Derivation of gravity-related heights from GNSS observations.','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','5342','EPSG','9255','EPSG','4573',0.05,'EPSG','8666','Geoid (height correction) model file','GEOIDE-Ar16.gri',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Arg',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9275','GHA height to EVRF2000 Austria height (1)','Care! Austrian literature describes this transformation in direction EVRF2000 Austria height to GHA height with offset subtracted. EPSG method has offset as an addition. See method formula and example. The grid is implemented in BEV-Transformator.','Change of height to a different vertical reference surface.','EPSG','1080','Vertical Offset by Grid Interpolation (BEV AT)','EPSG','5778','EPSG','9274','EPSG','1037',0.05,'EPSG','8732','Vertical offset file','GV_HoehenGrid_V1.csv',NULL,NULL,NULL,NULL,'EPSG','4312','BEV-Aut',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9276','ETRS89 to EVRF2000 Austria height (1)','Austrian Geoid 2008. Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','Derivation of gravity-related heights from GNSS observations.','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','4937','EPSG','9274','EPSG','1037',0.05,'EPSG','8666','Geoid (height correction) model file','GEOID_GRS80_Oesterreich.csv',NULL,NULL,NULL,NULL,'EPSG','4167','BEV-Aut',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9277','MGI to EVRF2000 Austria height (1)','Austrian Geoid 2008 (Bessel ellipsoid). Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','Derivation of gravity-related heights from GNSS observations.','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','9267','EPSG','9274','EPSG','1037',0.05,'EPSG','8666','Geoid (height correction) model file','GEOID_BESSEL_Oesterreich.csv',NULL,NULL,NULL,NULL,'EPSG','4312','BEV-Aut',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9278','ETRS89 to GHA Austria height (1)','This transformation gives same result as concatenation of ETRS89 to EVRF2000 Austria height and EVRF2000 Austria height to GHA height transformations, CTs code 9276 and 9275. Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','Derivation of gravity-related heights from GNSS observations.','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','4937','EPSG','5778','EPSG','1037',0.05,'EPSG','8666','Geoid (height correction) model file','GV_Hoehengrid_plus_Geoid_V3.csv',NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9280','ITRF2005 to SA LLD height (1)','Hybrid geoid referenced to ITRF2005@2010.02. Accuracy 7cm at 1 sigma.','Derivation of gravity-related heights from GNSS observations.','EPSG','1082','Geographic3D to GravityRelatedHeight (SA 2010)','EPSG','7910','EPSG','9279','EPSG','3309',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,NULL,NULL,'NGI-Zaf',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9282','Amersfoort to ETRS89 (9)','Consistent to within 1mm with official RNAPTRANS(TM)2018 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','rdtrans2018.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9283','ETRS89 to NAP height (2)','Vertical component of official RDNAPTRANS(TM)2018 procedure. Replaces previous versions of RDNAPTRANS.','Derivation of gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5709','EPSG','1275',0.001,'EPSG','8666','Geoid (height correction) model file','nlgeo2018.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9312','NZVD2016 height to Auckland 1946 height (2)','Derived at 260 control points. Mean offset 0.292m, standard deviation 0.029m, maximum difference from mean 0.075m. Supersedes NZVD2016 height to Auckland 1946 height (1) (code 7860) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5759','EPSG','3764',0.02,'EPSG','8732','Vertical offset file','auckht1946-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ AUCK gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9313','NZVD2016 height to Bluff 1955 height (2)','Derived at 71 control points. Mean offset 0.273m, standard deviation 0.034m, maximum difference from mean 0.079m. Supersedes NZVD2016 height to Bluff 1955 height (1) (code 7861) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5760','EPSG','3801',0.02,'EPSG','8732','Vertical offset file','blufht1955-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ BLUF gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9314','NZVD2016 height to Dunedin 1958 height (2)','Derived at 197 control points. Mean offset 0.326m, standard deviation 0.043m, maximum difference from mean 0.152m. Supersedes NZVD2016 height to Dunedin 1958 height (1) (code 7862) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5761','EPSG','3803',0.02,'EPSG','8732','Vertical offset file','duneht1958-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ DUNE gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9315','NZVD2016 height to Dunedin-Bluff 1960 height (2)','Derived at 205 control points. Mean offset 0.254m, standard deviation 0.039m, maximum difference from mean 0.11m. Supersedes NZVD2016 height to Dunedin-Bluff 1960 height (1) (code 7863) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','4458','EPSG','3806',0.02,'EPSG','8732','Vertical offset file','dublht1960-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ DUBL gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9316','NZVD2016 height to Gisborne 1926 height (2)','Derived at 274 control points. Mean offset 0.343m, standard deviation 0.025m, maximum difference from mean 0.09m. Supersedes NZVD2016 height to Gisborne 1926 height (1) (code 7864) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5762','EPSG','3771',0.02,'EPSG','8732','Vertical offset file','gisbht1926-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ GISB gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9317','NZVD2016 height to Lyttelton 1937 height (2)','Derived at 923 control points. Mean offset 0.34m, standard deviation 0.041m, maximum difference from mean 0.149m. Supersedes NZVD2016 height to Lyttelton 1937 height (1) (code 7865) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5763','EPSG','3804',0.01,'EPSG','8732','Vertical offset file','lyttht1937-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ LYTT gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9318','NZVD2016 height to Moturiki 1953 height (2)','Derived at 519 control points. Mean offset 0.309m, standard deviation 0.071m, maximum difference from mean 0.231m. Supersedes NZVD2016 height to Moturiki 1953 height (1) (code 7866) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5764','EPSG','3768',0.02,'EPSG','8732','Vertical offset file','motuht1953-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ MOTU gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9319','NZVD2016 height to Napier 1962 height (2)','Derived at 207 control points. Mean offset 0.203m, standard deviation 0.034m, maximum difference from mean 0.096m. Supersedes NZVD2016 height to Napier 1962 height (1) (code 7867) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5765','EPSG','3772',0.02,'EPSG','8732','Vertical offset file','napiht1962-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ NAPI gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9320','NZVD2016 height to Nelson 1955 height (2)','Derived at 256 control points. Mean offset 0.329m, standard deviation 0.039m, maximum difference from mean 0.114m. Supersedes NZVD2016 height to Nelson 1955 height (1) (code 7868) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5766','EPSG','3802',0.02,'EPSG','8732','Vertical offset file','nelsht1955-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ NELS gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9321','NZVD2016 height to One Tree Point 1964 height (2)','Derived at 137 control points. Mean offset 0.077m, standard deviation 0.042m, maximum difference from mean 0.107m. Supersedes NZVD2016 height to One Tree Point 1964 height (1) (code 7869) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5767','EPSG','3762',0.01,'EPSG','8732','Vertical offset file','ontpht1964-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ ONTP gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9322','NZVD2016 height to Stewart Island 1977 height (2)','Derived at 4 control points. Mean offset 0.299m, standard deviation 0.025m, maximum difference from mean 0.039m. Supersedes NZVD2016 height to Stewart Island 1977 height (1) (code 7870) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5772','EPSG','3338',0.18,'EPSG','8732','Vertical offset file','stisht1977-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ STWT gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9323','NZVD2016 height to Taranaki 1970 height (2)','Derived at 125 control points. Mean offset 0.286m, standard deviation 0.026m, maximum difference from mean 0.07m. Supersedes NZVD2016 height to Taranaki 1970 height (1) (code 7871) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5769','EPSG','3769',0.02,'EPSG','8732','Vertical offset file','taraht1970-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ TARA gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9324','NZVD2016 height to Wellington 1953 height (2)','Derived at 137 control points. Mean offset 0.408m, standard deviation 0.054m, maximum difference from mean 0.112m. Supersedes NZVD2016 height to Wellington 1953 height (1) (code 7872) after change of grid file format.','Transformation between national and local height systems.','EPSG','1084','Vertical Offset by Grid Interpolation (gtx)','EPSG','7839','EPSG','5770','EPSG','3773',0.02,'EPSG','8732','Vertical offset file','wellht1953-nzvd2016.gtx',NULL,NULL,NULL,NULL,'EPSG','4167','LINZ-NZ WGTN gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9325','NZGD2000 to NZVD2009 height (2)','Defines NZVD2009 vertical datum (datum code 1039, CRS code 4440). Supersedes NZGD2000 to NZVD2009 height (1) (code 4459) after change of grid file format.','Derivation of gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4959','EPSG','4440','EPSG','1175',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid2009.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ 2009 gtx',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9326','NZGD2000 to NZVD2016 height (2)','Defines NZVD2016 vertical datum (datum code 1169, CRS code 7839). Supersedes NZGD2000 to NZVD2016 height (1) (code 7840) after change of grid file format.','Derivation of gravity-related heights from GPS observations.','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4959','EPSG','7839','EPSG','1175',0.1,'EPSG','8666','Geoid (height correction) model file','nzgeoid2016.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ 2016 gtx',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);
INSERT INTO "grid_transformation" VALUES('EPSG','10001','ETRS89 to NGF IGN69 height (1)','Parameter values taken from RGF93 to NGF IGN69 (1) (code 10000) assuming that RGF93 is equivalent to ETRS89 within the accuracy of the transformation. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','Derivation of gravity-related heights from GPS observations.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4937','EPSG','5720','EPSG','1326',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10002','RGF93 to IGN78 Corsica height (1)','May be used for transformations from WGS 84 to IGN78 Corsica. 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','5721','EPSG','1327',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a_corse.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra Cor',0);
@@ -354,14 +377,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',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','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 (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 (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 (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 (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 (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 (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 (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 (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);
@@ -458,8 +481,8 @@ INSERT INTO "grid_transformation" VALUES('EPSG','15948','DHDN to ETRS89 (8)','De
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);
INSERT INTO "grid_transformation" VALUES('EPSG','15958','RGF93 to NTF (2)','Emulation using NTv2 method of France Geocentric Interpolation method tfm NTF to RGF93 (1), code 1053. Note that grid file parameters are of opposite sign. May be taken as approximate transformation to ETRS89 or WGS 84 - see tfm codes 15959 and 15960.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4171','EPSG','4275','EPSG','3694',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Fra 1m emulation',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15959','ETRS89 to NTF (3)','These parameter values are taken from RGF93 to NTF (2) (code 15958) as RGF93 may be considered equivalent to ETRS89 within the accuracy of the transformation. Emulation of France Geocentric Interpolation method tfm code 1054: note reversal of sign.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4258','EPSG','4275','EPSG','3694',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15960','WGS 84 to NTF (3)','These parameter values are taken from RGF93 to NTF (2) (code 15958) as RGF93 may be considered equivalent to WGS 84 within the accuracy of the transformation. Emulation of France Geocentric Interpolation method tfm code 15939: note reversal of sign.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4326','EPSG','4275','EPSG','3694',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15958','RGF93 to NTF (2)','Emulation using NTv2 method of transformation NTF to RGF93 (1), code 9327. Note that grid file parameters are of opposite sign. May be taken as approximate transformation to ETRS89 or WGS 84 - see tfm codes 15959 and 15960.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4171','EPSG','4275','EPSG','3694',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Fra 1m emulation',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15959','ETRS89 to NTF (3)','These parameter values are taken from RGF93 to NTF (2) (code 15958) as RGF93 may be considered equivalent to ETRS89 within the accuracy of the transformation.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4258','EPSG','4275','EPSG','3694',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15960','WGS 84 to NTF (3)','These parameter values are taken from RGF93 to NTF (2) (code 15958) as RGF93 may be considered equivalent to WGS 84 within the accuracy of the transformation.','For applications requiring an accuracy of better than 1 metre.','EPSG','9615','NTv2','EPSG','4326','EPSG','4275','EPSG','3694',1.0,'EPSG','8656','Latitude and longitude difference file','rgf93_ntf.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Fra 1m emulation',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15961','RGNC91-93 to NEA74 Noumea (4)','Emulation using NTv2 method of tfm NEA74 Noumea to RGNC91-93 (3) (code 15943). Note reversal of sign of parameter values in grid file.','Accuracy 5-10cm.','EPSG','9615','NTv2','EPSG','4749','EPSG','4644','EPSG','2823',0.05,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.05m',1);
INSERT INTO "grid_transformation" VALUES('EPSG','15962','RGNC91-93 to IGN72 Grande Terre (6)','Emulation using NTv2 method of tfm IGN72 Grande Terre to RGNC91-93 (4) (code 15945). Note reversal sign of of parameter values in grid file.','Accuracy better than +/- 0.1 metre.','EPSG','9615','NTv2','EPSG','4749','EPSG','4662','EPSG','2822',0.1,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.1m',0);
INSERT INTO "grid_transformation" VALUES('EPSG','15962','RGNC91-93 to IGN72 Grande Terre (6)','Emulation using NTv2 method of tfm IGN72 Grande Terre to RGNC91-93 (4) (code 9329). Note reversal sign of of parameter values in grid file.','Accuracy better than +/- 0.1 metre.','EPSG','9615','NTv2','EPSG','4749','EPSG','4662','EPSG','2822',0.1,'EPSG','8656','Latitude and longitude difference file','RGNC1991_IGN72GrandeTerre.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ESRI-Ncl 0.1m',0);
+15 -4
View File
@@ -293,7 +293,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1517','Conakry 1905 to WGS 8
INSERT INTO "helmert_transformation" VALUES('EPSG','1518','Dabola 1981 to WGS 84 (1)','','Accuracy 25m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4155','EPSG','4326','EPSG','3257',25.0,-83.0,37.0,124.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Gin',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1527','Campo Inchauspe to WGS 84 (2)','Derived through ties at 2 stations (Cerro Colorado and Chihuido Sur) to 4 IGS stations in February 1995','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4221','EPSG','4326','EPSG','2325',0.5,-154.5,150.7,100.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg Neu',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1528','Chos Malal 1914 to Campo Inchauspe (1)','Derived through common coordinates at 5 stations.','Oil exploration. Accuracy 10 metres.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4221','EPSG','2325',10.0,160.0,26.0,41.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg Neu',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1529','Hito XVIII to WGS 84 (1)','Derived through ties at 3 stations (RC03, TOTAL11 and MP12) to 3 IGS stations in November 1995','Oil exploration.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4254','EPSG','4326','EPSG','2357',0.5,18.38,192.45,96.82,'EPSG','9001',0.056,-0.142,-0.2,'EPSG','9104',-0.0013,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg TdF',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1529','Hito XVIII to WGS 84 (1)','Derived through ties at 3 stations (RC03, TOTAL11 and MP12) to 3 IGS stations in November 1995','Oil exploration.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4254','EPSG','4326','EPSG','1486',0.5,18.38,192.45,96.82,'EPSG','9001',0.056,-0.142,-0.2,'EPSG','9104',-0.0013,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Arg TdF',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1530','NAD27 to WGS 84 (30)','','Accuracy 3m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4267','EPSG','4326','EPSG','1077',3.0,-4.2,135.4,181.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICH-Cub',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1531','Nahrwan 1967 to WGS 84 (4)','Parameter values adopted by Total are mean of those derived by Oceonics and Geoid through ties at platform AK1 to 4 IGS stations in March 1995.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4270','EPSG','4326','EPSG','2392',0.5,-245.0,-153.9,382.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-UAE Abk',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1532','M''poraloko to WGS 84 (2)','Derived as mean of Doris determinations at 3 stations in Port Gentil area in 1994.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4266','EPSG','4326','EPSG','1100',0.5,-80.7,-132.5,41.1,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Gab94',0);
@@ -1040,7 +1040,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','8438','Macao 1920 to WGS 84
INSERT INTO "helmert_transformation" VALUES('EPSG','8439','Hong Kong Geodetic CS to WGS 84 (1)','Approximation at the +/- 1m level assuming that Hong Kong Geodetic CS is equivalent to WGS 84.','Accuracy +/- 1 metre.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','8427','EPSG','4326','EPSG','1118',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Hkg',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8448','GDA2020 to WGS 84 (G1762) (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Parameter values taken from ITRF2014 to GDA2020 (1) (code 8049), assuming WGS 84 (G1762) is equivalent to ITRF2014 within the accuracy of the transformation.','Spatial referencing.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','7842','EPSG','7664','EPSG','4177',0.2,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',-1.50379,-1.18346,-1.20716,'EPSG','1032',0.0,'EPSG','1030',2020.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GA-Aus 0.2m',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8450','GDA2020 to WGS 84 (2)','Approximation at the 3m level assuming WGS 84 is equivalent to ITRF2014 within the accuracy of the transformation. See GDA2020 to WGS 84 (G1762) (1) (code 8448) for a better approximation and ITRF2014 to GDA2020 (1) (code 8049) for actual relationship.','Spatial referencing with 3-metre accuracy.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','7844','EPSG','4326','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','8452','Padang to WGS 84 (1)','Note: U.S. Defense Mapping Agency TR8350.2 September 1987 gives source CRS as Batavia and area as Sumatra. The Batavia (Genuk) CRS applies to Java, not Sumatra. EPSG presumes the source CRS should be Padang. Derived at 5 stations.','For military purposes. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4280','EPSG','4326','EPSG','1355',6.0,-377.0,681.0,-50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Idn Sumatra',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8452','Batavia to WGS 84 (1)','Derived at 5 stations. Note: U.S. DMA TR8350.2 September 1987 gives source CRS as Batavia and area as Sumatra. The Batavia (Genuk) CRS applies to Java and western Sumatra. EPSG presumes this CT applies to both. Sometimes found applied to all Sumatra.','For military purposes. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4211','EPSG','4326','EPSG','1285',6.0,-377.0,681.0,-50.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Idn Sumatra',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8674','La Canoa to PSAD56 (1)','In Venezuela PSAD56 is coincident with La Canoa.','Spatial referencing.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4247','EPSG','4248','EPSG','3327',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LAG-Ven E',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','8680','MGI 1901 to ETRS89 (7)','Derived at 1385 points across the area of Bosnia and Herzegovina. May be taken as approximate transformation MGI 1901 to WGS 84 (see code 8823).','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',0);
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);
@@ -1168,6 +1168,17 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','9224','ED50 to ETRS89 (15)',
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','9226','SHGD2015 to Astro DOS 71 (2)','Derived at 19 stations, RMS = 6cm. Note: Because of the large rotations about the Y- and Z-axes this transformation is not reversible. For the reverse transformation use Astro DOS 71 to SHGD2015 (2) (code 7895).','High Accuracy transformation from St Helena Geodetic Datum 2015. Not reversible - see remarks.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','7886','EPSG','4710','EPSG','3183',0.1,112.771,-12.282,18.935,'EPSG','9001',-2.1692,-16.8896,-17.1961,'EPSG','9104',19.54517,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel 0.1m Rev',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9227','ITRF2005 to NAD83(CSRS)v5 (1)','Concatenation of joint Canada-US NAD83>ITRF96 transformation (code 8259) with IGS value for ITRF96>ITRF97 and IERS transformations ITRF97>ITRF2005. Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','Geodesy. Defines NAD83(CSRS)v5 and is therefore treated as errorless.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4896','EPSG','8247','EPSG','1061',0.0,0.9963,-1.9024,-0.5219,'EPSG','9001',-25.915,-9.426,-11.599,'EPSG','1031',0.775,'EPSG','1028',0.0005,-0.0006,-0.0013,'EPSG','1042',-0.067,0.757,0.051,'EPSG','1032',-0.102,'EPSG','1030',1997.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'NRC-Can CSRSv5',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9234','Kalianpur 1962 to WGS 84 (5)','Derived by Western Geophysical for UTP 1996 East Sind 2D survey. Very similar parameter values (higher resolution but no better accuracy) were used by BGP for the ENI 2006 East Sind 2D survey.','Oil exploration.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4145','EPSG','4326','EPSG','2983',3.0,230.25,632.76,161.03,'EPSG','9001',-1.114,1.115,1.212,'EPSG','9104',12.584,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak E Sind',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9257','Chos Malal 1914 to WGS 84 (2)','Derived through common coordinates at 13 stations.','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4326','EPSG','4561',2.5,8.88,184.86,106.69,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg Cuyo',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9258','Chos Malal 1914 to WGS 84 (3)','Derived through common coordinates at 43 stations.','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4160','EPSG','4326','EPSG','1292',2.5,15.75,164.93,126.18,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg Neuq',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9259','Pampa del Castillo to WGS 84 (2)','Derived through common coordinates at 22 stations. Used by YPF throughout the Golfo San Jorge basin.','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4161','EPSG','4326','EPSG','4572',2.5,-233.43,6.65,173.64,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg GSJB',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9260','Tapi Aike to WGS 84 (1)','Used by YPF throughout the Tapi Aike basin.','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9248','EPSG','4326','EPSG','4569',5.0,-192.26,65.72,132.08,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg TapiAike',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9261','MMN to WGS 84 (1)','','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9251','EPSG','4326','EPSG','2357',2.5,-9.5,122.9,138.2,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg MMN',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9262','MMS to WGS 84 (1)','','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9253','EPSG','4326','EPSG','2357',2.5,-78.1,101.6,133.3,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg MMS',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9263','Hito XVIII 1963 to WGS 84 (3)','','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4254','EPSG','4326','EPSG','2357',2.5,18.2,190.7,100.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg TdF Hito',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9264','POSGAR 2007 to WGS 84 (2)','Derived as average at all points common between the POSGAR 94 and POSGAR 2007 networks. POSGAR 94 was adjusted to the WGS 84 coordinates of 20 stations in March to May 1994. Accuracy 0.1m in 1994 + 1.5cm per year.','Oil and gas exploration and production.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5340','EPSG','4326','EPSG','1033',0.5,-0.41,0.46,-0.35,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'YPF-Arg',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9281','Amersfoort to ETRS89 (8)','Derived using ETRF2014. In RDNAPTRANS2018 software used assuming an ETRS89 ellipsoidal height of 43m and with an additional correction grid (corrections of up to 0.25m). Replaces Amersfoort to ETRS89 (5) and (6) (tfm codes 4830 and 4831).','Accuracy 0.25m','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4289','EPSG','4258','EPSG','1275',0.25,565.7381,50.4018,465.2904,'EPSG','9001',1.91514,-1.60363,9.09546,'EPSG','9109',4.07244,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Nld 2018',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','9334','ITRF2014 to KSA-GRF17 (1)','Arabian plate rotations derived during KSA-GRF17 adjustment from observations at 41 sites with at least 2.5 years of continuous observations.','Geodesy.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','9331','EPSG','1206',0.001,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',-1.199,0.107,-1.468,'EPSG','1032',0.0,'EPSG','1030',2017.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'GCS-Sau',0);
INSERT INTO "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);
@@ -1192,7 +1203,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','15700','Gulshan 303 to WGS 8
INSERT INTO "helmert_transformation" VALUES('EPSG','15701','Kalianpur 1962 to WGS 84 (2)','Derived at Geodetic Survey office in Karachi in 1997.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326','EPSG','2985',1.0,275.57,676.78,229.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TFE-Pak Indus',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15702','Kalianpur 1962 to WGS 84 (3)','Derived at station S0001, an approximate offset to Survey of India primary station Kat Baman, in 1992 from 180 single point Transit passes observed in 1991 by Fugro-Geodetic for UTP.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326','EPSG','2984',3.0,278.9,684.39,226.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak Badin',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15703','Kalianpur 1962 to WGS 84 (4)','Derived at Chitrawala triangulation station by Fugro-Geodetic for UTP.','Oil exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4145','EPSG','4326','EPSG','2982',3.0,271.905,669.593,231.495,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak Karachi',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15704','Kalianpur 1962 to WGS 84 (5)','Derived by Western Geophysical for UTP 1996 East Sind 2D survey.','Oil exploration.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4145','EPSG','4326','EPSG','2983',3.0,230.25,632.76,161.03,'EPSG','9001',-1.114,1.115,1.212,'EPSG','9104',12.584,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak E Sind',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15704','Kalianpur 1962 to WGS 84 (5)','Derived by Western Geophysical for UTP 1996 East Sind 2D survey.','Oil exploration.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4145','EPSG','4326','EPSG','2983',3.0,230.25,632.76,161.03,'EPSG','9001',-1.114,1.115,1.212,'EPSG','9104',12.584,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'utp-Pak E Sind',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','15705','Minna to WGS 84 (12)','Derived via WGS 72(BE). Minna to WGS 72(BE) transformation derived in 1981 for Mobil E&P Nigeria (MEPCON) by Geodetic Survey through Transit translocation at six stations in southern Nigeria. Used by MEPCON in blocks OPL 215 and 221.','Oil industry exploration.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4263','EPSG','4326','EPSG','3819',8.0,-83.13,-104.95,114.63,'EPSG','9001',0.0,0.0,0.554,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'WGC-Nga 211',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15706','Minna to WGS 84 (13)','Used by Elf in Blocks OPL 222 and OPL 223 and by Mobil in 1994.','Oil industry exploration.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326','EPSG','1717',7.0,-93.6,-83.7,113.8,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Elf-Nga',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15707','ELD79 to WGS 84 (6)','Used by Petrocanada and previous licence holders in Amal field, concession 12.','Oil exploration and production','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4159','EPSG','4326','EPSG','2987',10.0,-118.996,-111.177,-198.687,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PCan-Lby Amal',0);
@@ -1319,7 +1330,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','15833','RGPF to WGS 84 (2)',
INSERT INTO "helmert_transformation" VALUES('EPSG','15842','Hong Kong 1963(67) to WGS 84 (1)','Derived at 2 satellite stations. Care: does not use Hong Kong 1963 (code 4838) as the source CRS.','Military mapping. Accuracy +/- 1m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4739','EPSG','4326','EPSG','1118',1.0,-156.0,-271.0,-189.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UKHO-Hkg',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15843','PZ-90 to WGS 84 (1)','Derived through Glonass and GPS at 30 stations throughout USSR - Former Soviet Union (FSU).','Geodetic applications. Accuracy better than 1.5 metres.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4740','EPSG','4326','EPSG','1262',1.5,0.0,0.0,1.5,'EPSG','9001',0.0,0.0,-0.076,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GiK-World',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15844','Pulkovo 1942 to PZ-90 (1)','Derived through Glonass at 30 stations throughout USSR - Former Soviet Union (FSU). Mandated for use in Russia by GosStandard of Russia Decree #327 of August 9, 2001.','Accuracy within area of primary CS42 control = 1 to 2m; accuracy at distant points 3 to 4 m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4284','EPSG','4740','EPSG','2423',4.0,25.0,-141.0,-80.0,'EPSG','9001',0.0,-0.35,-0.66,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GiK-Rus',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15845','Pampa del Castillo to WGS 84 (1)','Transformation parameter precision given to millimetres in information source but due to accuracy rounded to nearest decimetre for EPSG database.','Geodetic surveying within the oil industry. Accuracy 25 m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4161','EPSG','4326','EPSG','1265',25.0,27.5,14.0,186.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UNO-Arg ComRiv',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15845','Pampa del Castillo to WGS 84 (1)','Transformation parameter precision given to millimetres in information source but due to accuracy rounded to nearest decimetre for EPSG database.','Geodetic surveying within the oil industry. Accuracy 25 m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4161','EPSG','4326','EPSG','1265',25.0,27.5,14.0,186.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UNO-Arg ComRiv',1);
INSERT INTO "helmert_transformation" VALUES('EPSG','15846','Egypt Gulf of Suez S-650 TL to WGS 84 (2)','Sometime referred to as "Egypt 1907 to WGS 84". However, application to WGS 84 coordinates of the reverse of this tfm results in Gulf of Suez S-650 TL, not Egypt 1907, position. Gulf of Suez S-650 TL and Egypt 1907 CRSs differ by some 20 metres.','Used for oil exploration by GUPCO.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4706','EPSG','4326','EPSG','2341',5.0,-146.21,112.63,4.05,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Racal-Egy GoS',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15847','MOP78 to WGS 84 (2)','Replaces information from 2001 (tfm code 1925).','Accuracy +/- 10 metres.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4639','EPSG','4326','EPSG','2815',10.0,253.0,-132.0,-127.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Wlf Wallis',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','15848','ST84 Ile des Pins to WGS 84 (2)','','Accuracy +/- 10 metres.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4642','EPSG','4326','EPSG','2820',10.0,-13.0,-348.0,292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Ncl Pins',0);
+59 -59
View File
@@ -1,4 +1,4 @@
--- This file has been generated by scripts/build_db_create_ignf_from_xml.py from the https://geodesie.ign.fr/contenu/fichiers/IGNF.v3.1.0.xml definition file. DO NOT EDIT !
--- This file has been generated by scripts/build_db_create_ignf_from_xml.py from the http://librairies.ign.fr/geoportail/resources/IGNF.xml definition file. DO NOT EDIT !
INSERT INTO "metadata" VALUES('IGNF.SOURCE', 'https://geodesie.ign.fr/contenu/fichiers/IGNF.v3.1.0.xml');
INSERT INTO "metadata" VALUES('IGNF.VERSION', '3.1.0');
@@ -2696,8 +2696,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Huahine.mnt', -- as referenced by the IGNF registry
'ggpf02-Huahine.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2710,8 +2710,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00v2.mnt', -- as referenced by the IGNF registry
'ggg00v2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2724,8 +2724,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf10-Tahiti.mnt', -- as referenced by the IGNF registry
'ggpf10-Tahiti.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2738,8 +2738,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Raiatea.mnt', -- as referenced by the IGNF registry
'ggpf02-Raiatea.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2752,8 +2752,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_sbv2.mnt', -- as referenced by the IGNF registry
'ggg00_sbv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2766,8 +2766,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_smv2.mnt', -- as referenced by the IGNF registry
'gg10_smv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2780,8 +2780,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMG2016.mnt', -- as referenced by the IGNF registry
'RAMG2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2794,8 +2794,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggker08v2.mnt', -- as referenced by the IGNF registry
'ggker08v2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2808,8 +2808,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggspm06v1.mnt', -- as referenced by the IGNF registry
'ggspm06v1.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2822,8 +2822,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/gg10_sbv2.mnt', -- as referenced by the IGNF registry
'gg10_sbv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2836,8 +2836,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggguy15.mnt', -- as referenced by the IGNF registry
'ggguy15.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2850,8 +2850,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/metropole/RAF09.mnt', -- as referenced by the IGNF registry
'RAF09.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2864,8 +2864,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf08-Fakarava.mnt', -- as referenced by the IGNF registry
'ggpf08-Fakarava.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2878,8 +2878,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggm00v2.mnt', -- as referenced by the IGNF registry
'ggm00v2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2892,8 +2892,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf10-Moorea.mnt', -- as referenced by the IGNF registry
'ggpf10-Moorea.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2906,8 +2906,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Maupiti.mnt', -- as referenced by the IGNF registry
'ggpf02-Maupiti.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2920,8 +2920,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_lsv2.mnt', -- as referenced by the IGNF registry
'ggg00_lsv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2934,8 +2934,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggm04v1.mnt', -- as referenced by the IGNF registry
'ggm04v1.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2948,8 +2948,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggg00_smv2.mnt', -- as referenced by the IGNF registry
'ggg00_smv2.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2962,8 +2962,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALD2016.mnt', -- as referenced by the IGNF registry
'RALD2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2976,8 +2976,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAR07_bl.gra', -- as referenced by the IGNF registry
'RAR07_bl.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -2990,8 +2990,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALS2016.mnt', -- as referenced by the IGNF registry
'RALS2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3004,8 +3004,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RALDW842016.mnt', -- as referenced by the IGNF registry
'RALDW842016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3018,8 +3018,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Tahaa.mnt', -- as referenced by the IGNF registry
'ggpf02-Tahaa.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3032,8 +3032,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAGTBT2016.mnt', -- as referenced by the IGNF registry
'RAGTBT2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3046,8 +3046,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/metropole/RAC09.mnt', -- as referenced by the IGNF registry
'RAC09.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3060,8 +3060,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/RAMART2016.mnt', -- as referenced by the IGNF registry
'RAMART2016.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3074,8 +3074,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('https://geodesie.ign.fr/contenu/fichiers/documentation/grilles/metropole/RAF18.mnt', -- as referenced by the IGNF registry
'RAF18.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
INSERT INTO grid_alternatives(original_grid_name,
@@ -3088,8 +3088,8 @@ INSERT INTO grid_alternatives(original_grid_name,
VALUES ('http://geodesie.ign.fr/contenu/fichiers/documentation/grilles/outremer/ggpf02-Bora.mnt', -- as referenced by the IGNF registry
'ggpf02-Bora.gtx',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);
+2 -2
View File
@@ -1,2 +1,2 @@
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v9.8.4');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2019-11-12');
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v9.8.6');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2020-01-22');
+1 -1
View File
@@ -122,7 +122,7 @@ INSERT INTO "other_transformation" VALUES('EPSG','1519','Bern 1898 (Bern) to CH1
INSERT INTO "other_transformation" VALUES('EPSG','1755','Bogota 1975 (Bogota) to Bogota 1975 (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4802','EPSG','4218','EPSG','3229',0.0,'EPSG','8602','Longitude offset',-74.04513,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGAC-Col',0);
INSERT INTO "other_transformation" VALUES('EPSG','1756','Lisbon (Lisbon) to Lisbon (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4803','EPSG','4207','EPSG','1294',0.0,'EPSG','8602','Longitude offset',-9.0754862,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGC-Prt',0);
INSERT INTO "other_transformation" VALUES('EPSG','1757','MGI (Ferro) to MGI (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4805','EPSG','4312','EPSG','1321',0.0,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut balk',1);
INSERT INTO "other_transformation" VALUES('EPSG','1758','Padang (Jakarta) to Padang (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4808','EPSG','4280','EPSG','1355',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Sumatra',0);
INSERT INTO "other_transformation" VALUES('EPSG','1758','Padang (Jakarta) to Padang (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4808','EPSG','4280','EPSG','1355',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Sumatra',1);
INSERT INTO "other_transformation" VALUES('EPSG','1759','Batavia (Jakarta) to Batavia (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4813','EPSG','4211','EPSG','1285',0.0,'EPSG','8602','Longitude offset',106.482779,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Idn Java',0);
INSERT INTO "other_transformation" VALUES('EPSG','1760','RT38 (Stockholm) to RT38 (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4814','EPSG','4308','EPSG','3313',0.0,'EPSG','8602','Longitude offset',18.03298,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Swe',0);
INSERT INTO "other_transformation" VALUES('EPSG','1761','Greek (Athens) to Greek (1)','','Change of prime meridian.','EPSG','9601','Longitude rotation','EPSG','4815','EPSG','4120','EPSG','3254',0.0,'EPSG','8602','Longitude offset',23.4258815,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NTU-Grc',0);
+7 -6
View File
@@ -65,8 +65,7 @@ CREATE TABLE area(
east_lon FLOAT CHECK (east_lon BETWEEN -180 AND 180),
deprecated BOOLEAN NOT NULL CHECK (deprecated IN (0, 1)),
CONSTRAINT pk_area PRIMARY KEY (auth_name, code),
CONSTRAINT check_area_lat CHECK (south_lat <= north_lat),
CONSTRAINT check_area_lon CHECK (west_lon <= east_lon OR (east_lon + 360 - west_lon <= 200))
CONSTRAINT check_area_lat CHECK (south_lat <= north_lat)
);
CREATE TABLE prime_meridian(
@@ -1093,7 +1092,7 @@ CREATE TABLE grid_alternatives(
original_grid_name TEXT NOT NULL PRIMARY KEY, -- original grid name (e.g. Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz). For LOS/LAS format, the .las files
proj_grid_name TEXT NOT NULL, -- PROJ grid name (e.g egm08_25.gtx)
proj_grid_format TEXT NOT NULL, -- one of 'CTable2', 'NTv1', 'NTv2', 'GTX'
proj_method TEXT NOT NULL, -- hgridshift or vgridshift
proj_method TEXT NOT NULL, -- hgridshift, vgridshift or geoid_like
inverse_direction BOOLEAN NOT NULL CHECK (inverse_direction IN (0, 1)), -- whether the PROJ grid direction is reversed w.r.t to the authority one (TRUE in that case)
package_name TEXT, -- package name that contains the file
url TEXT, -- optional URL where to download the PROJ grid
@@ -1103,10 +1102,10 @@ CREATE TABLE grid_alternatives(
CONSTRAINT fk_grid_alternatives_grid_packages FOREIGN KEY (package_name) REFERENCES grid_packages(package_name),
CONSTRAINT check_grid_alternatives_grid_fromat CHECK (proj_grid_format IN ('CTable2', 'NTv1', 'NTv2', 'GTX')),
CONSTRAINT check_grid_alternatives_proj_method CHECK (proj_method IN ('hgridshift', 'vgridshift')),
CONSTRAINT check_grid_alternatives_proj_method CHECK (proj_method IN ('hgridshift', 'vgridshift', 'geoid_like')),
CONSTRAINT check_grid_alternatives_not_hgridshift CHECK (NOT(proj_method != 'hgridshift' AND proj_grid_format IN ('CTable2', 'NTv1', 'NTv2'))),
CONSTRAINT check_grid_alternatives_not_vgridshift CHECK (NOT(proj_method != 'vgridshift' AND proj_grid_format IN ('GTX'))),
CONSTRAINT check_grid_alternatives_original_grid_name CHECK (NOT(original_grid_name = proj_grid_name AND inverse_direction != 0)),
CONSTRAINT check_grid_alternatives_not_vgridshift CHECK (NOT(proj_method = 'hgridshift' AND proj_grid_format IN ('GTX'))),
CONSTRAINT check_grid_alternatives_inverse_direction CHECK (NOT(proj_method = 'geoid_like' AND inverse_direction = 1)),
CONSTRAINT check_grid_alternatives_package_name_url CHECK (NOT(package_name IS NOT NULL AND url IS NOT NULL)),
CONSTRAINT check_grid_alternatives_direct_download_url CHECK (NOT(direct_download IS NULL AND url IS NOT NULL)),
CONSTRAINT check_grid_alternatives_open_license_url CHECK (NOT(open_license IS NULL AND url IS NOT NULL))
@@ -1365,6 +1364,8 @@ CREATE TABLE supersession(
source TEXT
);
CREATE INDEX idx_supersession ON supersession(superseded_table_name, superseded_auth_name, superseded_code);
CREATE TRIGGER supersession_insert_trigger
BEFORE INSERT ON supersession
FOR EACH ROW BEGIN
+15 -5
View File
@@ -3565,8 +3565,8 @@ INSERT INTO "projected_crs" VALUES('EPSG','8838','MTRF-2000 / UTM zone 38N',NULL
INSERT INTO "projected_crs" VALUES('EPSG','8839','MTRF-2000 / UTM zone 39N',NULL,NULL,'EPSG','4400','EPSG','8818','EPSG','16039','EPSG','4528',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8840','MTRF-2000 / UTM zone 40N',NULL,NULL,'EPSG','4400','EPSG','8818','EPSG','16040','EPSG','3106',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8857','WGS 84 / Equal Earth Greenwich',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','8854','EPSG','1262',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8858','WGS 84 / Equal Earth Americas',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','8855','EPSG','1262',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8859','WGS 84 / Equal Earth Asia-Pacific',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','8856','EPSG','1262',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8858','WGS 84 / Equal Earth Americas',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','8855','EPSG','4520',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8859','WGS 84 / Equal Earth Asia-Pacific',NULL,NULL,'EPSG','4400','EPSG','4326','EPSG','8856','EPSG','4523',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','8903','RGWF96 / UTM zone 1S',NULL,NULL,'EPSG','4400','EPSG','8900','EPSG','16101','EPSG','1255',NULL,0);
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);
@@ -3601,6 +3601,16 @@ INSERT INTO "projected_crs" VALUES('EPSG','9217','VN-2000 / TM-3 108-15',NULL,NU
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','9249','Tapi Aike / Argentina 1',NULL,NULL,'EPSG','4530','EPSG','9248','EPSG','18031','EPSG','4570',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9250','Tapi Aike / Argentina 2',NULL,NULL,'EPSG','4530','EPSG','9248','EPSG','18032','EPSG','4571',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9252','MMN / Argentina 2',NULL,NULL,'EPSG','4530','EPSG','9251','EPSG','18032','EPSG','2357',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9254','MMS / Argentina 2',NULL,NULL,'EPSG','4530','EPSG','9253','EPSG','18032','EPSG','2357',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9265','POSGAR 2007 / UTM zone 19S',NULL,NULL,'EPSG','4400','EPSG','5340','EPSG','16119','EPSG','2596',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9271','MGI / Austria West',NULL,NULL,'EPSG','4530','EPSG','4312','EPSG','9268','EPSG','1706',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9272','MGI / Austria Central',NULL,NULL,'EPSG','4530','EPSG','4312','EPSG','9269','EPSG','1707',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9273','MGI / Austria East',NULL,NULL,'EPSG','4530','EPSG','4312','EPSG','9270','EPSG','1708',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9284','Pampa del Castillo / Argentina 1',NULL,NULL,'EPSG','4530','EPSG','4161','EPSG','18031','EPSG','4564',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','9285','Pampa del Castillo / Argentina 3',NULL,NULL,'EPSG','4530','EPSG','4161','EPSG','18033','EPSG','4565',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);
@@ -4479,9 +4489,9 @@ INSERT INTO "projected_crs" VALUES('EPSG','31284','MGI / Austria M28',NULL,NULL,
INSERT INTO "projected_crs" VALUES('EPSG','31285','MGI / Austria M31',NULL,NULL,'EPSG','4530','EPSG','4312','EPSG','18045','EPSG','1707',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31286','MGI / Austria M34',NULL,NULL,'EPSG','4530','EPSG','4312','EPSG','18046','EPSG','1708',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31287','MGI / Austria Lambert',NULL,NULL,'EPSG','4530','EPSG','4312','EPSG','19947','EPSG','1037',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31288','MGI (Ferro) / M28',NULL,NULL,'EPSG','4530','EPSG','4805','EPSG','18047','EPSG','1706',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31289','MGI (Ferro) / M31',NULL,NULL,'EPSG','4530','EPSG','4805','EPSG','18048','EPSG','1707',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31290','MGI (Ferro) / M34',NULL,NULL,'EPSG','4530','EPSG','4805','EPSG','18049','EPSG','1708',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31288','MGI (Ferro) / Austria zone M28',NULL,NULL,'EPSG','4530','EPSG','4805','EPSG','18047','EPSG','1706',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31289','MGI (Ferro) / Austria zone M31',NULL,NULL,'EPSG','4530','EPSG','4805','EPSG','18048','EPSG','1707',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31290','MGI (Ferro) / Austria zone M34',NULL,NULL,'EPSG','4530','EPSG','4805','EPSG','18049','EPSG','1708',NULL,0);
INSERT INTO "projected_crs" VALUES('EPSG','31291','MGI (Ferro) / Austria West Zone',NULL,NULL,'EPSG','4499','EPSG','4805','EPSG','18041','EPSG','1706',NULL,1);
INSERT INTO "projected_crs" VALUES('EPSG','31292','MGI (Ferro) / Austria Central Zone',NULL,NULL,'EPSG','4499','EPSG','4805','EPSG','18042','EPSG','1708',NULL,1);
INSERT INTO "projected_crs" VALUES('EPSG','31293','MGI (Ferro) / Austria East Zone',NULL,NULL,'EPSG','4499','EPSG','4805','EPSG','18043','EPSG','1707',NULL,1);
+18
View File
@@ -200,3 +200,21 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9137','grid_tran
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','6326','grid_transformation','EPSG','9229','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7646','grid_transformation','EPSG','9230','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7647','grid_transformation','EPSG','9231','EPSG');
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4831','helmert_transformation','EPSG','9281','EPSG');
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','4830','helmert_transformation','EPSG','9281','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7000','grid_transformation','EPSG','9282','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7860','grid_transformation','EPSG','9312','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','4459','grid_transformation','EPSG','9325','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7840','grid_transformation','EPSG','9326','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7861','grid_transformation','EPSG','9313','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7872','grid_transformation','EPSG','9324','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7871','grid_transformation','EPSG','9323','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7870','grid_transformation','EPSG','9322','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7869','grid_transformation','EPSG','9321','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7868','grid_transformation','EPSG','9320','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7867','grid_transformation','EPSG','9319','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7866','grid_transformation','EPSG','9318','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7865','grid_transformation','EPSG','9317','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7864','grid_transformation','EPSG','9316','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7863','grid_transformation','EPSG','9315','EPSG');
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7862','grid_transformation','EPSG','9314','EPSG');
+4
View File
@@ -217,3 +217,7 @@ INSERT INTO "vertical_crs" VALUES('EPSG','8904','TWVD 2001 height',NULL,NULL,'EP
INSERT INTO "vertical_crs" VALUES('EPSG','8911','DACR52 height',NULL,NULL,'EPSG','6499','EPSG','1226','EPSG','3232',0);
INSERT INTO "vertical_crs" VALUES('EPSG','9130','IGN 2008 LD height',NULL,NULL,'EPSG','6499','EPSG','1250','EPSG','2893',0);
INSERT INTO "vertical_crs" VALUES('EPSG','9245','CGVD2013(CGG2013a) height',NULL,NULL,'EPSG','6499','EPSG','1256','EPSG','1061',0);
INSERT INTO "vertical_crs" VALUES('EPSG','9255','SRVN16 height',NULL,NULL,'EPSG','6499','EPSG','1260','EPSG','4573',0);
INSERT INTO "vertical_crs" VALUES('EPSG','9274','EVRF2000 Austria height',NULL,NULL,'EPSG','6499','EPSG','1261','EPSG','1037',0);
INSERT INTO "vertical_crs" VALUES('EPSG','9279','SA LLD height',NULL,NULL,'EPSG','6499','EPSG','1262','EPSG','3309',0);
INSERT INTO "vertical_crs" VALUES('EPSG','9335','KSA-VRF14 height',NULL,NULL,'EPSG','6499','EPSG','1269','EPSG','3303',0);
+4
View File
@@ -80,6 +80,10 @@ INSERT INTO "vertical_datum" VALUES('EPSG','1224','Taiwan Vertical Datum 2001',N
INSERT INTO "vertical_datum" VALUES('EPSG','1226','Datum Altimetrico de Costa Rica 1952',NULL,NULL,'EPSG','3232','1952-01-01',0);
INSERT INTO "vertical_datum" VALUES('EPSG','1250','IGN 2008 LD',NULL,NULL,'EPSG','2893','2008-01-01',0);
INSERT INTO "vertical_datum" VALUES('EPSG','1256','Canadian Geodetic Vertical Datum of 2013 (CGG2013a)',NULL,NULL,'EPSG','1061','2015-12-05',0);
INSERT INTO "vertical_datum" VALUES('EPSG','1260','Sistema de Referencia Vertical Nacional 2016',NULL,NULL,'EPSG','4573','2013-01-01',0);
INSERT INTO "vertical_datum" VALUES('EPSG','1261','European Vertical Reference Frame 2000 Austria',NULL,NULL,'EPSG','1037',NULL,0);
INSERT INTO "vertical_datum" VALUES('EPSG','1262','South Africa Land Levelling Datum',NULL,NULL,'EPSG','3309','2010-05-11',0);
INSERT INTO "vertical_datum" VALUES('EPSG','1269','Kingdom of Saudi Arabia Vertical Reference Frame Jeddah 2014',NULL,NULL,'EPSG','3303','2014-10-01',0);
INSERT INTO "vertical_datum" VALUES('EPSG','5100','Mean Sea Level',NULL,NULL,'EPSG','1262',NULL,0);
INSERT INTO "vertical_datum" VALUES('EPSG','5101','Ordnance Datum Newlyn',NULL,NULL,'EPSG','2792',NULL,0);
INSERT INTO "vertical_datum" VALUES('EPSG','5102','National Geodetic Vertical Datum 1929',NULL,NULL,'EPSG','1323','1929-01-01',0);
@@ -3,17 +3,19 @@
task:
name: FreeBSD
freebsd_instance:
cpu: 4
matrix:
image: freebsd-12-0-release-amd64
image: freebsd-12-1-release-amd64
# image: freebsd-11-2-release-amd64
# image: freebsd-10-4-release-amd64
env:
CIRRUS_CLONE_DEPTH: 1
MAKE_FLAGS: -j 2
MAKE_FLAGS: -j 4
cache:
folder: $HOME/.ccache
# Disable cache: its upload can take up to 30 minutes!
#cache:
# folder: $HOME/.ccache
pkginstall_script:
- pkg install -y autoconf automake libtool pkgconf sqlite3 wget unzip ccache gmake
@@ -22,7 +24,7 @@ task:
- (cd data && unzip -o ../proj-datumgrid-1.8.zip)
configure_script:
- ./autogen.sh
- CC="ccache cc" CXX="ccache c++" ./configure --disable-static
- ./configure --disable-static
compile_script:
- gmake $(MAKE_FLAGS)
test_script:
@@ -37,7 +37,7 @@ matrix:
addons:
apt:
sources:
- ubuntu-toolchain-r-test
- sourceline: 'ppa:ubuntu-toolchain-r/test'
packages:
- g++-7
- make
@@ -34,7 +34,7 @@ build_script:
appveyor DownloadFile https://sqlite.org/2018/sqlite-tools-win32-x86-3250100.zip
7z x sqlite-tools-win32-x86-3250100.zip
- copy "%APPVEYOR_BUILD_FOLDER%"\sqlite-tools-win32-x86-3250100\sqlite3.exe %SQLITE3_BIN%
- set PATH=%PATH%;%SQLITE3_BIN%
- set PATH=%SQLITE3_BIN%;%PATH%
- if "%platform%" == "x64" SET VS_FULL=%VS_VERSION% Win64
- if "%platform%" == "x64" SET BUILD_LIBPROJ_SHARED=ON
- if "%platform%" == "x86" SET VS_FULL=%VS_VERSION%
@@ -56,7 +56,7 @@ test_script:
- 7z e -aoa -y proj-datumgrid-1.8.zip
- cd %PROJ_BUILD%
- ctest -V -C Release
- set PATH=%PATH%;%PROJ_DIR%\bin
- set PATH=%PROJ_DIR%\bin;%PATH%
- proj
deploy: off
+17
View File
@@ -0,0 +1,17 @@
name: proj
channels:
- conda-forge
dependencies:
- descartes
- doxygen < 1.9
- 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.

After

Width:  |  Height:  |  Size: 14 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
+9 -4
View File
@@ -97,13 +97,18 @@ The following control parameters can appear in any order:
.. option:: -r
This options reverses the order of the expected input from
longitude-latitude or x-y to latitude-longitude or y-x.
This options reverses the order of the first two expected
inputs from that specified by the CRS to the opposite
order. The third coordinate, typically height, remains
third.
.. option:: -s
This options reverses the order of the output from x-y or longitude-latitude
to y-x or latitude-longitude.
This options reverses the order of the first two expected
outputs from that specified by the CRS to the opposite
order. The third coordinate, typically height, remains
third.
.. option:: -f <format>
+14
View File
@@ -16,3 +16,17 @@ contributor the community is always very welcoming.
code_contributions
code_of_conduct
rfc/index
Conference
----------
.. image:: ../../images/foss4g2020.png
:alt: FOSS4G 2020
:target: https://2020.foss4g.org/
`FOSS4G 2020 <https://2020.foss4g.org/>`_ is the leading annual conference for
free and open source geospatial software. It will include presentations related
to PROJ, and some of the PROJ development community will be attending. It is the
event for those interested in PROJ, other FOSS geospatial technologies and the
community around them. The conference will be held in Calgary, Canada,
August 24th - August 29th, 2020.
+1
View File
@@ -14,3 +14,4 @@ the project.
rfc-1
rfc-2
rfc-3
rfc-4
File diff suppressed because it is too large Load Diff
+17 -16
View File
@@ -14,7 +14,6 @@
import sys
import os
import datetime
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
@@ -42,6 +41,9 @@ extensions = [
# 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']
@@ -61,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-2020'
# 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.3.0'
# use same |release| as |version|
release = version
version = '6.3'
release = '6.3.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 = 'February 2020'
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
@@ -170,16 +168,16 @@ html_logo = '../images/logo.png'
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
htm_css_files = [
'theme_overrides.css', # override wide tables in RTD theme
]
html_context = {
'display_github': True,
'theme_vcs_pageview_mode': 'edit',
'github_user': 'OSGeo',
'github_repo': 'PROJ',
# TODO: edit when switching active branch
'github_version': '/6.2/docs/source/',
'css_files': [
'_static/theme_overrides.css', # override wide tables in RTD theme
],
'github_version': '/6.3/docs/source/',
}
# Add any extra paths that contain custom files (such as robots.txt or
@@ -252,6 +250,8 @@ preamble = r"""
\ifdefined\DeclareUnicodeCharacter
\DeclareUnicodeCharacter{2032}{$'$}% prime
\fi
\usepackage[notbib]{tocbibind}
"""
latex_elements = {
@@ -263,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',
+5
View File
@@ -28,6 +28,11 @@ Go (Golang)
`go-proj <https://github.com/everystreet/go-proj>`_:
Go bindings and idiomatic wrapper for PROJ
Julia
=====
`Proj4.jl <https://github.com/JuliaGeo/Proj4.jl>`_"
Low-level bindings and a Julian API over PROJ.
TCL
========
`proj4tcl <http://wiki.tcl.tk/41270>`_:
+8 -4
View File
@@ -20,23 +20,27 @@ PROJ project or using the library in their own software.
bindings
migration
The source code for PROJ is maintained in a
`git repository on GitHub <https://github.com/OSGeo/PROJ>`_.
Additionally, a collection of PROJ-compatible transformation grids
are maintained in a `separate git repository <https://github.com/OSGeo/proj-datumgrid>`_.
.. attention::
The ``projects.h`` header and the functions related to it is considered
deprecated from version 5.0.0 and onwards. The header will be removed
from PROJ in version 6.0.0 scheduled for release February 1st 2019.
deprecated from version 5.0.0 and onwards. The header has been removed
PROJ in version 6.0.0 released February 1st 2019.
.. attention::
The nmake build system on Windows will not be supported from
The nmake build system on Windows is on longer supported in
version 6.0.0 on onwards. Use CMake instead.
.. attention::
The ``proj_api.h`` header and the functions related to it is
considered deprecated from version 5.0.0 and onwards. The header will be
removed from PROJ in version 7.0.0 scheduled for release February 1st
removed from PROJ in version 7.0.0 scheduled for release March 1st
2020.
.. attention::
+8
View File
@@ -181,6 +181,14 @@ 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.
Feedback from downstream projects on the PROJ 6 migration
###############################################################################
* `PROJ 6 adoption by Spatialite <https://www.gaia-gis.it/fossil/libspatialite/wiki?name=PROJ.6>`_
* `On GDA2020, PROJ 6 and QGIS: Lessons learnt and recommendations for handling GDA2020 within geospatial software development <https://www.icsm.gov.au/sites/default/files/North%20Road%20Handling%20GDA2020%20within%20Geospatial%20Software%20Development.pdf>`_
================================================================================
Version 4 to 5 API Migration
================================================================================
+16 -8
View File
@@ -13,17 +13,18 @@ distribution of the source code and various resource file archives. See
Current Release
--------------------------------------------------------------------------------
* **2019-11-01** `proj-6.2.1.tar.gz`_ (`md5`_)
* **2020-02-11** `proj-6.3.1.tar.gz`_ (`md5`_)
* **2018-09-15** `proj-datumgrid-1.8.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-09-01** `proj-datumgrid-europe-1.5.zip`_
* **2019-03-01** `proj-datumgrid-north-america-1.3.zip`_
* **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_
* **2019-03-01** `proj-datumgrid-world-1.0.zip`_
* **PDF Manual** `proj.pdf`_
Past Releases
--------------------------------------------------------------------------------
* **2020-01-01** `proj-6.3.0.tar.gz`_
* **2019-11-01** `proj-6.2.1.tar.gz`_
* **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`_
@@ -38,13 +39,19 @@ Past Releases
* **2018-03-01** `proj-datumgrid-1.7.zip`_
* **2016-09-11** `proj-datumgrid-1.6.zip`_
* **2019-09-01** `proj-datumgrid-europe-1.4.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`_
* **2019-03-01** `proj-datumgrid-north-america-1.2.zip`_
* **2018-09-15** `proj-datumgrid-north-america-1.1.zip`_
* **2018-03-01** `proj-datumgrid-north-america-1.0.zip`_
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
.. _`proj-6.3.1.tar.gz`: https://download.osgeo.org/proj/proj-6.3.1.tar.gz
.. _`md5`: https://download.osgeo.org/proj/proj-6.3.1.tar.gz.md5
.. _`proj-6.3.0.tar.gz`: https://download.osgeo.org/proj/proj-6.3.0.tar.gz
.. _`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
@@ -65,10 +72,11 @@ Past Releases
.. _`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-europe-1.5.zip`: https://download.osgeo.org/proj/proj-datumgrid-europe-1.5.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-north-america-1.3.zip`: https://download.osgeo.org/proj/proj-datumgrid-north-america-1.3.zip
.. _`proj-datumgrid-oceania-1.0.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.0.zip
.. _`proj-datumgrid-oceania-1.1.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.1.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.2.1.tar.gz.md5
.. _`proj.pdf`: https://raw.githubusercontent.com/OSGeo/PROJ/gh-pages/proj.pdf
+19
View File
@@ -172,3 +172,22 @@ paths. In most cases, the following paths are checked in order:
Note that if you're using conda, activating an environment sets
:envvar:`PROJ_LIB` to a resource directory located in that environment.
What happend to PROJ.4?
--------------------------------------------------------------------------------
The first incarnation of PROJ saw the light of day in 1983. Back then it
was simply known as PROJ. Eventually a new version was released, known
as PROJ.2 in order to distinguish between the two versions. Later on both
PROJ.3 and PROJ.4 was released. By the time PROJ.4 was released the
software had matured enough that a new major version release wasn't an
immediate necesity. PROJ.4 was around for more than 25 years before it
again became time for an update. This left the project in a bit of a
conundrum regarding the name. For the majority of the life-time of the product it was known as PROJ.4, but with the release of version 5 the name
was no longer aligned with the version number. As a consequence, it was
decided to decouple the name from the version number and once again simply
call the software PROJ.
Use of name PROJ.4 is now strictly reserved for describing legacy behaviour
of the software, e.g. "PROJ.4 strings" as seen in :program:`projinfo`
output.
-5
View File
@@ -29,8 +29,3 @@ PROJ
You can download the source code for PROJ on the :ref:`download section<download>`
and find links to prepackaged executables in the
:ref:`installation section<install>`.
In addition to this website the PROJ documentation is also available in `PDF`_
form.
.. _`PDF`: https://raw.githubusercontent.com/OSGeo/proj.4/gh-pages/proj.pdf
+6
View File
@@ -167,6 +167,12 @@ If another path prefix is required, then execute::
In either case, the directory of the prefix path must exist and be writable by
the installer.
If you are building from the git repository you have to first run::
./autogen.sh
which will generate a configure script that can be used as described above.
Before proceeding with the installation we need to add the datum grids. Unzip
the contents of the *proj-datumgrid* package into ``data/``::
+129
View File
@@ -3,6 +3,135 @@
News
###############################################################################
6.3.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*February 11th 2020*
Updates
-------
* Update the EPSG database to version 9.8.6
* Database: add mapping for gg10_smv2.mnt and gg10_sbv2.mnt French grids
* Database: add mapping for TOR27CSv1.GSB
Bug fixes
---------
* Fix wrong use of derivingConversionRef() that caused issues with use of
+init=epsg:XXXX by GDAL (affecting R spatial libraries) or in MapServer
* fix exporting CoordinateSystem to PROJ JSON with ID
* projinfo: use No. abbreviation instead of UTF-8 character
(`#1828 <https://github.com/OSGeo/PROJ/issues/1828>`_)
* CompoundCRS::identify(): avoid exception when horiz/vertical part is a
BoundCRS
* createOperations(): fix dealing with projected 3D CRS whose Z units != metre
* WKT1_GDAL export: limit datum name massaging to names matching EPSG
(`#1835 <https://github.com/OSGeo/PROJ/issues/1835>`_)
* unitconvert with mjd time format: avoid potential integer overflow
(ossfuzz 20072)
* ProjectedCRS::identify(): fix wrong identification of some ESRI WKT linked
to units
* Database: add a geoid_like value for proj_method column of grid_alternatives,
fix related entries and simplify/robustify logic to deal with EPSG
'Geographic3D to GravityRelatedHeight' methods
* Fix ingestion of +proj=cea with +k_0 (`#1881 <https://github.com/OSGeo/PROJ/issues/1881>`_)
* Fix performance issue, affecting PROJ.4 string generation of EPSG:7842
(`#1913 <https://github.com/OSGeo/PROJ/issues/1913>`_)
* Fix identification of ESRI-style datum names starting with D\_ but without
alias (`#1911 <https://github.com/OSGeo/PROJ/issues/1911>`_)
* cart: Avoid discontinuity at poles in the inverse case
(`#1906 <https://github.com/OSGeo/PROJ/issues/1906>`_)
* Various updates to make regression test suite pass with gcc on i386
(`#1906 <https://github.com/OSGeo/PROJ/issues/1906>`_)
6.3.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*January 1st 2020*
Updates
-------
* Database: tune accuracy of Canadian NTv1 file w.r.t NTv2 (`#1812 <https://github.com/OSGeo/PROJ/issues/1812>`_)
* Modify verbosity level of some debug/trace messages (`#1811 <https://github.com/OSGeo/PROJ/issues/1811>`_)
* :program:`projinfo`: no longer call createBoundCRSToWGS84IfPossible() for WKT1:GDAL
(`#1810 <https://github.com/OSGeo/PROJ/issues/1810>`_)
* :c:func:`proj_trans`: add retry logic to select other transformation if the best one
fails. (`#1809 <https://github.com/OSGeo/PROJ/issues/1809>`_)
* :c:func:`BoundCRS::identify()`: improvements to discard CRS that aren't relevant
(`#1802 <https://github.com/OSGeo/PROJ/issues/1802>`_)
* Database: update to IGNF v3.1.0 (`#1785 <https://github.com/OSGeo/PROJ/issues/1785>`_)
* Build: Only export symbols if building DLL (`#1773 <https://github.com/OSGeo/PROJ/issues/1773>`_)
* Database: update ESRI entries with ArcGIS Desktop version 10.8.0 database
(`#1762 <https://github.com/OSGeo/PROJ/issues/1762>`_)
* :c:func:`createOperations()`: chain operations whose middle CRSs are not identical but
have the same datum (`#1734 <https://github.com/OSGeo/PROJ/issues/1734>`_)
* import/export PROJJSON: support a interpolation_crs key to geoid_model
(`#1732 <https://github.com/OSGeo/PROJ/issues/1732>`_)
* Database: update to EPSG v9.8.4 (`#1725 <https://github.com/OSGeo/PROJ/issues/1725>`_)
* Build: require SQLite 3.11 (`#1721 <https://github.com/OSGeo/PROJ/issues/1721>`_)
* Add support for GEOIDMODEL (`#1710 <https://github.com/OSGeo/PROJ/issues/1710>`_)
* Better filtering based on extent and performance improvements (`#1709 <https://github.com/OSGeo/PROJ/issues/1709>`_)
Bug fixes
---------
* Horizontal grid shift: fix issue on iterative inverse computation when
switching between (sub)grids (`#1797 <https://github.com/OSGeo/PROJ/issues/1797>`_)
* :c:func:`createOperations()`: make filtering out of 'uninteresting' operations less
aggressive (`#1788 <https://github.com/OSGeo/PROJ/issues/1788>`_)
* Make EPSG:102100 resolve to ESRI:102100 (`#1786 <https://github.com/OSGeo/PROJ/issues/1786>`_)
* ``ob_tran``: restore traditional handling of ``+to_meter`` with :c:func:`pj_transform()` and
:program:`proj` utility (`#1783 <https://github.com/OSGeo/PROJ/issues/1783>`_)
* CRS identification: use case insensitive comparison for authority name
(`#1780 <https://github.com/OSGeo/PROJ/issues/1780>`_)
* :c:func:`normalizeForVisualization()` and other methods applying on a ProjectedCRS: do
not mess the derivingConversion object of the original object (`#1746 <https://github.com/OSGeo/PROJ/issues/1746>`_)
* :c:func:`createOperations()`: fix transformation computation from/to a CRS with
``+geoidgrids`` and ``+vunits`` != m (`#1731 <https://github.com/OSGeo/PROJ/issues/1731>`_)
* Fix :c:func:`proj_assign_context()`/:c:func:`pj_set_ctx()` with pipelines and alternative coord
operations (`#1726 <https://github.com/OSGeo/PROJ/issues/1726>`_)
* Database: add an auxiliary concatenated_operation_step table to allow
arbitrary number of steps (`#1696 <https://github.com/OSGeo/PROJ/issues/1696>`_)
* Fix errors running gie-based tests in Debug mode on Windo (`#1688 <https://github.com/OSGeo/PROJ/issues/1688>`_)
6.2.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*November 1st 2019*
@@ -5,7 +5,7 @@ Computation of coordinate operations between two CRS
================================================================================
:Author: Even Rouault
:Last Updated: 2019-11-28
:Last Updated: 2020-01-02
Introduction
------------
@@ -41,8 +41,8 @@ geographic CRS:
DERIVED_FROM(EPSG):1313, NAD27 to NAD83 (4), 1.5 m, Canada - NAD27, at least one grid missing
DERIVED_FROM(EPSG):1241, NAD27 to NAD83 (1), 0.15 m, USA - CONUS including EEZ
DERIVED_FROM(EPSG):1243, NAD27 to NAD83 (2), 0.5 m, USA - Alaska including EEZ
DERIVED_FROM(EPSG):1573, NAD27 to NAD83 (6), 1.5 m, Canada - Quebec, at least one grid missing
EPSG:1462, NAD27 to NAD83 (5), 1.0 m, Canada - Quebec, at least one grid missing
EPSG:1573, NAD27 to NAD83 (6), 1.5 m, Canada - Quebec, at least one grid missing
EPSG:9111, NAD27 to NAD83 (9), 1.5 m, Canada - Saskatchewan, at least one grid missing
unknown id, Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation
EPSG:8555, NAD27 to NAD83 (7), 0.15 m, USA - CONUS and GoM, at least one grid missing
@@ -236,7 +236,7 @@ are equivalent for most purposes.
.. code-block:: shell
$ projinfo projinfo -s EPSG:7042 -t EPSG:4936
$ projinfo -s EPSG:7042 -t EPSG:4936
Candidate operations found: 1
-------------------------------------
@@ -304,12 +304,12 @@ the source and target CRS, and inverting the resulting operation(s):
$ projinfo -s NAD83 -t NAD27 --spatial-test intersects --summary
Candidate operations found: 10
INVERSE(DERIVED_FROM(EPSG)):1312, Inverse of NAD27 to NAD83 (3), 1.0 m, Canada
INVERSE(DERIVED_FROM(EPSG)):1312, Inverse of NAD27 to NAD83 (3), 2.0 m, Canada
INVERSE(DERIVED_FROM(EPSG)):1313, Inverse of NAD27 to NAD83 (4), 1.5 m, Canada - NAD27
INVERSE(DERIVED_FROM(EPSG)):1241, Inverse of NAD27 to NAD83 (1), 0.15 m, USA - CONUS including EEZ
INVERSE(DERIVED_FROM(EPSG)):1243, Inverse of NAD27 to NAD83 (2), 0.5 m, USA - Alaska including EEZ
INVERSE(DERIVED_FROM(EPSG)):1313, Inverse of NAD27 to NAD83 (4), 1.5 m, Canada - NAD27, at least one grid missing
INVERSE(EPSG):1462, Inverse of NAD27 to NAD83 (5), 1.0 m, Canada - Quebec, at least one grid missing
INVERSE(EPSG):1573, Inverse of NAD27 to NAD83 (6), 1.5 m, Canada - Quebec, at least one grid missing
INVERSE(DERIVED_FROM(EPSG)):1573, Inverse of NAD27 to NAD83 (6), 1.5 m, Canada - Quebec, at least one grid missing
INVERSE(EPSG):1462, Inverse of NAD27 to NAD83 (5), 2.0 m, Canada - Quebec, at least one grid missing
INVERSE(EPSG):9111, Inverse of NAD27 to NAD83 (9), 1.5 m, Canada - Saskatchewan, at least one grid missing
unknown id, Ballpark geographic offset from NAD83 to NAD27, unknown accuracy, World, has ballpark transformation
INVERSE(EPSG):8555, Inverse of NAD27 to NAD83 (7), 0.15 m, USA - CONUS and GoM, at least one grid missing
@@ -660,47 +660,74 @@ CompoundCRS to CompoundCRS
---------------------------------------------------------------------------------
There is some similarity with the previous paragraph. We first research the
vertical transformations between the vertical CRS. If such tranformation has
a registered interpolation geographic CRS, then it is used. Otherwise we fallback
to the geographic CRS of the source CRS.
vertical transformations between the two vertical CRS.
Finally, a 3-level loop to create the final set of operations chaining together:
1. If there is such a tranformation, be it direct, or if both vertical CRS
relate to a common intermediate CRS.
If it has a registered interpolation geographic CRS, then it is used.
Otherwise we fallback to the geographic CRS of the source CRS.
- the horizontal transformation from the source CRS to the interpolation CRS
- the vertical transformation
- the horizontal transformation from the interpolation CRS to the target CRS.
Finally, a 3-level loop to create the final set of operations chaining together:
This is implemented by the ``createOperationsCompoundToGeog`` method
- the horizontal transformation from the source CRS to the interpolation CRS
- the vertical transformation
- the horizontal transformation from the interpolation CRS to the target CRS.
Example:
Example:
.. code-block:: shell
.. code-block:: shell
$ projinfo -s "NAD27 + NGVD29 height (ftUS)" -t "NAD83 + NAVD88 height" --spatial-test intersects --summary
$ projinfo -s "NAD27 + NGVD29 height (ftUS)" -t "NAD83 + NAVD88 height" --spatial-test intersects --summary
Candidate operations found: 20
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (1), 0.17 m, USA - CONUS east of 89°W - onshore
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + NAD27 to NAD83 (1), 0.17 m, USA - CONUS 89°W-107°W - onshore
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + NAD27 to NAD83 (1), 0.17 m, USA - CONUS west of 107°W - onshore
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (3), 1.02 m, unknown domain of validity
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + NAD27 to NAD83 (3), 1.02 m, unknown domain of validity
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + NAD27 to NAD83 (3), 1.02 m, unknown domain of validity
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (5), 1.02 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (6), 1.52 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + NAD27 to NAD83 (9), 1.52 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + NAD27 to NAD83 (9), 1.52 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, USA - CONUS east of 89°W - onshore, has ballpark transformation
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, USA - CONUS 89°W-107°W - onshore, has ballpark transformation
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, USA - CONUS west of 107°W - onshore, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (1), unknown accuracy, USA - CONUS including EEZ, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (3), unknown accuracy, Canada, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (4), unknown accuracy, Canada - NAD27, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (5), unknown accuracy, Canada - Quebec, has ballpark transformation, at least one grid missing
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (6), unknown accuracy, Canada - Quebec, has ballpark transformation, at least one grid missing
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (9), unknown accuracy, Canada - Saskatchewan, has ballpark transformation, at least one grid missing
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation
Candidate operations found: 20
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (1), 0.17 m, USA - CONUS east of 89°W - onshore
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + NAD27 to NAD83 (1), 0.17 m, USA - CONUS 89°W-107°W - onshore
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + NAD27 to NAD83 (1), 0.17 m, USA - CONUS west of 107°W - onshore
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (3), 1.02 m, unknown domain of validity
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + NAD27 to NAD83 (3), 1.02 m, unknown domain of validity
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + NAD27 to NAD83 (3), 1.02 m, unknown domain of validity
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (5), 1.02 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + NAD27 to NAD83 (6), 1.52 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + NAD27 to NAD83 (9), 1.52 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + NAD27 to NAD83 (9), 1.52 m, unknown domain of validity, at least one grid missing
unknown id, NGVD29 height (ftUS) to NAVD88 height (3) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, USA - CONUS east of 89°W - onshore, has ballpark transformation
unknown id, NGVD29 height (ftUS) to NAVD88 height (2) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, USA - CONUS 89°W-107°W - onshore, has ballpark transformation
unknown id, NGVD29 height (ftUS) to NAVD88 height (1) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, USA - CONUS west of 107°W - onshore, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (1), unknown accuracy, USA - CONUS including EEZ, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (3), unknown accuracy, Canada, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (4), unknown accuracy, Canada - NAD27, has ballpark transformation
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (5), unknown accuracy, Canada - Quebec, has ballpark transformation, at least one grid missing
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (6), unknown accuracy, Canada - Quebec, has ballpark transformation, at least one grid missing
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + NAD27 to NAD83 (9), unknown accuracy, Canada - Saskatchewan, has ballpark transformation, at least one grid missing
unknown id, Transformation from NGVD29 height (ftUS) to NAVD88 height (ballpark vertical transformation) + Ballpark geographic offset from NAD27 to NAD83, unknown accuracy, World, has ballpark transformation
2. Otherwise, when there is no such transformation, we decompose into 3 steps:
- transform from the source CRS to the geographic 3D CRS corresponding to it
- transform from the geographic 3D CRS corresponding to the source CRS to the
geographic 3D CRS corresponding to the target CRS
- transform from the geographic 3D CRS corresponding to the target CRS to the
target CRS.
Example:
.. code-block:: shell
$ projinfo -s "WGS 84 + EGM96 height" -t "ETRS89 + Belfast height" --spatial-test intersects --summary
Candidate operations found: 7
unknown id, Inverse of WGS 84 to EGM96 height (1) + Inverse of ETRS89 to WGS 84 (1) + ETRS89 to Belfast height (2), 2.014 m, UK - Northern Ireland - onshore
unknown id, Inverse of WGS 84 to EGM96 height (1) + Inverse of ETRS89 to WGS 84 (1) + ETRS89 to Belfast height (1), 2.03 m, UK - Northern Ireland - onshore, at least one grid missing
unknown id, Inverse of WGS 84 to EGM96 height (1) + Null geographic offset from WGS 84 (geog3D) to WGS 84 (geog2D) + Inverse of OSGB 1936 to WGS 84 (4) + OSGB 1936 to ETRS89 (2) + Null geographic offset from ETRS89 (geog2D) to ETRS89 (geog3D) + ETRS89 to Belfast height (2), 19.044 m, unknown domain of validity
unknown id, Inverse of WGS 84 to EGM96 height (1) + Null geographic offset from WGS 84 (geog3D) to WGS 84 (geog2D) + Inverse of OSGB 1936 to WGS 84 (2) + OSGB 1936 to ETRS89 (2) + Null geographic offset from ETRS89 (geog2D) to ETRS89 (geog3D) + ETRS89 to Belfast height (2), 11.044 m, unknown domain of validity
unknown id, Inverse of WGS 84 to EGM96 height (1) + Null geographic offset from WGS 84 (geog3D) to WGS 84 (geog2D) + Inverse of TM75 to WGS 84 (2) + TM75 to ETRS89 (3) + Null geographic offset from ETRS89 (geog2D) to ETRS89 (geog3D) + ETRS89 to Belfast height (2), 2.424 m, UK - Northern Ireland - onshore, at least one grid missing
unknown id, Inverse of WGS 84 to EGM96 height (1) + Null geographic offset from WGS 84 (geog3D) to WGS 84 (geog2D) + Inverse of TM75 to WGS 84 (2) + TM75 to ETRS89 (3) + Null geographic offset from ETRS89 (geog2D) to ETRS89 (geog3D) + ETRS89 to Belfast height (1), 2.44 m, UK - Northern Ireland - onshore, at least one grid missing
unknown id, Inverse of WGS 84 to EGM96 height (1) + Null geographic offset from WGS 84 (geog3D) to WGS 84 (geog2D) + Inverse of OSGB 1936 to WGS 84 (4) + OSGB 1936 to ETRS89 (2) + Null geographic offset from ETRS89 (geog2D) to ETRS89 (geog3D) + ETRS89 to Belfast height (1), 19.06 m, unknown domain of validity, at least one grid missing
This is implemented by the ``createOperationsCompoundToCompound`` method
When the source or target CRS is a BoundCRS
---------------------------------------------------------------------------------
@@ -29,3 +29,9 @@ Parameters
.. include:: ../options/x_0.rst
.. include:: ../options/y_0.rst
.. note::
``lat_ts`` and ``k_0`` are mutually exclusive. If ``lat_ts``
is specified, it is equivalent to setting ``k_0`` to
:math:`\frac{\cos \phi_{ts}}{\sqrt{1 - e^2 \sin^2 \phi_{ts}}}`
@@ -72,6 +72,9 @@ is rotating. The possible values are x or y, y being the default. Thus, the
scanning geometry of the Meteosat series satellite should take sweep as y, and
GOES should take sweep as x.
The resulting position is different because
`rotation in three dimensions is not commutative <https://math.stackexchange.com/q/2016937/31408>`_.
Parameters
################################################################################
@@ -44,6 +44,8 @@ Optional
.. include:: ../options/lon_0.rst
.. include:: ../options/lat_0.rst
.. include:: ../options/R.rst
.. include:: ../options/x_0.rst
+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
==================
@@ -93,7 +93,10 @@ Parameters
grid is considered optional and PROJ will the not complain if the grid is
not available.
Grids for the horizontla component of a deformation model is expected to be
If a grid is specified with a path that contains spaces, the value should
be quoted. e.g. `+xy_grids="/my path/has/spaces.ct2"`
Grids for the horizontal component of a deformation model are expected to be
in CTable2 format.
.. option:: +z_grids=<list>
@@ -102,8 +105,11 @@ Parameters
grid is considered optional and PROJ will the not complain if the grid is
not available.
Grids for the vertical component of a deformation model is expected to be
in either GTX format.
If a grid is specified with a path that contains spaces, the value should
be quoted. e.g. `+z_grids="/my path/has/spaces.gtx"`
Grids for the vertical component of a deformation model are expected to be
in GTX format.
.. option:: +t_epoch=<value>
@@ -191,4 +197,4 @@ that is searched for in the grid. :math:`(E, N, U)` are the grid values in ENU-s
See also
-----------------------------------------------------------------------------
#. :ref:`Behavioural changes from version 5 to 6<differences_deformation>`
#. :ref:`Behavioural changes from version 5 to 6<differences_deformation>`
@@ -104,6 +104,9 @@ Required
Comma-separated list of grids to load. If a grid is prefixed by an `@` the
grid is considered optional and PROJ will the not complain if the grid is
not available.
If a grid is specified with a path that contains spaces, the value should
be quoted. e.g. `+grids="/my path/has/spaces.gsb"`
Grids are expected to be in CTable2, NTv1 or NTv2 format.
@@ -103,6 +103,9 @@ Required
grid is considered optional and PROJ will the not complain if the grid is
not available.
If a grid is specified with a path that contains spaces, the value should
be quoted. e.g. `+grids="/my path/has/spaces.gtx"`
Grids are expected to be in GTX format.
Optional
@@ -1293,6 +1293,8 @@ static const MethodMapping otherMethodMappings[] = {
{EPSG_NAME_METHOD_VERTCON, EPSG_CODE_METHOD_VERTCON, nullptr, nullptr,
nullptr, paramsVERTCON},
{EPSG_NAME_METHOD_VERTCON_OLDNAME, EPSG_CODE_METHOD_VERTCON, nullptr,
nullptr, nullptr, paramsVERTCON},
};
// end of anonymous namespace
@@ -840,9 +840,8 @@ static const ESRIMethodMapping esriMappings[] = {
EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA,
EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA,
paramsESRI_Lambert_Azimuthal_Equal_Area},
{"Cylindrical_Equal_Area",
EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL,
EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL,
{"Cylindrical_Equal_Area", EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA,
EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA,
paramsESRI_Cylindrical_Equal_Area},
{"Hotine_Oblique_Mercator_Two_Point_Center",
PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN, 0,
+3 -2
View File
@@ -38,11 +38,12 @@
#include "proj.h"
#include "proj_json_streaming_writer.hpp"
#include "util.hpp"
NS_PROJ_START
class CPLJSonStreamingWriter;
namespace common {
class UnitOfMeasure;
using UnitOfMeasurePtr = std::shared_ptr<UnitOfMeasure>;
@@ -490,7 +491,7 @@ class PROJ_GCC_DLL JSONFormatter {
PROJ_PRIVATE :
//! @cond Doxygen_Suppress
PROJ_INTERNAL CPLJSonStreamingWriter &
PROJ_INTERNAL CPLJSonStreamingWriter *
writer() const;
struct ObjectContext {
+2 -2
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CCT" "1" "Dec 28, 2019" "6.3.0" "PROJ"
.TH "CCT" "1" "Apr 27, 2020" "6.3.2" "PROJ"
.SH NAME
cct \- Coordinate Conversion and Transformation
.
@@ -263,6 +263,6 @@ where new bug reports can be submitted to.
.SH AUTHOR
Thomas Knudsen
.SH COPYRIGHT
1983-2019
1983-2020
.\" Generated by docutils manpage writer.
.
+10 -6
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "CS2CS" "1" "Dec 28, 2019" "6.3.0" "PROJ"
.TH "CS2CS" "1" "Apr 27, 2020" "6.3.2" "PROJ"
.SH NAME
cs2cs \- Cartographic coordinate system filter
.
@@ -136,14 +136,18 @@ List of datums that can be selected with the \fI+datum\fP parameter.
.INDENT 0.0
.TP
.B \-r
This options reverses the order of the expected input from
longitude\-latitude or x\-y to latitude\-longitude or y\-x.
This options reverses the order of the first two expected
inputs from that specified by the CRS to the opposite
order. The third coordinate, typically height, remains
third.
.UNINDENT
.INDENT 0.0
.TP
.B \-s
This options reverses the order of the output from x\-y or longitude\-latitude
to y\-x or latitude\-longitude.
This options reverses the order of the first two expected
outputs from that specified by the CRS to the opposite
order. The third coordinate, typically height, remains
third.
.UNINDENT
.INDENT 0.0
.TP
@@ -283,6 +287,6 @@ where new bug reports can be submitted to.
.SH AUTHOR
Frank Warmerdam
.SH COPYRIGHT
1983-2019
1983-2020
.\" Generated by docutils manpage writer.
.
+2 -2
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "GEOD" "1" "Dec 28, 2019" "6.3.0" "PROJ"
.TH "GEOD" "1" "Apr 27, 2020" "6.3.2" "PROJ"
.SH NAME
geod \- Geodesic computations
.
@@ -257,6 +257,6 @@ where new bug reports can be submitted to.
.SH AUTHOR
Charles Karney
.SH COPYRIGHT
1983-2019
1983-2020
.\" Generated by docutils manpage writer.
.
+2 -2
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "GIE" "1" "Dec 28, 2019" "6.3.0" "PROJ"
.TH "GIE" "1" "Apr 27, 2020" "6.3.2" "PROJ"
.SH NAME
gie \- The Geospatial Integrity Investigation Environment
.
@@ -485,6 +485,6 @@ where new bug reports can be submitted to.
.SH AUTHOR
Thomas Knudsen
.SH COPYRIGHT
1983-2019
1983-2020
.\" Generated by docutils manpage writer.
.
+2 -2
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJ" "1" "Dec 28, 2019" "6.3.0" "PROJ"
.TH "PROJ" "1" "Apr 27, 2020" "6.3.2" "PROJ"
.SH NAME
proj \- Cartographic projection filter
.
@@ -271,6 +271,6 @@ where new bug reports can be submitted to.
.SH AUTHOR
Gerald I. Evenden
.SH COPYRIGHT
1983-2019
1983-2020
.\" Generated by docutils manpage writer.
.
+2 -2
View File
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
.TH "PROJINFO" "1" "Dec 28, 2019" "6.3.0" "PROJ"
.TH "PROJINFO" "1" "Apr 27, 2020" "6.3.2" "PROJ"
.SH NAME
projinfo \- Geodetic object and coordinate operation queries
.
@@ -538,6 +538,6 @@ where new bug reports can be submitted to.
.SH AUTHOR
Even Rouault
.SH COPYRIGHT
1983-2019
1983-2020
.\" Generated by docutils manpage writer.
.
+1 -1
View File
@@ -1,6 +1,6 @@
.\" @(#)geodesic.3
.\"
.TH GEODESIC 3 "2020/01/01 Rel. 6.3.0"
.TH GEODESIC 3 "2020/02/10 Rel. 6.3.1"
.ad b
.hy 1
.SH NAME
+2 -2
View File
@@ -1,6 +1,6 @@
.\" @(#)pj_init.3 - 6.3.0
.\" @(#)pj_init.3 - 6.3.1
.\"
.TH PJ_INIT 3 "2020/01/1 Rel. 6.3.0"
.TH PJ_INIT 3 "2020/02/10 Rel. 6.3.1"
.ad b
.hy 1
.SH NAME
+6 -2
View File
@@ -395,8 +395,12 @@ def fill_grid_transformation(proj_db_cursor):
grid2_param_code = param_code[1]
grid2_param_name = param_name[1]
grid2_value = param_value[1]
elif method_code == 1071: # Vertical Offset by Grid Interpolation (NZLVD)
assert param_code[1] == 1048, param_code[1]
# 1071: Vertical Offset by Grid Interpolation (NZLVD)
# 1080: Vertical Offset by Grid Interpolation (BEV AT)
# 1081: Geographic3D to GravityRelatedHeight (BEV AT)
# 1084: Vertical Offset by Grid Interpolation (gtx)
elif method_code in (1071, 1080, 1081, 1084) and n_params == 2:
assert param_code[1] == 1048, (code, method_code, param_code[1])
interpolation_crs_auth_name = EPSG_AUTHORITY
interpolation_crs_code = str(int(param_value[1])) # needed to avoid codes like XXXX.0
else:
+2 -2
View File
@@ -1096,8 +1096,8 @@ for grid in setVerticalGrids:
VALUES ('%s', -- as referenced by the IGNF registry
'%s',
'GTX',
'vgridshift',
1,
'geoid_like',
0,
'proj-datumgrid-europe',
NULL, NULL, NULL, NULL);""" % (original_grid_name, proj_grid_name))
+1 -1
View File
@@ -330,7 +330,7 @@ config_str = """
- Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN
- Cylindrical_Equal_Area:
WKT2_name: EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL
WKT2_name: EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA
Params:
- False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING
- False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING
+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/
+24 -5
View File
@@ -1053,20 +1053,39 @@ static PJ* create_operation_to_geog_crs(PJ_CONTEXT* ctx, const PJ* crs) {
ctx, operation_ctx, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION);
proj_operation_factory_context_set_grid_availability_use(
ctx, operation_ctx, PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID);
auto target_crs_2D = proj_crs_demote_to_2D(ctx, nullptr, crs);
auto op_list_to_geodetic = proj_create_operations(
ctx, geodetic_crs, crs, operation_ctx);
ctx, geodetic_crs, target_crs_2D, operation_ctx);
proj_destroy(target_crs_2D);
proj_operation_factory_context_destroy(operation_ctx);
proj_destroy(geodetic_crs);
if( op_list_to_geodetic == nullptr ||
proj_list_get_count(op_list_to_geodetic) == 0 )
const int nOpCount = op_list_to_geodetic == nullptr ? 0 :
proj_list_get_count(op_list_to_geodetic);
if( nOpCount == 0 )
{
proj_context_log_debug(ctx, "Cannot compute transformation from geographic CRS to CRS");
proj_list_destroy(op_list_to_geodetic);
return nullptr;
}
auto opGeogToCrs = proj_list_get(ctx, op_list_to_geodetic, 0);
assert(opGeogToCrs);
PJ* opGeogToCrs = nullptr;
// Use in priority operations *without* grids
for(int i = 0; i < nOpCount; i++ )
{
auto op = proj_list_get(ctx, op_list_to_geodetic, i);
assert(op);
if( proj_coordoperation_get_grid_used_count(ctx, op) == 0 )
{
opGeogToCrs = op;
break;
}
proj_destroy(op);
}
if( opGeogToCrs == nullptr )
{
opGeogToCrs = proj_list_get(ctx, op_list_to_geodetic, 0);
assert(opGeogToCrs);
}
proj_list_destroy(op_list_to_geodetic);
return opGeogToCrs;
}
+1 -1
View File
@@ -42,7 +42,7 @@ geodtest_LDADD = libproj.la
lib_LTLIBRARIES = libproj.la
libproj_la_LDFLAGS = -no-undefined -version-info 18:0:3
libproj_la_LDFLAGS = -no-undefined -version-info 18:2:3
libproj_la_LIBADD = @SQLITE3_LIBS@
libproj_la_SOURCES = \
+3 -4
View File
@@ -496,7 +496,8 @@ static void outputObject(
}
auto op = dynamic_cast<CoordinateOperation *>(obj.get());
if (op && dbContext && getenv("PROJINFO_NO_GRID_CHECK") == nullptr) {
if (!outputOpt.quiet && op && dbContext &&
getenv("PROJINFO_NO_GRID_CHECK") == nullptr) {
try {
auto setGrids = op->gridsNeeded(dbContext);
bool firstWarning = true;
@@ -686,9 +687,7 @@ static void outputOperations(
}
first = false;
std::cout << "-------------------------------------" << std::endl;
std::cout << "Operation n"
"\xC2\xB0"
<< (i + 1) << ":" << std::endl
std::cout << "Operation No. " << (i + 1) << ":" << std::endl
<< std::endl;
outputOperationSummary(op, dbContext);
std::cout << std::endl;
+3 -2
View File
@@ -165,8 +165,9 @@ static PJ_LPZ geodetic (PJ_XYZ cart, PJ *P) {
if( fabs(lpz.phi) > M_HALFPI ) {
// this happen on non-sphere ellipsoid when x,y,z is very close to 0
// there is no single solution to the cart->geodetic conversion in
// that case, so arbitrarily pickup phi = 0.
lpz.phi = 0;
// that case, clamp to -90/90 deg and avoid a discontinuous boundary
// near the poles
lpz.phi = copysign(M_HALFPI, lpz.phi);
}
lpz.lam = atan2 (cart.y, cart.x);
N = normal_radius_of_curvature (P->a, P->es, lpz.phi);
+2 -1
View File
@@ -164,7 +164,8 @@ static double decimalyear_to_mjd(double decimalyear) {
double fractional_year;
double mjd;
if( decimalyear < -10000 || decimalyear > 10000 )
// Written this way to deal with NaN input
if( !(decimalyear >= -10000 && decimalyear <= 10000) )
return 0;
year = lround(floor(decimalyear));
+1 -1
View File
@@ -3563,7 +3563,7 @@ PJ *proj_crs_create_projected_3D_crs_from_2D(PJ_CONTEXT *ctx,
crs_name ? crs_name
: cpp_projected_2D_crs->nameStr().c_str()),
NN_NO_CHECK(cpp_geog_3D_CRS),
cpp_projected_2D_crs->derivingConversionRef(), newCS));
cpp_projected_2D_crs->derivingConversion(), newCS));
} catch (const std::exception &e) {
proj_log_error(ctx, __FUNCTION__, e.what());
if (ctx->cpp_context) {
+46 -44
View File
@@ -40,6 +40,8 @@
#include "proj.h"
#include "proj_json_streaming_writer.hpp"
#include <cmath> // M_PI
#include <cstdlib>
#include <memory>
@@ -242,45 +244,45 @@ void UnitOfMeasure::_exportToWKT(
void UnitOfMeasure::_exportToJSON(
JSONFormatter *formatter) const // throw(FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
const auto &l_codeSpace = codeSpace();
auto objContext(
formatter->MakeObjectContext(nullptr, !l_codeSpace.empty()));
writer.AddObjKey("type");
writer->AddObjKey("type");
const auto l_type = type();
if (l_type == Type::LINEAR) {
writer.Add("LinearUnit");
writer->Add("LinearUnit");
} else if (l_type == Type::ANGULAR) {
writer.Add("AngularUnit");
writer->Add("AngularUnit");
} else if (l_type == Type::SCALE) {
writer.Add("ScaleUnit");
writer->Add("ScaleUnit");
} else if (l_type == Type::TIME) {
writer.Add("TimeUnit");
writer->Add("TimeUnit");
} else if (l_type == Type::PARAMETRIC) {
writer.Add("ParametricUnit");
writer->Add("ParametricUnit");
} else {
writer.Add("Unit");
writer->Add("Unit");
}
writer.AddObjKey("name");
writer->AddObjKey("name");
const auto &l_name = name();
writer.Add(l_name);
writer->Add(l_name);
const auto &factor = conversionToSI();
writer.AddObjKey("conversion_factor");
writer.Add(factor, 15);
writer->AddObjKey("conversion_factor");
writer->Add(factor, 15);
if (!l_codeSpace.empty() && formatter->outputId()) {
writer.AddObjKey("id");
writer->AddObjKey("id");
auto idContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("authority");
writer.Add(l_codeSpace);
writer.AddObjKey("code");
writer->AddObjKey("authority");
writer->Add(l_codeSpace);
writer->AddObjKey("code");
const auto &l_code = code();
try {
writer.Add(std::stoi(l_code));
writer->Add(std::stoi(l_code));
} catch (const std::exception &) {
writer.Add(l_code);
writer->Add(l_code);
}
}
}
@@ -875,13 +877,13 @@ void IdentifiedObject::formatRemarks(WKTFormatter *formatter) const {
void IdentifiedObject::formatID(JSONFormatter *formatter) const {
const auto &ids(identifiers());
auto &writer = formatter->writer();
auto writer = formatter->writer();
if (ids.size() == 1) {
writer.AddObjKey("id");
writer->AddObjKey("id");
ids.front()->_exportToJSON(formatter);
} else if (!ids.empty()) {
writer.AddObjKey("ids");
auto arrayContext(writer.MakeArrayContext());
writer->AddObjKey("ids");
auto arrayContext(writer->MakeArrayContext());
for (const auto &id : ids) {
id->_exportToJSON(formatter);
}
@@ -892,9 +894,9 @@ void IdentifiedObject::formatID(JSONFormatter *formatter) const {
void IdentifiedObject::formatRemarks(JSONFormatter *formatter) const {
if (!remarks().empty()) {
auto &writer = formatter->writer();
writer.AddObjKey("remarks");
writer.Add(remarks());
auto writer = formatter->writer();
writer->AddObjKey("remarks");
writer->Add(remarks());
}
}
@@ -1059,30 +1061,30 @@ void ObjectDomain::_exportToWKT(WKTFormatter *formatter) const {
//! @cond Doxygen_Suppress
void ObjectDomain::_exportToJSON(JSONFormatter *formatter) const {
auto &writer = formatter->writer();
auto writer = formatter->writer();
if (d->scope_.has_value()) {
writer.AddObjKey("scope");
writer.Add(*(d->scope_));
writer->AddObjKey("scope");
writer->Add(*(d->scope_));
}
if (d->domainOfValidity_) {
if (d->domainOfValidity_->description().has_value()) {
writer.AddObjKey("area");
writer.Add(*(d->domainOfValidity_->description()));
writer->AddObjKey("area");
writer->Add(*(d->domainOfValidity_->description()));
}
if (d->domainOfValidity_->geographicElements().size() == 1) {
const auto bbox = dynamic_cast<const GeographicBoundingBox *>(
d->domainOfValidity_->geographicElements()[0].get());
if (bbox) {
writer.AddObjKey("bbox");
auto bboxContext(writer.MakeObjectContext());
writer.AddObjKey("south_latitude");
writer.Add(bbox->southBoundLatitude(), 15);
writer.AddObjKey("west_longitude");
writer.Add(bbox->westBoundLongitude(), 15);
writer.AddObjKey("north_latitude");
writer.Add(bbox->northBoundLatitude(), 15);
writer.AddObjKey("east_longitude");
writer.Add(bbox->eastBoundLongitude(), 15);
writer->AddObjKey("bbox");
auto bboxContext(writer->MakeObjectContext());
writer->AddObjKey("south_latitude");
writer->Add(bbox->southBoundLatitude(), 15);
writer->AddObjKey("west_longitude");
writer->Add(bbox->westBoundLongitude(), 15);
writer->AddObjKey("north_latitude");
writer->Add(bbox->northBoundLatitude(), 15);
writer->AddObjKey("east_longitude");
writer->Add(bbox->eastBoundLongitude(), 15);
}
}
if (d->domainOfValidity_->verticalElements().size() == 1) {
@@ -1231,16 +1233,16 @@ void ObjectUsage::baseExportToWKT(WKTFormatter *formatter) const {
void ObjectUsage::baseExportToJSON(JSONFormatter *formatter) const {
auto &writer = formatter->writer();
auto writer = formatter->writer();
if (formatter->outputUsage()) {
const auto &l_domains = domains();
if (l_domains.size() == 1) {
l_domains[0]->_exportToJSON(formatter);
} else if (!l_domains.empty()) {
writer.AddObjKey("usages");
auto arrayContext(writer.MakeArrayContext(false));
writer->AddObjKey("usages");
auto arrayContext(writer->MakeArrayContext(false));
for (const auto &domain : l_domains) {
auto objContext(writer.MakeObjectContext());
auto objContext(writer->MakeObjectContext());
domain->_exportToJSON(formatter);
}
}
File diff suppressed because it is too large Load Diff
+23 -19
View File
@@ -40,6 +40,8 @@
#include "proj/internal/internal.hpp"
#include "proj/internal/io_internal.hpp"
#include "proj_json_streaming_writer.hpp"
#include <map>
#include <memory>
#include <set>
@@ -396,26 +398,26 @@ void CoordinateSystemAxis::_exportToWKT(io::WKTFormatter *formatter, int order,
void CoordinateSystemAxis::_exportToJSON(
io::JSONFormatter *formatter) const // throw(FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("Axis", !identifiers().empty()));
writer.AddObjKey("name");
writer.Add(nameStr());
writer->AddObjKey("name");
writer->Add(nameStr());
writer.AddObjKey("abbreviation");
writer.Add(abbreviation());
writer->AddObjKey("abbreviation");
writer->Add(abbreviation());
writer.AddObjKey("direction");
writer.Add(direction().toString());
writer->AddObjKey("direction");
writer->Add(direction().toString());
const auto &l_unit(unit());
if (l_unit == common::UnitOfMeasure::METRE ||
l_unit == common::UnitOfMeasure::DEGREE) {
writer.AddObjKey("unit");
writer.Add(l_unit.name());
writer->AddObjKey("unit");
writer->Add(l_unit.name());
} else if (l_unit.type() != common::UnitOfMeasure::Type::NONE) {
writer.AddObjKey("unit");
writer->AddObjKey("unit");
l_unit._exportToJSON(formatter);
}
@@ -573,19 +575,21 @@ void CoordinateSystem::_exportToWKT(
void CoordinateSystem::_exportToJSON(
io::JSONFormatter *formatter) const // throw(FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(formatter->MakeObjectContext("CoordinateSystem",
!identifiers().empty()));
writer.AddObjKey("subtype");
writer.Add(getWKT2Type(true));
writer->AddObjKey("subtype");
writer->Add(getWKT2Type(true));
writer.AddObjKey("axis");
auto axisContext(writer.MakeArrayContext(false));
const auto &l_axisList = axisList();
for (auto &axis : l_axisList) {
formatter->setOmitTypeInImmediateChild();
axis->_exportToJSON(formatter);
writer->AddObjKey("axis");
{
auto axisContext(writer->MakeArrayContext(false));
const auto &l_axisList = axisList();
for (auto &axis : l_axisList) {
formatter->setOmitTypeInImmediateChild();
axis->_exportToJSON(formatter);
}
}
if (formatter->outputId()) {
+130 -102
View File
@@ -46,6 +46,7 @@
#include "proj/internal/io_internal.hpp"
#include "proj_constants.h"
#include "proj_json_streaming_writer.hpp"
#include <algorithm>
#include <cassert>
@@ -310,17 +311,15 @@ CRSNNPtr CRS::alterCSLinearUnit(const common::UnitOfMeasure &unit) const {
auto cartCS = util::nn_dynamic_pointer_cast<cs::CartesianCS>(
engCRS->coordinateSystem());
if (cartCS) {
auto props = createPropertyMap(this);
props.set("FORCE_OUTPUT_CS", true);
return EngineeringCRS::create(props, engCRS->datum(),
return EngineeringCRS::create(createPropertyMap(this),
engCRS->datum(),
cartCS->alterUnit(unit));
} else {
auto vertCS = util::nn_dynamic_pointer_cast<cs::VerticalCS>(
engCRS->coordinateSystem());
if (vertCS) {
auto props = createPropertyMap(this);
props.set("FORCE_OUTPUT_CS", true);
return EngineeringCRS::create(props, engCRS->datum(),
return EngineeringCRS::create(createPropertyMap(this),
engCRS->datum(),
vertCS->alterUnit(unit));
}
}
@@ -1535,29 +1534,29 @@ void GeodeticCRS::addDatumInfoToPROJString(
void GeodeticCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("GeodeticCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
const auto &l_datum(datum());
if (l_datum) {
writer.AddObjKey("datum");
writer->AddObjKey("datum");
l_datum->_exportToJSON(formatter);
} else {
writer.AddObjKey("datum_ensemble");
writer->AddObjKey("datum_ensemble");
formatter->setOmitTypeInImmediateChild();
datumEnsemble()->_exportToJSON(formatter);
}
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
@@ -2394,29 +2393,29 @@ void GeographicCRS::_exportToPROJString(
void GeographicCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("GeographicCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
const auto &l_datum(datum());
if (l_datum) {
writer.AddObjKey("datum");
writer->AddObjKey("datum");
l_datum->_exportToJSON(formatter);
} else {
writer.AddObjKey("datum_ensemble");
writer->AddObjKey("datum_ensemble");
formatter->setOmitTypeInImmediateChild();
datumEnsemble()->_exportToJSON(formatter);
}
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
@@ -2601,43 +2600,43 @@ void VerticalCRS::_exportToPROJString(
void VerticalCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("VerticalCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
const auto &l_datum(datum());
if (l_datum) {
writer.AddObjKey("datum");
writer->AddObjKey("datum");
l_datum->_exportToJSON(formatter);
} else {
writer.AddObjKey("datum_ensemble");
writer->AddObjKey("datum_ensemble");
formatter->setOmitTypeInImmediateChild();
datumEnsemble()->_exportToJSON(formatter);
}
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
if (!d->geoidModel.empty()) {
const auto &model = d->geoidModel[0];
writer.AddObjKey("geoid_model");
writer->AddObjKey("geoid_model");
auto objectContext2(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("name");
writer.Add(model->nameStr());
writer->AddObjKey("name");
writer->Add(model->nameStr());
if (model->identifiers().empty()) {
const auto &interpCRS = model->interpolationCRS();
if (interpCRS) {
writer.AddObjKey("interpolation_crs");
writer->AddObjKey("interpolation_crs");
interpCRS->_exportToJSON(formatter);
}
}
@@ -3029,26 +3028,26 @@ void DerivedCRS::baseExportToWKT(io::WKTFormatter *formatter,
void DerivedCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext(className(), !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
writer.AddObjKey("base_crs");
writer->AddObjKey("base_crs");
baseCRS()->_exportToJSON(formatter);
writer.AddObjKey("conversion");
writer->AddObjKey("conversion");
formatter->setOmitTypeInImmediateChild();
derivingConversionRef()->_exportToJSON(formatter);
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
@@ -3337,28 +3336,28 @@ void ProjectedCRS::_exportToWKT(io::WKTFormatter *formatter) const {
void ProjectedCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("ProjectedCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
writer.AddObjKey("base_crs");
writer->AddObjKey("base_crs");
formatter->setAllowIDInImmediateChild();
formatter->setOmitTypeInImmediateChild();
baseCRS()->_exportToJSON(formatter);
writer.AddObjKey("conversion");
writer->AddObjKey("conversion");
formatter->setOmitTypeInImmediateChild();
derivingConversionRef()->_exportToJSON(formatter);
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
@@ -3444,23 +3443,33 @@ void ProjectedCRS::addUnitConvertAndAxisSwap(io::PROJStringFormatter *formatter,
bool axisSpecFound) const {
const auto &axisList = d->coordinateSystem()->axisList();
const auto &unit = axisList[0]->unit();
const auto *zUnit = axisList.size() == 3 ? &(axisList[2]->unit()) : nullptr;
if (!unit._isEquivalentTo(common::UnitOfMeasure::METRE,
util::IComparable::Criterion::EQUIVALENT)) {
util::IComparable::Criterion::EQUIVALENT) ||
(zUnit &&
!zUnit->_isEquivalentTo(common::UnitOfMeasure::METRE,
util::IComparable::Criterion::EQUIVALENT))) {
auto projUnit = unit.exportToPROJString();
const double toSI = unit.conversionToSI();
if (!formatter->getCRSExport()) {
formatter->addStep("unitconvert");
formatter->addParam("xy_in", "m");
if (!formatter->omitZUnitConversion())
if (zUnit)
formatter->addParam("z_in", "m");
if (projUnit.empty()) {
formatter->addParam("xy_out", toSI);
if (!formatter->omitZUnitConversion())
formatter->addParam("z_out", toSI);
} else {
formatter->addParam("xy_out", projUnit);
if (!formatter->omitZUnitConversion())
formatter->addParam("z_out", projUnit);
}
if (zUnit) {
auto projZUnit = zUnit->exportToPROJString();
const double zToSI = zUnit->conversionToSI();
if (projZUnit.empty()) {
formatter->addParam("z_out", zToSI);
} else {
formatter->addParam("z_out", projZUnit);
}
}
} else {
if (projUnit.empty()) {
@@ -3700,8 +3709,16 @@ ProjectedCRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const {
return res;
}
res.emplace_back(crsNN, eqName ? 90 : 70);
} else if (crs->nameStr() == thisName &&
CRS::getPrivate()->implicitCS_ &&
} else if (eqName && CRS::getPrivate()->implicitCS_ &&
coordinateSystem()
->axisList()[0]
->unit()
._isEquivalentTo(
crs->coordinateSystem()
->axisList()[0]
->unit(),
util::IComparable::Criterion::
EQUIVALENT) &&
l_baseCRS->_isEquivalentTo(
crs->baseCRS().get(),
util::IComparable::Criterion::
@@ -3713,7 +3730,8 @@ ProjectedCRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const {
dbContext) &&
objects.size() == 1) {
res.clear();
res.emplace_back(crsNN, 100);
res.emplace_back(crsNN,
crs->nameStr() == thisName ? 100 : 90);
return res;
} else {
res.emplace_back(crsNN, 25);
@@ -3980,21 +3998,21 @@ void CompoundCRS::_exportToWKT(io::WKTFormatter *formatter) const {
void CompoundCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("CompoundCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
writer.AddObjKey("components");
writer->AddObjKey("components");
{
auto componentsContext(writer.MakeArrayContext(false));
auto componentsContext(writer->MakeArrayContext(false));
for (const auto &crs : componentReferenceSystems()) {
crs->_exportToJSON(formatter);
}
@@ -4406,9 +4424,27 @@ BoundCRS::createFromTOWGS84(const CRSNNPtr &baseCRSIn,
*/
BoundCRSNNPtr BoundCRS::createFromNadgrids(const CRSNNPtr &baseCRSIn,
const std::string &filename) {
const CRSPtr sourceGeographicCRS = baseCRSIn->extractGeographicCRS();
const auto sourceGeographicCRS = baseCRSIn->extractGeographicCRS();
auto transformationSourceCRS =
sourceGeographicCRS ? sourceGeographicCRS : baseCRSIn.as_nullable();
sourceGeographicCRS
? NN_NO_CHECK(std::static_pointer_cast<CRS>(sourceGeographicCRS))
: baseCRSIn;
if (sourceGeographicCRS != nullptr &&
sourceGeographicCRS->datum() != nullptr &&
sourceGeographicCRS->primeMeridian()->longitude().getSIValue() != 0.0) {
transformationSourceCRS = GeographicCRS::create(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
sourceGeographicCRS->nameStr() +
" (with Greenwich prime meridian)"),
datum::GeodeticReferenceFrame::create(
util::PropertyMap().set(
common::IdentifiedObject::NAME_KEY,
sourceGeographicCRS->datum()->nameStr() +
" (with Greenwich prime meridian)"),
sourceGeographicCRS->datum()->ellipsoid(),
util::optional<std::string>(), datum::PrimeMeridian::GREENWICH),
sourceGeographicCRS->coordinateSystem());
}
std::string transformationName = transformationSourceCRS->nameStr();
transformationName += " to WGS84";
@@ -4417,8 +4453,8 @@ BoundCRSNNPtr BoundCRS::createFromNadgrids(const CRSNNPtr &baseCRSIn,
operation::Transformation::createNTv2(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
transformationName),
NN_NO_CHECK(transformationSourceCRS), GeographicCRS::EPSG_4326,
filename, std::vector<metadata::PositionalAccuracyNNPtr>()));
transformationSourceCRS, GeographicCRS::EPSG_4326, filename,
std::vector<metadata::PositionalAccuracyNNPtr>()));
}
// ---------------------------------------------------------------------------
@@ -4502,17 +4538,17 @@ void BoundCRS::_exportToWKT(io::WKTFormatter *formatter) const {
void BoundCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("BoundCRS", !identifiers().empty()));
writer.AddObjKey("source_crs");
writer->AddObjKey("source_crs");
d->baseCRS()->_exportToJSON(formatter);
writer.AddObjKey("target_crs");
writer->AddObjKey("target_crs");
d->hubCRS()->_exportToJSON(formatter);
writer.AddObjKey("transformation");
writer->AddObjKey("transformation");
formatter->setOmitTypeInImmediateChild();
formatter->setAbridgedTransformation(true);
d->transformation()->_exportToJSON(formatter);
@@ -5242,23 +5278,23 @@ void TemporalCRS::_exportToWKT(io::WKTFormatter *formatter) const {
void TemporalCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("TemporalCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
writer.AddObjKey("datum");
writer->AddObjKey("datum");
formatter->setOmitTypeInImmediateChild();
datum()->_exportToJSON(formatter);
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
@@ -5279,9 +5315,7 @@ bool TemporalCRS::_isEquivalentTo(
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
struct EngineeringCRS::Private {
bool forceOutputCS_ = false;
};
struct EngineeringCRS::Private {};
//! @endcond
// ---------------------------------------------------------------------------
@@ -5339,17 +5373,6 @@ EngineeringCRS::create(const util::PropertyMap &properties,
crs->assignSelf(crs);
crs->setProperties(properties);
const auto pVal = properties.get("FORCE_OUTPUT_CS");
if (pVal) {
if (const auto genVal =
dynamic_cast<const util::BoxedValue *>(pVal->get())) {
if (genVal->type() == util::BoxedValue::Type::BOOLEAN &&
genVal->booleanValue()) {
crs->d->forceOutputCS_ = true;
}
}
}
return crs;
}
@@ -5364,11 +5387,16 @@ void EngineeringCRS::_exportToWKT(io::WKTFormatter *formatter) const {
formatter->addQuotedString(nameStr());
if (isWKT2 || !datum()->nameStr().empty()) {
datum()->_exportToWKT(formatter);
coordinateSystem()->_exportToWKT(formatter);
}
if (!isWKT2 && d->forceOutputCS_) {
if (!isWKT2) {
coordinateSystem()->axisList()[0]->unit()._exportToWKT(formatter);
}
const auto oldAxisOutputRule = formatter->outputAxis();
formatter->setOutputAxis(io::WKTFormatter::OutputAxisRule::YES);
coordinateSystem()->_exportToWKT(formatter);
formatter->setOutputAxis(oldAxisOutputRule);
ObjectUsage::baseExportToWKT(formatter);
formatter->endNode();
}
@@ -5380,23 +5408,23 @@ void EngineeringCRS::_exportToWKT(io::WKTFormatter *formatter) const {
void EngineeringCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("EngineeringCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
writer.AddObjKey("datum");
writer->AddObjKey("datum");
formatter->setOmitTypeInImmediateChild();
datum()->_exportToJSON(formatter);
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
@@ -5512,23 +5540,23 @@ void ParametricCRS::_exportToWKT(io::WKTFormatter *formatter) const {
void ParametricCRS::_exportToJSON(
io::JSONFormatter *formatter) const // throw(io::FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("ParametricCRS", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
writer.AddObjKey("datum");
writer->AddObjKey("datum");
formatter->setOmitTypeInImmediateChild();
datum()->_exportToJSON(formatter);
writer.AddObjKey("coordinate_system");
writer->AddObjKey("coordinate_system");
formatter->setOmitTypeInImmediateChild();
coordinateSystem()->_exportToJSON(formatter);
+104 -76
View File
@@ -46,6 +46,8 @@
#include "proj_api.h"
// clang-format on
#include "proj_json_streaming_writer.hpp"
#include <cmath>
#include <cstdlib>
#include <memory>
@@ -113,9 +115,9 @@ void Datum::Private::exportAnchorDefinition(io::WKTFormatter *formatter) const {
void Datum::Private::exportAnchorDefinition(
io::JSONFormatter *formatter) const {
if (anchorDefinition) {
auto &writer = formatter->writer();
writer.AddObjKey("anchor");
writer.Add(*anchorDefinition);
auto writer = formatter->writer();
writer->AddObjKey("anchor");
writer->Add(*anchorDefinition);
}
}
@@ -381,25 +383,25 @@ void PrimeMeridian::_exportToWKT(
void PrimeMeridian::_exportToJSON(
io::JSONFormatter *formatter) const // throw(FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("PrimeMeridian", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
std::string l_name =
name()->description().has_value() ? nameStr() : "Greenwich";
writer.Add(l_name);
writer->Add(l_name);
const auto &l_long = longitude();
writer.AddObjKey("longitude");
writer->AddObjKey("longitude");
const auto &unit = l_long.unit();
if (unit == common::UnitOfMeasure::DEGREE) {
writer.Add(l_long.value(), 15);
writer->Add(l_long.value(), 15);
} else {
auto longitudeContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("value");
writer.Add(l_long.value(), 15);
writer.AddObjKey("unit");
writer->AddObjKey("value");
writer->Add(l_long.value(), 15);
writer->AddObjKey("unit");
unit._exportToJSON(formatter);
}
@@ -836,49 +838,49 @@ void Ellipsoid::_exportToWKT(
void Ellipsoid::_exportToJSON(
io::JSONFormatter *formatter) const // throw(FormattingException)
{
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objectContext(
formatter->MakeObjectContext("Ellipsoid", !identifiers().empty()));
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
const auto &semiMajor = semiMajorAxis();
const auto &semiMajorUnit = semiMajor.unit();
writer.AddObjKey(isSphere() ? "radius" : "semi_major_axis");
writer->AddObjKey(isSphere() ? "radius" : "semi_major_axis");
if (semiMajorUnit == common::UnitOfMeasure::METRE) {
writer.Add(semiMajor.value(), 15);
writer->Add(semiMajor.value(), 15);
} else {
auto objContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("value");
writer.Add(semiMajor.value(), 15);
writer->AddObjKey("value");
writer->Add(semiMajor.value(), 15);
writer.AddObjKey("unit");
writer->AddObjKey("unit");
semiMajorUnit._exportToJSON(formatter);
}
if (!isSphere()) {
const auto &l_inverseFlattening = inverseFlattening();
if (l_inverseFlattening.has_value()) {
writer.AddObjKey("inverse_flattening");
writer.Add(l_inverseFlattening->getSIValue(), 15);
writer->AddObjKey("inverse_flattening");
writer->Add(l_inverseFlattening->getSIValue(), 15);
} else {
writer.AddObjKey("semi_minor_axis");
writer->AddObjKey("semi_minor_axis");
const auto &l_semiMinorAxis(semiMinorAxis());
const auto &semiMinorAxisUnit(l_semiMinorAxis->unit());
if (semiMinorAxisUnit == common::UnitOfMeasure::METRE) {
writer.Add(l_semiMinorAxis->value(), 15);
writer->Add(l_semiMinorAxis->value(), 15);
} else {
auto objContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("value");
writer.Add(l_semiMinorAxis->value(), 15);
writer->AddObjKey("value");
writer->Add(l_semiMinorAxis->value(), 15);
writer.AddObjKey("unit");
writer->AddObjKey("unit");
semiMinorAxisUnit._exportToJSON(formatter);
}
}
@@ -1201,7 +1203,8 @@ void GeodeticReferenceFrame::_exportToWKT(
io::WKTFormatter *formatter) const // throw(FormattingException)
{
const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2;
formatter->startNode(io::WKTConstants::DATUM, !identifiers().empty());
const auto &ids = identifiers();
formatter->startNode(io::WKTConstants::DATUM, !ids.empty());
auto l_name = nameStr();
if (l_name.empty()) {
l_name = "unnamed";
@@ -1236,10 +1239,35 @@ void GeodeticReferenceFrame::_exportToWKT(
}
}
}
// Replace spaces by underscore, except if it is a special MapInfo
// datum name
} else if (!starts_with(l_name, "MIF ")) {
l_name = io::WKTFormatter::morphNameToESRI(l_name);
} else {
// Replace spaces by underscore for datum names coming from EPSG
// so as to emulate GDAL < 3 importFromEPSG()
if (ids.size() == 1 && *(ids.front()->codeSpace()) == "EPSG") {
l_name = io::WKTFormatter::morphNameToESRI(l_name);
} else if (ids.empty()) {
const auto &dbContext = formatter->databaseContext();
if (dbContext) {
auto factory = io::AuthorityFactory::create(
NN_NO_CHECK(dbContext), std::string());
// We use anonymous autority and approximate matching, so
// as to trigger the caching done in createObjectsFromName()
// in that case.
auto matches = factory->createObjectsFromName(
l_name, {io::AuthorityFactory::ObjectType::
GEODETIC_REFERENCE_FRAME},
true, 2);
if (matches.size() == 1) {
const auto &match = matches.front();
const auto &matchId = match->identifiers();
if (matchId.size() == 1 &&
*(matchId.front()->codeSpace()) == "EPSG" &&
metadata::Identifier::isEquivalentName(
l_name.c_str(), match->nameStr().c_str())) {
l_name = io::WKTFormatter::morphNameToESRI(l_name);
}
}
}
}
if (l_name == "World_Geodetic_System_1984") {
l_name = "WGS_1984";
}
@@ -1286,36 +1314,36 @@ void GeodeticReferenceFrame::_exportToJSON(
auto objectContext(formatter->MakeObjectContext(
dynamicGRF ? "DynamicGeodeticReferenceFrame" : "GeodeticReferenceFrame",
!identifiers().empty()));
auto &writer = formatter->writer();
auto writer = formatter->writer();
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
Datum::getPrivate()->exportAnchorDefinition(formatter);
if (dynamicGRF) {
writer.AddObjKey("frame_reference_epoch");
writer.Add(dynamicGRF->frameReferenceEpoch().value());
writer->AddObjKey("frame_reference_epoch");
writer->Add(dynamicGRF->frameReferenceEpoch().value());
const auto &deformationModel = dynamicGRF->deformationModelName();
if (deformationModel.has_value()) {
writer.AddObjKey("deformation_model");
writer.Add(*deformationModel);
writer->AddObjKey("deformation_model");
writer->Add(*deformationModel);
}
}
writer.AddObjKey("ellipsoid");
writer->AddObjKey("ellipsoid");
formatter->setOmitTypeInImmediateChild();
ellipsoid()->_exportToJSON(formatter);
const auto &l_primeMeridian(primeMeridian());
if (l_primeMeridian->nameStr() != "Greenwich") {
writer.AddObjKey("prime_meridian");
writer->AddObjKey("prime_meridian");
formatter->setOmitTypeInImmediateChild();
primeMeridian()->_exportToJSON(formatter);
}
@@ -1642,28 +1670,28 @@ void DatumEnsemble::_exportToJSON(
{
auto objectContext(
formatter->MakeObjectContext("DatumEnsemble", !identifiers().empty()));
auto &writer = formatter->writer();
auto writer = formatter->writer();
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
auto l_datums = datums();
writer.AddObjKey("members");
writer->AddObjKey("members");
{
auto membersContext(writer.MakeArrayContext(false));
auto membersContext(writer->MakeArrayContext(false));
for (const auto &datum : l_datums) {
auto memberContext(writer.MakeObjectContext());
writer.AddObjKey("name");
auto memberContext(writer->MakeObjectContext());
writer->AddObjKey("name");
const auto &l_datum_name = datum->nameStr();
if (!l_datum_name.empty()) {
writer.Add(l_datum_name);
writer->Add(l_datum_name);
} else {
writer.Add("unnamed");
writer->Add("unnamed");
}
datum->formatID(formatter);
}
@@ -1672,13 +1700,13 @@ void DatumEnsemble::_exportToJSON(
auto grfFirst = std::dynamic_pointer_cast<GeodeticReferenceFrame>(
l_datums[0].as_nullable());
if (grfFirst) {
writer.AddObjKey("ellipsoid");
writer->AddObjKey("ellipsoid");
formatter->setOmitTypeInImmediateChild();
grfFirst->ellipsoid()->_exportToJSON(formatter);
}
writer.AddObjKey("accuracy");
writer.Add(positionalAccuracy()->value());
writer->AddObjKey("accuracy");
writer->Add(positionalAccuracy()->value());
formatID(formatter);
}
@@ -1858,26 +1886,26 @@ void VerticalReferenceFrame::_exportToJSON(
auto objectContext(formatter->MakeObjectContext(
dynamicGRF ? "DynamicVerticalReferenceFrame" : "VerticalReferenceFrame",
!identifiers().empty()));
auto &writer = formatter->writer();
auto writer = formatter->writer();
writer.AddObjKey("name");
writer->AddObjKey("name");
auto l_name = nameStr();
if (l_name.empty()) {
writer.Add("unnamed");
writer->Add("unnamed");
} else {
writer.Add(l_name);
writer->Add(l_name);
}
Datum::getPrivate()->exportAnchorDefinition(formatter);
if (dynamicGRF) {
writer.AddObjKey("frame_reference_epoch");
writer.Add(dynamicGRF->frameReferenceEpoch().value());
writer->AddObjKey("frame_reference_epoch");
writer->Add(dynamicGRF->frameReferenceEpoch().value());
const auto &deformationModel = dynamicGRF->deformationModelName();
if (deformationModel.has_value()) {
writer.AddObjKey("deformation_model");
writer.Add(*deformationModel);
writer->AddObjKey("deformation_model");
writer->Add(*deformationModel);
}
}
@@ -2157,18 +2185,18 @@ void TemporalDatum::_exportToJSON(
{
auto objectContext(
formatter->MakeObjectContext("TemporalDatum", !identifiers().empty()));
auto &writer = formatter->writer();
auto writer = formatter->writer();
writer.AddObjKey("name");
writer.Add(nameStr());
writer->AddObjKey("name");
writer->Add(nameStr());
writer.AddObjKey("calendar");
writer.Add(calendar());
writer->AddObjKey("calendar");
writer->Add(calendar());
const auto &timeOriginStr = temporalOrigin().toString();
if (!timeOriginStr.empty()) {
writer.AddObjKey("time_origin");
writer.Add(timeOriginStr);
writer->AddObjKey("time_origin");
writer->Add(timeOriginStr);
}
ObjectUsage::baseExportToJSON(formatter);
@@ -2257,10 +2285,10 @@ void EngineeringDatum::_exportToJSON(
{
auto objectContext(formatter->MakeObjectContext("EngineeringDatum",
!identifiers().empty()));
auto &writer = formatter->writer();
auto writer = formatter->writer();
writer.AddObjKey("name");
writer.Add(nameStr());
writer->AddObjKey("name");
writer->Add(nameStr());
Datum::getPrivate()->exportAnchorDefinition(formatter);
@@ -2343,10 +2371,10 @@ void ParametricDatum::_exportToJSON(
{
auto objectContext(formatter->MakeObjectContext("ParametricDatum",
!identifiers().empty()));
auto &writer = formatter->writer();
auto writer = formatter->writer();
writer.AddObjKey("name");
writer.Add(nameStr());
writer->AddObjKey("name");
writer->Add(nameStr());
Datum::getPrivate()->exportAnchorDefinition(formatter);
+272 -129
View File
@@ -50,6 +50,7 @@
#include <cstring>
#include <iomanip>
#include <limits>
#include <locale>
#include <map>
#include <memory>
#include <sstream> // std::ostringstream
@@ -136,7 +137,8 @@ struct DatabaseContext::Private {
void setPjCtxt(PJ_CONTEXT *ctxt) { pjCtxt_ = ctxt; }
SQLResultSet run(const std::string &sql,
const ListOfParams &parameters = ListOfParams());
const ListOfParams &parameters = ListOfParams(),
bool useMaxFloatPrecision = false);
std::vector<std::string> getDatabaseStructure();
@@ -827,7 +829,8 @@ void DatabaseContext::Private::registerFunctions() {
// ---------------------------------------------------------------------------
SQLResultSet DatabaseContext::Private::run(const std::string &sql,
const ListOfParams &parameters) {
const ListOfParams &parameters,
bool useMaxFloatPrecision) {
sqlite3_stmt *stmt = nullptr;
auto iter = mapSqlToStatement_.find(sql);
@@ -885,10 +888,20 @@ SQLResultSet DatabaseContext::Private::run(const std::string &sql,
if (ret == SQLITE_ROW) {
SQLRow row(column_count);
for (int i = 0; i < column_count; i++) {
const char *txt = reinterpret_cast<const char *>(
sqlite3_column_text(stmt, i));
if (txt) {
row[i] = txt;
if (useMaxFloatPrecision &&
sqlite3_column_type(stmt, i) == SQLITE_FLOAT) {
// sqlite3_column_text() does not use maximum precision
std::ostringstream buffer;
buffer.imbue(std::locale::classic());
buffer << std::setprecision(18);
buffer << sqlite3_column_double(stmt, i);
row[i] = buffer.str();
} else {
const char *txt = reinterpret_cast<const char *>(
sqlite3_column_text(stmt, i));
if (txt) {
row[i] = txt;
}
}
}
result.emplace_back(std::move(row));
@@ -1705,10 +1718,10 @@ AuthorityFactory::createUnitOfMeasure(const std::string &code) const {
return NN_NO_CHECK(uom);
}
}
auto res = d->runWithCodeParam(
auto res = d->context()->d->run(
"SELECT name, conv_factor, type, deprecated FROM unit_of_measure WHERE "
"auth_name = ? AND code = ?",
code);
{d->authority(), code}, true);
if (res.empty()) {
throw NoSuchAuthorityCodeException("unit of measure not found",
d->authority(), code);
@@ -2581,7 +2594,7 @@ AuthorityFactory::createProjectedCRS(const std::string &code) const {
pj_add_type_crs_if_needed(text_definition), d->context());
auto projCRS = dynamic_cast<const crs::ProjectedCRS *>(obj.get());
if (projCRS) {
const auto &conv = projCRS->derivingConversionRef();
const auto conv = projCRS->derivingConversion();
auto newConv =
(conv->nameStr() == "unnamed")
? operation::Conversion::create(
@@ -2602,10 +2615,9 @@ AuthorityFactory::createProjectedCRS(const std::string &code) const {
boundCRS->baseCRS().get());
if (projCRS) {
auto newBoundCRS = crs::BoundCRS::create(
crs::ProjectedCRS::create(
props, projCRS->baseCRS(),
projCRS->derivingConversionRef(),
projCRS->coordinateSystem()),
crs::ProjectedCRS::create(props, projCRS->baseCRS(),
projCRS->derivingConversion(),
projCRS->coordinateSystem()),
boundCRS->hubCRS(), boundCRS->transformation());
return NN_NO_CHECK(
util::nn_dynamic_pointer_cast<crs::ProjectedCRS>(
@@ -4332,56 +4344,29 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
// For some reason, filtering on v1.deprecated and v2.deprecated kills
// performance
std::string sqlProlog("SELECT v1.table_name as table1, "
"v1.auth_name AS auth_name1, v1.code AS code1, "
"v1.deprecated AS deprecated1, "
"v2.table_name as table2, "
"v2.auth_name AS auth_name2, v2.code AS code2, "
"v2.deprecated AS deprecated2, "
"a1.south_lat AS south_lat1, "
"a1.west_lon AS west_lon1, "
"a1.north_lat AS north_lat1, "
"a1.east_lon AS east_lon1, "
"a2.south_lat AS south_lat2, "
"a2.west_lon AS west_lon2, "
"a2.north_lat AS north_lat2, "
"a2.east_lon AS east_lon2 ");
if (discardSuperseded) {
sqlProlog += ", ss1.replacement_auth_name AS replacement_auth_name1, "
"ss1.replacement_code AS replacement_code1, "
"ss2.replacement_auth_name AS replacement_auth_name2, "
"ss2.replacement_code AS replacement_code2 ";
}
sqlProlog += "FROM coordinate_operation_view v1 "
"JOIN coordinate_operation_view v2 "
"JOIN geodetic_crs g_source "
"JOIN geodetic_crs g_v1s "
"JOIN geodetic_crs g_v1t "
"JOIN geodetic_crs g_v2s "
"JOIN geodetic_crs g_v2t "
"JOIN geodetic_crs g_target "
"ON g_v1s.auth_name = v1.source_crs_auth_name "
"AND g_v1s.code = v1.source_crs_code "
"AND g_v1t.auth_name = v1.target_crs_auth_name "
"AND g_v1t.code = v1.target_crs_code "
"AND g_v2s.auth_name = v2.source_crs_auth_name "
"AND g_v2s.code = v2.source_crs_code "
"AND g_v2t.auth_name = v2.target_crs_auth_name "
"AND g_v2t.code = v2.target_crs_code ";
const std::string joinSupersession(
"LEFT JOIN supersession ss1 ON "
"ss1.superseded_table_name = v1.table_name AND "
"ss1.superseded_auth_name = v1.auth_name AND "
"ss1.superseded_code = v1.code AND "
"ss1.superseded_table_name = ss1.replacement_table_name "
"LEFT JOIN supersession ss2 ON "
"ss2.superseded_table_name = v2.table_name AND "
"ss2.superseded_auth_name = v2.auth_name AND "
"ss2.superseded_code = v2.code AND "
"ss2.superseded_table_name = ss2.replacement_table_name ");
const std::string sqlProlog("SELECT v1.table_name as table1, "
"v1.auth_name AS auth_name1, v1.code AS code1, "
"v1.deprecated AS deprecated1, "
"v2.table_name as table2, "
"v2.auth_name AS auth_name2, v2.code AS code2, "
"v2.deprecated AS deprecated2 "
"FROM coordinate_operation_view v1 "
"JOIN coordinate_operation_view v2 "
"JOIN geodetic_crs g_source "
"JOIN geodetic_crs g_v1s "
"JOIN geodetic_crs g_v1t "
"JOIN geodetic_crs g_v2s "
"JOIN geodetic_crs g_v2t "
"JOIN geodetic_crs g_target "
"ON g_v1s.auth_name = v1.source_crs_auth_name "
"AND g_v1s.code = v1.source_crs_code "
"AND g_v1t.auth_name = v1.target_crs_auth_name "
"AND g_v1t.code = v1.target_crs_code "
"AND g_v2s.auth_name = v2.source_crs_auth_name "
"AND g_v2s.code = v2.source_crs_code "
"AND g_v2t.auth_name = v2.target_crs_auth_name "
"AND g_v2t.code = v2.target_crs_code ");
const std::string joinArea(
(discardSuperseded ? joinSupersession : std::string()) +
"JOIN area a1 ON v1.area_of_use_auth_name = a1.auth_name "
"AND v1.area_of_use_code = a1.code "
"JOIN area a2 ON v2.area_of_use_auth_name = a2.auth_name "
@@ -4394,8 +4379,13 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
additionalWhere +=
"WHERE g_source.auth_name = ? AND g_source.code = ? "
"AND g_target.auth_name = ? AND g_target.code = ? "
"AND intersects_bbox(south_lat1, west_lon1, north_lat1, east_lon1, "
"south_lat2, west_lon2, north_lat2, east_lon2) = 1 ";
"AND intersects_bbox("
"a1.south_lat, a1.west_lon, a1.north_lat, a1.east_lon, "
"a2.south_lat, a2.west_lon, a2.north_lat, a2.east_lon) = 1 ";
#if 0
// While those additonal constraints are correct, they are found to
// kill performance. So enforce them as post-processing
if (!allowedAuthorities.empty()) {
additionalWhere += "AND v1.auth_name IN (";
@@ -4410,7 +4400,7 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
additionalWhere += ',';
additionalWhere += '?';
}
additionalWhere += ')';
additionalWhere += ") ";
for (const auto &allowedAuthority : allowedAuthorities) {
params.emplace_back(allowedAuthority);
}
@@ -4423,6 +4413,8 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
params.emplace_back(d->authority());
params.emplace_back(d->authority());
}
#endif
for (const auto &extent : {intersectingExtent1, intersectingExtent2}) {
if (extent) {
const auto &geogExtent = extent->geographicElements();
@@ -4438,10 +4430,10 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
if (south_lat != -90.0 || west_lon != -180.0 ||
north_lat != 90.0 || east_lon != 180.0) {
additionalWhere +=
"AND intersects_bbox(south_lat1, "
"west_lon1, north_lat1, east_lon1, ?, ?, ?, ?) AND "
"intersects_bbox(south_lat2, west_lon2, "
"north_lat2, east_lon2, ?, ?, ?, ?) ";
"AND intersects_bbox(a1.south_lat, a1.west_lon, "
"a1.north_lat, a1.east_lon, ?, ?, ?, ?) AND "
"intersects_bbox(a2.south_lat, a2.west_lon, "
"a2.north_lat, a2.east_lon, ?, ?, ?, ?) ";
params.emplace_back(south_lat);
params.emplace_back(west_lon);
params.emplace_back(north_lat);
@@ -4479,53 +4471,192 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
auto res = d->run(sql + additionalWhere, params);
// fprintf(stderr, "after\n");
const auto filterOutSuperseded = [](SQLResultSet &&resultSet) {
std::set<std::pair<std::string, std::string>> setTransf1;
std::set<std::pair<std::string, std::string>> setTransf2;
const auto filterDeprecatedAndNotMatchingAuth =
[&](SQLResultSet &&resultSet) {
SQLResultSet filteredResultSet;
for (const auto &row : resultSet) {
const auto &deprecated1 = row[3];
const auto &deprecated2 = row[7];
if (deprecated1 == "1" || deprecated2 == "1") {
continue;
}
const auto &auth_name1 = row[1];
const auto &auth_name2 = row[5];
if (d->hasAuthorityRestriction()) {
if (auth_name1 != d->authority() ||
auth_name2 != d->authority()) {
continue;
}
}
if (!allowedAuthorities.empty()) {
{
bool found = false;
for (const auto &auth : allowedAuthorities) {
if (auth_name1 == auth) {
found = true;
break;
}
}
if (!found) {
continue;
}
}
{
bool found = false;
for (const auto &auth : allowedAuthorities) {
if (auth_name2 == auth) {
found = true;
break;
}
}
if (!found) {
continue;
}
}
}
filteredResultSet.emplace_back(row);
}
return filteredResultSet;
};
const auto filterOutSuperseded = [&](SQLResultSet &&resultSet) {
std::set<std::pair<std::string, std::string>> setTransf;
std::string findSupersededSql("SELECT superseded_table_name, "
"superseded_auth_name, superseded_code, "
"replacement_auth_name, replacement_code "
"FROM supersession WHERE ");
bool findSupersededFirstWhere = true;
ListOfParams findSupersededParams;
std::set<std::string> setAlreadyAsked;
const auto keyMapSupersession = [](
const std::string &table_name, const std::string &auth_name,
const std::string &code) { return table_name + auth_name + code; };
for (const auto &row : resultSet) {
// table1
const auto &table1 = row[0];
const auto &auth_name1 = row[1];
const auto &code1 = row[2];
const auto &deprecated1 = row[3];
// table2
const auto key1 = keyMapSupersession(table1, auth_name1, code1);
if (setAlreadyAsked.find(key1) == setAlreadyAsked.end()) {
setAlreadyAsked.insert(key1);
if (!findSupersededFirstWhere)
findSupersededSql += " OR ";
findSupersededFirstWhere = false;
findSupersededSql +=
"(superseded_table_name = ? AND replacement_table_name = "
"superseded_table_name AND superseded_auth_name = ? AND "
"superseded_code = ?)";
findSupersededParams.push_back(table1);
findSupersededParams.push_back(auth_name1);
findSupersededParams.push_back(code1);
}
const auto &table2 = row[4];
const auto &auth_name2 = row[5];
const auto &code2 = row[6];
const auto &deprecated2 = row[7];
if (deprecated1 == "1" || deprecated2 == "1") {
continue;
const auto key2 = keyMapSupersession(table2, auth_name2, code2);
if (setAlreadyAsked.find(key2) == setAlreadyAsked.end()) {
setAlreadyAsked.insert(key2);
if (!findSupersededFirstWhere)
findSupersededSql += " OR ";
findSupersededFirstWhere = false;
findSupersededSql +=
"(superseded_table_name = ? AND replacement_table_name = "
"superseded_table_name AND superseded_auth_name = ? AND "
"superseded_code = ?)";
findSupersededParams.push_back(table2);
findSupersededParams.push_back(auth_name2);
findSupersededParams.push_back(code2);
}
setTransf1.insert(
setTransf.insert(
std::pair<std::string, std::string>(auth_name1, code1));
setTransf2.insert(
setTransf.insert(
std::pair<std::string, std::string>(auth_name2, code2));
}
std::map<std::string, std::vector<std::pair<std::string, std::string>>>
mapSupersession;
if (!findSupersededParams.empty()) {
const auto resSuperseded =
d->run(findSupersededSql, findSupersededParams);
for (const auto &row : resSuperseded) {
const auto &superseded_table_name = row[0];
const auto &superseded_auth_name = row[1];
const auto &superseded_code = row[2];
const auto &replacement_auth_name = row[3];
const auto &replacement_code = row[4];
mapSupersession[keyMapSupersession(superseded_table_name,
superseded_auth_name,
superseded_code)]
.push_back(std::pair<std::string, std::string>(
replacement_auth_name, replacement_code));
}
}
SQLResultSet filteredResultSet;
for (const auto &row : resultSet) {
const auto &replacement_auth_name1 = row[16];
const auto &replacement_code1 = row[17];
const auto &replacement_auth_name2 = row[18];
const auto &replacement_code2 = row[19];
if (!replacement_auth_name1.empty() &&
setTransf1.find(std::pair<std::string, std::string>(
replacement_auth_name1, replacement_code1)) !=
setTransf1.end()) {
// Skip transformations that are superseded by others that got
// returned in the result set.
continue;
const auto &table1 = row[0];
const auto &auth_name1 = row[1];
const auto &code1 = row[2];
const auto &table2 = row[4];
const auto &auth_name2 = row[5];
const auto &code2 = row[6];
auto iter1 = mapSupersession.find(
keyMapSupersession(table1, auth_name1, code1));
if (iter1 != mapSupersession.end()) {
bool foundReplacement = false;
for (const auto &replacement : iter1->second) {
const auto &replacement_auth_name = replacement.first;
const auto &replacement_code = replacement.second;
if (setTransf.find(std::pair<std::string, std::string>(
replacement_auth_name, replacement_code)) !=
setTransf.end()) {
// Skip transformations that are superseded by others
// that got
// returned in the result set.
foundReplacement = true;
break;
}
}
if (foundReplacement) {
continue;
}
}
if (!replacement_auth_name2.empty() &&
setTransf2.find(std::pair<std::string, std::string>(
replacement_auth_name2, replacement_code2)) !=
setTransf2.end()) {
// Skip transformations that are superseded by others that got
// returned in the result set.
continue;
auto iter2 = mapSupersession.find(
keyMapSupersession(table2, auth_name2, code2));
if (iter2 != mapSupersession.end()) {
bool foundReplacement = false;
for (const auto &replacement : iter2->second) {
const auto &replacement_auth_name = replacement.first;
const auto &replacement_code = replacement.second;
if (setTransf.find(std::pair<std::string, std::string>(
replacement_auth_name, replacement_code)) !=
setTransf.end()) {
// Skip transformations that are superseded by others
// that got
// returned in the result set.
foundReplacement = true;
break;
}
}
if (foundReplacement) {
continue;
}
}
filteredResultSet.emplace_back(row);
}
return filteredResultSet;
};
res = filterDeprecatedAndNotMatchingAuth(std::move(res));
if (discardSuperseded) {
res = filterOutSuperseded(std::move(res));
}
@@ -4536,14 +4667,10 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
const auto &table1 = row[0];
const auto &auth_name1 = row[1];
const auto &code1 = row[2];
const auto &deprecated1 = row[3];
const auto &table2 = row[4];
const auto &auth_name2 = row[5];
const auto &code2 = row[6];
const auto &deprecated2 = row[7];
if (deprecated1 == "1" || deprecated2 == "1") {
continue;
}
auto op1 = d->createFactory(auth_name1)
->createCoordinateOperation(
code1, true, usePROJAlternativeGridNames, table1);
@@ -4624,6 +4751,8 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
// fprintf(stderr, "before %s\n", (sql + additionalWhere).c_str());
res = d->run(sql + additionalWhere, params);
// fprintf(stderr, "after\n");
res = filterDeprecatedAndNotMatchingAuth(std::move(res));
if (discardSuperseded) {
res = filterOutSuperseded(std::move(res));
}
@@ -4631,14 +4760,10 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
const auto &table1 = row[0];
const auto &auth_name1 = row[1];
const auto &code1 = row[2];
const auto &deprecated1 = row[3];
const auto &table2 = row[4];
const auto &auth_name2 = row[5];
const auto &code2 = row[6];
const auto &deprecated2 = row[7];
if (deprecated1 == "1" || deprecated2 == "1") {
continue;
}
auto op1 = d->createFactory(auth_name1)
->createCoordinateOperation(
code1, true, usePROJAlternativeGridNames, table1);
@@ -4719,6 +4844,8 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
// fprintf(stderr, "before %s\n", (sql + additionalWhere).c_str());
res = d->run(sql + additionalWhere, params);
// fprintf(stderr, "after\n");
res = filterDeprecatedAndNotMatchingAuth(std::move(res));
if (discardSuperseded) {
res = filterOutSuperseded(std::move(res));
}
@@ -4726,14 +4853,10 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
const auto &table1 = row[0];
const auto &auth_name1 = row[1];
const auto &code1 = row[2];
const auto &deprecated1 = row[3];
const auto &table2 = row[4];
const auto &auth_name2 = row[5];
const auto &code2 = row[6];
const auto &deprecated2 = row[7];
if (deprecated1 == "1" || deprecated2 == "1") {
continue;
}
auto op1 = d->createFactory(auth_name1)
->createCoordinateOperation(
code1, true, usePROJAlternativeGridNames, table1);
@@ -4814,6 +4937,8 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
// fprintf(stderr, "before %s\n", (sql + additionalWhere).c_str());
res = d->run(sql + additionalWhere, params);
// fprintf(stderr, "after\n");
res = filterDeprecatedAndNotMatchingAuth(std::move(res));
if (discardSuperseded) {
res = filterOutSuperseded(std::move(res));
}
@@ -4821,14 +4946,10 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
const auto &table1 = row[0];
const auto &auth_name1 = row[1];
const auto &code1 = row[2];
const auto &deprecated1 = row[3];
const auto &table2 = row[4];
const auto &auth_name2 = row[5];
const auto &code2 = row[6];
const auto &deprecated2 = row[7];
if (deprecated1 == "1" || deprecated2 == "1") {
continue;
}
auto op1 = d->createFactory(auth_name1)
->createCoordinateOperation(
code1, true, usePROJAlternativeGridNames, table1);
@@ -5222,18 +5343,36 @@ std::string AuthorityFactory::getOfficialNameFromAlias(
if (res.empty()) {
return std::string();
}
const auto &row = res.front();
outTableName = row[0];
outAuthName = row[1];
outCode = row[2];
sql = "SELECT name FROM \"";
sql += replaceAll(outTableName, "\"", "\"\"");
sql += "\" WHERE auth_name = ? AND code = ?";
res = d->run(sql, {outAuthName, outCode});
params.clear();
sql.clear();
bool first = true;
for (const auto &row : res) {
if (!first)
sql += " UNION ALL ";
first = false;
outTableName = row[0];
outAuthName = row[1];
outCode = row[2];
sql += "SELECT name, ? AS table_name, auth_name, code, deprecated "
"FROM \"";
sql += replaceAll(outTableName, "\"", "\"\"");
sql += "\" WHERE auth_name = ? AND code = ?";
params.emplace_back(outTableName);
params.emplace_back(outAuthName);
params.emplace_back(outCode);
}
sql = "SELECT name, table_name, auth_name, code FROM (" + sql +
") x ORDER BY deprecated LIMIT 1";
res = d->run(sql, params);
if (res.empty()) { // shouldn't happen normally
return std::string();
}
return res.front()[0];
const auto &row = res.front();
outTableName = row[1];
outAuthName = row[2];
outCode = row[3];
return row[0];
}
}
@@ -5751,7 +5890,9 @@ static std::string buildSqlLookForAuthNameCode(
std::set<std::string> authorities;
for (const auto &crs : list) {
const auto &ids = crs.first->identifiers();
auto boundCRS = dynamic_cast<crs::BoundCRS *>(crs.first.get());
const auto &ids = boundCRS ? boundCRS->baseCRS()->identifiers()
: crs.first->identifiers();
if (!ids.empty()) {
authorities.insert(*(ids[0]->codeSpace()));
}
@@ -5770,7 +5911,9 @@ static std::string buildSqlLookForAuthNameCode(
params.emplace_back(auth_name);
bool firstGeodCRSForAuth = true;
for (const auto &crs : list) {
const auto &ids = crs.first->identifiers();
auto boundCRS = dynamic_cast<crs::BoundCRS *>(crs.first.get());
const auto &ids = boundCRS ? boundCRS->baseCRS()->identifiers()
: crs.first->identifiers();
if (!ids.empty() && *(ids[0]->codeSpace()) == auth_name) {
if (!firstGeodCRSForAuth) {
sql += ',';
+293 -160
View File
@@ -1298,19 +1298,22 @@ struct WKTParser::Private {
static std::string projectionGetParameter(const WKTNodeNNPtr &projCRSNode,
const char *paramName);
ConversionNNPtr buildProjection(const WKTNodeNNPtr &projCRSNode,
ConversionNNPtr buildProjection(const GeodeticCRSNNPtr &baseGeodCRS,
const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode,
const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit);
ConversionNNPtr
buildProjectionStandard(const WKTNodeNNPtr &projCRSNode,
buildProjectionStandard(const GeodeticCRSNNPtr &baseGeodCRS,
const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode,
const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit);
ConversionNNPtr
buildProjectionFromESRI(const WKTNodeNNPtr &projCRSNode,
buildProjectionFromESRI(const GeodeticCRSNNPtr &baseGeodCRS,
const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode,
const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit);
@@ -1997,65 +2000,20 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
// do that before buildEllipsoid() so that esriStyle_ can be set
auto name = stripQuotes(nodeP->children()[0]);
if (name == "WGS_1984") {
properties.set(IdentifiedObject::NAME_KEY,
GeodeticReferenceFrame::EPSG_6326->nameStr());
} else if (starts_with(name, "D_")) {
esriStyle_ = true;
const char *tableNameForAlias = nullptr;
std::string authNameFromAlias;
std::string codeFromAlias;
if (name == "D_WGS_1984") {
name = "World Geodetic System 1984";
authNameFromAlias = Identifier::EPSG;
codeFromAlias = "6326";
} else {
tableNameForAlias = "geodetic_datum";
}
if (dbContext_ && tableNameForAlias) {
std::string outTableName;
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto officialName = authFactory->getOfficialNameFromAlias(
name, tableNameForAlias, "ESRI", false, outTableName,
authNameFromAlias, codeFromAlias);
if (!officialName.empty()) {
if (primeMeridian->nameStr() !=
PrimeMeridian::GREENWICH->nameStr()) {
auto nameWithPM =
officialName + " (" + primeMeridian->nameStr() + ")";
if (dbContext_->isKnownName(nameWithPM, "geodetic_datum")) {
officialName = nameWithPM;
}
}
name = officialName;
}
}
properties.set(IdentifiedObject::NAME_KEY, name);
if (!authNameFromAlias.empty()) {
auto identifiers = ArrayOfBaseObject::create();
identifiers->add(Identifier::create(
codeFromAlias,
PropertyMap()
.set(Identifier::CODESPACE_KEY, authNameFromAlias)
.set(Identifier::AUTHORITY_KEY, authNameFromAlias)));
properties.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers);
}
} else if (name.find('_') != std::string::npos) {
// Likely coming from WKT1
const auto identifyFromName = [&](const std::string &l_name) {
bool foundDatumName = false;
if (dbContext_) {
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto res = authFactory->createObjectsFromName(
name, {AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME},
true, 1);
bool foundDatumName = false;
l_name,
{AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, true,
1);
if (!res.empty()) {
const auto &refDatum = res.front();
if (metadata::Identifier::isEquivalentName(
name.c_str(), refDatum->nameStr().c_str())) {
l_name.c_str(), refDatum->nameStr().c_str())) {
foundDatumName = true;
properties.set(IdentifiedObject::NAME_KEY,
refDatum->nameStr());
@@ -2096,13 +2054,76 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
std::string authNameFromAlias;
std::string codeFromAlias;
auto officialName = authFactory->getOfficialNameFromAlias(
name, "geodetic_datum", std::string(), true, outTableName,
l_name, "geodetic_datum", std::string(), true, outTableName,
authNameFromAlias, codeFromAlias);
if (!officialName.empty()) {
foundDatumName = true;
properties.set(IdentifiedObject::NAME_KEY, officialName);
}
}
}
return foundDatumName;
};
if (name == "WGS_1984") {
properties.set(IdentifiedObject::NAME_KEY,
GeodeticReferenceFrame::EPSG_6326->nameStr());
} else if (starts_with(name, "D_")) {
esriStyle_ = true;
const char *tableNameForAlias = nullptr;
std::string authNameFromAlias;
std::string codeFromAlias;
if (name == "D_WGS_1984") {
name = "World Geodetic System 1984";
authNameFromAlias = Identifier::EPSG;
codeFromAlias = "6326";
} else {
tableNameForAlias = "geodetic_datum";
}
bool setNameAndId = true;
if (dbContext_ && tableNameForAlias) {
std::string outTableName;
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto officialName = authFactory->getOfficialNameFromAlias(
name, tableNameForAlias, "ESRI", false, outTableName,
authNameFromAlias, codeFromAlias);
if (officialName.empty()) {
// For the case of "D_GDA2020" where there is no D_GDA2020 ESRI
// alias, so just try without the D_ prefix.
const auto nameWithoutDPrefix = name.substr(2);
if (identifyFromName(nameWithoutDPrefix)) {
setNameAndId = false; // already done in identifyFromName()
}
} else {
if (primeMeridian->nameStr() !=
PrimeMeridian::GREENWICH->nameStr()) {
auto nameWithPM =
officialName + " (" + primeMeridian->nameStr() + ")";
if (dbContext_->isKnownName(nameWithPM, "geodetic_datum")) {
officialName = nameWithPM;
}
}
name = officialName;
}
}
if (setNameAndId) {
properties.set(IdentifiedObject::NAME_KEY, name);
if (!authNameFromAlias.empty()) {
auto identifiers = ArrayOfBaseObject::create();
identifiers->add(Identifier::create(
codeFromAlias,
PropertyMap()
.set(Identifier::CODESPACE_KEY, authNameFromAlias)
.set(Identifier::AUTHORITY_KEY, authNameFromAlias)));
properties.set(IdentifiedObject::IDENTIFIERS_KEY, identifiers);
}
}
} else if (name.find('_') != std::string::npos) {
// Likely coming from WKT1
identifyFromName(name);
}
auto ellipsoid = buildEllipsoid(ellipsoidNode);
@@ -3117,9 +3138,40 @@ bool WKTParser::Private::hasWebMercPROJ4String(
// ---------------------------------------------------------------------------
static const MethodMapping *
selectSphericalOrEllipsoidal(const MethodMapping *mapping,
const GeodeticCRSNNPtr &baseGeodCRS) {
if (mapping->epsg_code ==
EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL ||
mapping->epsg_code == EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA) {
mapping = getMapping(
baseGeodCRS->ellipsoid()->isSphere()
? EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL
: EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA);
} else if (mapping->epsg_code ==
EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL ||
mapping->epsg_code ==
EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA) {
mapping = getMapping(
baseGeodCRS->ellipsoid()->isSphere()
? EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL
: EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA);
} else if (mapping->epsg_code ==
EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL ||
mapping->epsg_code == EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL) {
mapping =
getMapping(baseGeodCRS->ellipsoid()->isSphere()
? EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL
: EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL);
}
return mapping;
}
// ---------------------------------------------------------------------------
ConversionNNPtr WKTParser::Private::buildProjectionFromESRI(
const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode,
const UnitOfMeasure &defaultLinearUnit,
const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit) {
const std::string esriProjectionName =
stripQuotes(projectionNode->GP()->children()[0]);
@@ -3129,7 +3181,7 @@ ConversionNNPtr WKTParser::Private::buildProjectionFromESRI(
// on the parameters / their values
const auto esriMappings = getMappingsFromESRI(esriProjectionName);
if (esriMappings.empty()) {
return buildProjectionStandard(projCRSNode, projectionNode,
return buildProjectionStandard(baseGeodCRS, projCRSNode, projectionNode,
defaultLinearUnit, defaultAngularUnit);
}
@@ -3209,6 +3261,8 @@ ConversionNNPtr WKTParser::Private::buildProjectionFromESRI(
}
assert(wkt2_mapping);
wkt2_mapping = selectSphericalOrEllipsoidal(wkt2_mapping, baseGeodCRS);
PropertyMap propertiesMethod;
propertiesMethod.set(IdentifiedObject::NAME_KEY, wkt2_mapping->wkt2_name);
if (wkt2_mapping->epsg_code != 0) {
@@ -3296,19 +3350,18 @@ ConversionNNPtr WKTParser::Private::buildProjectionFromESRI(
// ---------------------------------------------------------------------------
ConversionNNPtr
WKTParser::Private::buildProjection(const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode,
const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit) {
ConversionNNPtr WKTParser::Private::buildProjection(
const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit) {
if (projectionNode->GP()->childrenSize() == 0) {
ThrowNotEnoughChildren(WKTConstants::PROJECTION);
}
if (esriStyle_) {
return buildProjectionFromESRI(projCRSNode, projectionNode,
return buildProjectionFromESRI(baseGeodCRS, projCRSNode, projectionNode,
defaultLinearUnit, defaultAngularUnit);
}
return buildProjectionStandard(projCRSNode, projectionNode,
return buildProjectionStandard(baseGeodCRS, projCRSNode, projectionNode,
defaultLinearUnit, defaultAngularUnit);
}
@@ -3333,8 +3386,8 @@ WKTParser::Private::projectionGetParameter(const WKTNodeNNPtr &projCRSNode,
// ---------------------------------------------------------------------------
ConversionNNPtr WKTParser::Private::buildProjectionStandard(
const WKTNodeNNPtr &projCRSNode, const WKTNodeNNPtr &projectionNode,
const UnitOfMeasure &defaultLinearUnit,
const GeodeticCRSNNPtr &baseGeodCRS, const WKTNodeNNPtr &projCRSNode,
const WKTNodeNNPtr &projectionNode, const UnitOfMeasure &defaultLinearUnit,
const UnitOfMeasure &defaultAngularUnit) {
std::string wkt1ProjectionName =
stripQuotes(projectionNode->GP()->children()[0]);
@@ -3452,6 +3505,9 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
std::string projectionName(wkt1ProjectionName);
const MethodMapping *mapping =
tryToIdentifyWKT1Method ? getMappingFromWKT1(projectionName) : nullptr;
if (mapping) {
mapping = selectSphericalOrEllipsoidal(mapping, baseGeodCRS);
}
// For Krovak, we need to look at axis to decide between the Krovak and
// Krovak East-North Oriented methods
@@ -3594,13 +3650,13 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
// ---------------------------------------------------------------------------
static ProjectedCRSNNPtr createPseudoMercator(const PropertyMap &props) {
static ProjectedCRSNNPtr createPseudoMercator(const PropertyMap &props,
const cs::CartesianCSNNPtr &cs) {
auto conversion = Conversion::createPopularVisualisationPseudoMercator(
PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(0),
Angle(0), Length(0), Length(0));
return ProjectedCRS::create(
props, GeographicCRS::EPSG_4326, conversion,
CartesianCS::createEastingNorthing(UnitOfMeasure::METRE));
return ProjectedCRS::create(props, GeographicCRS::EPSG_4326, conversion,
cs);
}
// ---------------------------------------------------------------------------
@@ -3626,6 +3682,15 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
auto props = buildProperties(node);
auto &csNode = nodeP->lookForChild(WKTConstants::CS_);
const auto &nodeValue = nodeP->value();
if (isNull(csNode) && !ci_equal(nodeValue, WKTConstants::PROJCS) &&
!ci_equal(nodeValue, WKTConstants::BASEPROJCRS)) {
ThrowMissing(WKTConstants::CS_);
}
auto cs = buildCS(csNode, node, UnitOfMeasure::NONE);
auto cartesianCS = nn_dynamic_pointer_cast<CartesianCS>(cs);
const std::string projCRSName = stripQuotes(nodeP->children()[0]);
if (esriStyle_ && dbContext_) {
// It is likely that the ESRI definition of EPSG:32661 (UPS North) &
@@ -3651,21 +3716,22 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
}
}
if (isNull(conversionNode) && hasWebMercPROJ4String(node, projectionNode)) {
if (isNull(conversionNode) && hasWebMercPROJ4String(node, projectionNode) &&
cartesianCS) {
toWGS84Parameters_.clear();
return createPseudoMercator(props);
return createPseudoMercator(props, NN_NO_CHECK(cartesianCS));
}
// WGS_84_Pseudo_Mercator: Particular case for corrupted ESRI WKT generated
// by older GDAL versions
// https://trac.osgeo.org/gdal/changeset/30732
// WGS_1984_Web_Mercator: deprecated ESRI:102113
if (metadata::Identifier::isEquivalentName(projCRSName.c_str(),
"WGS_84_Pseudo_Mercator") ||
metadata::Identifier::isEquivalentName(projCRSName.c_str(),
"WGS_1984_Web_Mercator")) {
if (cartesianCS && (metadata::Identifier::isEquivalentName(
projCRSName.c_str(), "WGS_84_Pseudo_Mercator") ||
metadata::Identifier::isEquivalentName(
projCRSName.c_str(), "WGS_1984_Web_Mercator"))) {
toWGS84Parameters_.clear();
return createPseudoMercator(props);
return createPseudoMercator(props, NN_NO_CHECK(cartesianCS));
}
auto linearUnit = buildUnitInSubNode(node, UnitOfMeasure::Type::LINEAR);
@@ -3674,16 +3740,8 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
auto conversion =
!isNull(conversionNode)
? buildConversion(conversionNode, linearUnit, angularUnit)
: buildProjection(node, projectionNode, linearUnit, angularUnit);
auto &csNode = nodeP->lookForChild(WKTConstants::CS_);
const auto &nodeValue = nodeP->value();
if (isNull(csNode) && !ci_equal(nodeValue, WKTConstants::PROJCS) &&
!ci_equal(nodeValue, WKTConstants::BASEPROJCRS)) {
ThrowMissing(WKTConstants::CS_);
}
auto cs = buildCS(csNode, node, UnitOfMeasure::NONE);
auto cartesianCS = nn_dynamic_pointer_cast<CartesianCS>(cs);
: buildProjection(baseGeodCRS, node, projectionNode, linearUnit,
angularUnit);
// No explicit AXIS node ? (WKT1)
if (isNull(nodeP->lookForChild(WKTConstants::AXIS))) {
@@ -3755,6 +3813,12 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
ThrowNotExpectedCSType("Cartesian");
}
if (cartesianCS->axisList().size() == 3 &&
baseGeodCRS->coordinateSystem()->axisList().size() == 2) {
baseGeodCRS = NN_NO_CHECK(util::nn_dynamic_pointer_cast<GeodeticCRS>(
baseGeodCRS->promoteTo3D(std::string(), dbContext_)));
}
addExtensionProj4ToProp(nodeP, props);
return ProjectedCRS::create(props, baseGeodCRS, conversion,
@@ -4039,6 +4103,52 @@ WKTParser::Private::buildCompoundCRS(const WKTNodeNNPtr &node) {
// ---------------------------------------------------------------------------
static CRSNNPtr
createBoundCRSSourceTransformationCRS(const crs::CRSPtr &sourceCRS,
const crs::CRSPtr &targetCRS) {
CRSPtr sourceTransformationCRS;
if (dynamic_cast<GeographicCRS *>(targetCRS.get())) {
GeographicCRSPtr sourceGeographicCRS =
sourceCRS->extractGeographicCRS();
sourceTransformationCRS = sourceGeographicCRS;
if (sourceGeographicCRS) {
if (sourceGeographicCRS->datum() != nullptr &&
sourceGeographicCRS->primeMeridian()
->longitude()
.getSIValue() != 0.0) {
sourceTransformationCRS =
GeographicCRS::create(
util::PropertyMap().set(
common::IdentifiedObject::NAME_KEY,
sourceGeographicCRS->nameStr() +
" (with Greenwich prime meridian)"),
datum::GeodeticReferenceFrame::create(
util::PropertyMap().set(
common::IdentifiedObject::NAME_KEY,
sourceGeographicCRS->datum()->nameStr() +
" (with Greenwich prime meridian)"),
sourceGeographicCRS->datum()->ellipsoid(),
util::optional<std::string>(),
datum::PrimeMeridian::GREENWICH),
sourceGeographicCRS->coordinateSystem())
.as_nullable();
}
} else {
sourceTransformationCRS =
std::dynamic_pointer_cast<VerticalCRS>(sourceCRS);
if (!sourceTransformationCRS) {
throw ParsingException(
"Cannot find GeographicCRS or VerticalCRS in sourceCRS");
}
}
} else {
sourceTransformationCRS = sourceCRS;
}
return NN_NO_CHECK(sourceTransformationCRS);
}
// ---------------------------------------------------------------------------
BoundCRSNNPtr WKTParser::Private::buildBoundCRS(const WKTNodeNNPtr &node) {
const auto *nodeP = node->GP();
auto &abridgedNode =
@@ -4082,23 +4192,10 @@ BoundCRSNNPtr WKTParser::Private::buildBoundCRS(const WKTNodeNNPtr &node) {
consumeParameters(abridgedNode, true, parameters, values, defaultLinearUnit,
defaultAngularUnit);
CRSPtr sourceTransformationCRS;
if (dynamic_cast<GeographicCRS *>(targetCRS.get())) {
sourceTransformationCRS = sourceCRS->extractGeographicCRS();
if (!sourceTransformationCRS) {
sourceTransformationCRS =
std::dynamic_pointer_cast<VerticalCRS>(sourceCRS);
if (!sourceTransformationCRS) {
throw ParsingException(
"Cannot find GeographicCRS or VerticalCRS in sourceCRS");
}
}
} else {
sourceTransformationCRS = sourceCRS;
}
const auto sourceTransformationCRS(
createBoundCRSSourceTransformationCRS(sourceCRS, targetCRS));
auto transformation = Transformation::create(
buildProperties(abridgedNode), NN_NO_CHECK(sourceTransformationCRS),
buildProperties(abridgedNode), sourceTransformationCRS,
NN_NO_CHECK(targetCRS), nullptr, buildProperties(methodNode),
parameters, values, std::vector<PositionalAccuracyNNPtr>());
@@ -4343,7 +4440,28 @@ CRSPtr WKTParser::Private::buildCRS(const WKTNodeNNPtr &node) {
if (ci_equal(name, WKTConstants::PROJCS) ||
ci_equal(name, WKTConstants::PROJCRS) ||
ci_equal(name, WKTConstants::PROJECTEDCRS)) {
return util::nn_static_pointer_cast<CRS>(buildProjectedCRS(node));
auto projCRS =
util::nn_static_pointer_cast<CRS>(buildProjectedCRS(node));
auto projString = projCRS->getExtensionProj4();
if (starts_with(projString, "+proj=ob_tran +o_proj=longlat") ||
starts_with(projString, "+proj=ob_tran +o_proj=lonlat") ||
starts_with(projString, "+proj=ob_tran +o_proj=latlong") ||
starts_with(projString, "+proj=ob_tran +o_proj=latlon")) {
// Those are not a projected CRS, but a DerivedGeographic one...
if (projString.find(" +type=crs") == std::string::npos) {
projString += " +type=crs";
}
try {
auto projObj =
PROJStringParser().createFromPROJString(projString);
auto crs = nn_dynamic_pointer_cast<CRS>(projObj);
if (crs) {
return crs;
}
} catch (const io::ParsingException &) {
}
}
return projCRS.as_nullable();
}
if (ci_equal(name, WKTConstants::VERT_CS) ||
@@ -5244,24 +5362,11 @@ BoundCRSNNPtr JSONParser::buildBoundCRS(const json &j) {
values.emplace_back(ParameterValue::create(getMeasure(param)));
}
CRSPtr sourceTransformationCRS;
if (dynamic_cast<GeographicCRS *>(targetCRS.get())) {
sourceTransformationCRS = sourceCRS->extractGeographicCRS();
if (!sourceTransformationCRS) {
sourceTransformationCRS =
std::dynamic_pointer_cast<VerticalCRS>(sourceCRS.as_nullable());
if (!sourceTransformationCRS) {
throw ParsingException(
"Cannot find GeographicCRS or VerticalCRS in sourceCRS");
}
}
} else {
sourceTransformationCRS = sourceCRS;
}
const auto sourceTransformationCRS(
createBoundCRSSourceTransformationCRS(sourceCRS, targetCRS));
auto transformation = Transformation::create(
buildProperties(transformationJ), NN_NO_CHECK(sourceTransformationCRS),
targetCRS, nullptr, buildProperties(methodJ), parameters, values,
buildProperties(transformationJ), sourceTransformationCRS, targetCRS,
nullptr, buildProperties(methodJ), parameters, values,
std::vector<PositionalAccuracyNNPtr>());
return BoundCRS::create(sourceCRS, targetCRS, transformation);
@@ -8495,6 +8600,9 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
auto &step = steps_[iStep];
auto mappings = getMappingsFromPROJName(step.name);
const MethodMapping *mapping = mappings.empty() ? nullptr : mappings[0];
if (mapping) {
mapping = selectSphericalOrEllipsoidal(mapping, geogCRS);
}
assert(isProjectedStep(step.name));
assert(iUnitConvert < 0 ||
@@ -8511,6 +8619,7 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
auto axisType = AxisType::REGULAR;
bool bWebMercator = false;
std::string webMercatorName("WGS 84 / Pseudo-Mercator");
if (step.name == "tmerc" &&
((getParamValue(step, "axis") == "wsu" && iAxisSwap < 0) ||
@@ -8540,8 +8649,6 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
}
} else if (step.name == "aeqd" && hasParamValue(step, "guam")) {
mapping = getMapping(EPSG_CODE_METHOD_GUAM_PROJECTION);
} else if (step.name == "cea" && !geogCRS->ellipsoid()->isSphere()) {
mapping = getMapping(EPSG_CODE_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA);
} else if (step.name == "geos" && getParamValue(step, "sweep") == "x") {
mapping =
getMapping(PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_X);
@@ -8601,6 +8708,11 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
getAngularValue(getParamValue(step, "x_0")) == 0.0 &&
getAngularValue(getParamValue(step, "y_0")) == 0.0) {
bWebMercator = true;
if (hasParamValue(step, "units") &&
getParamValue(step, "units") != "m") {
webMercatorName +=
" (unit " + getParamValue(step, "units") + ')';
}
}
} else if (hasParamValue(step, "lat_ts")) {
mapping = getMapping(EPSG_CODE_METHOD_MERCATOR_VARIANT_B);
@@ -8647,15 +8759,6 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
axisType = AxisType::SOUTH_POLE;
}
}
if (geogCRS->ellipsoid()->isSphere()) {
mapping = getMapping(
EPSG_CODE_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA_SPHERICAL);
}
} else if (step.name == "eqc") {
if (geogCRS->ellipsoid()->isSphere()) {
mapping =
getMapping(EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL);
}
}
UnitOfMeasure unit = buildUnit(step, "units", "to_meter");
@@ -8734,22 +8837,43 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
} else if (param->unit_type == UnitOfMeasure::Type::SCALE) {
value = 1;
} else {
// For omerc, if gamma is missing, the default value is
// alpha
if (step.name == "omerc" && proj_name == "gamma") {
paramValue = &getParamValue(step, "alpha");
if (!paramValue->empty()) {
value = getAngularValue(*paramValue);
}
// For omerc, if gamma is missing, the default value is
// alpha
else if (step.name == "omerc" && proj_name == "gamma") {
paramValue = &getParamValue(step, "alpha");
if (!paramValue->empty()) {
value = getAngularValue(*paramValue);
}
} else if (step.name == "krovak") {
if (param->epsg_code ==
EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS) {
value = 30.28813975277777776;
} else if (
param->epsg_code ==
EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL) {
value = 78.5;
}
} else if (step.name == "cea" && proj_name == "lat_ts") {
paramValue = &getParamValueK(step);
if (!paramValue->empty()) {
bool hasError = false;
const double k = getNumericValue(*paramValue, &hasError);
if (hasError) {
throw ParsingException("invalid value for k/k_0");
}
} else if (step.name == "krovak") {
if (param->epsg_code ==
EPSG_CODE_PARAMETER_COLATITUDE_CONE_AXIS) {
value = 30.28813975277777776;
} else if (
param->epsg_code ==
EPSG_CODE_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL) {
value = 78.5;
if (k >= 0 && k <= 1) {
const double es =
geogCRS->ellipsoid()->squaredEccentricity();
if (es < 0) {
throw ParsingException("Invalid flattening");
}
value =
Angle(acos(k * sqrt((1 - es) / (1 - k * k * es))),
UnitOfMeasure::RADIAN)
.convertToUnit(UnitOfMeasure::DEGREE);
} else {
throw ParsingException("k/k_0 should be in [0,1]");
}
}
}
@@ -8872,8 +8996,8 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
CRSNNPtr crs =
bWebMercator
? createPseudoMercator(props.set(IdentifiedObject::NAME_KEY,
"WGS 84 / Pseudo-Mercator"))
? createPseudoMercator(
props.set(IdentifiedObject::NAME_KEY, webMercatorName), cs)
: ProjectedCRS::create(props, geogCRS, NN_NO_CHECK(conv), cs);
if (!hasParamValue(step, "geoidgrids") &&
@@ -9028,7 +9152,7 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
bool hasSignificantParamValues = false;
for (const auto &kv : d->steps_[0].paramValues) {
if (!((kv.key == "type" && kv.value == "crs") ||
kv.key == "no_defs")) {
kv.key == "wktext" || kv.key == "no_defs")) {
hasSignificantParamValues = true;
break;
}
@@ -9057,7 +9181,7 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
auto projCRS = dynamic_cast<ProjectedCRS *>(crs);
if (projCRS) {
// Override with easting northing order
const auto &conv = projCRS->derivingConversionRef();
const auto conv = projCRS->derivingConversion();
if (conv->method()->getEPSGCode() !=
EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED) {
return ProjectedCRS::create(
@@ -9235,12 +9359,17 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
if (!pj_context) {
throw ParsingException("out of memory");
}
// Backup error logger and level, and install temporary handler
auto old_logger = pj_context->logger;
auto old_logger_app_data = pj_context->logger_app_data;
auto log_level = proj_log_level(pj_context, PJ_LOG_ERROR);
proj_log_func(pj_context, &logger, Logger::log);
if (pj_context != d->ctx_) {
proj_log_func(pj_context, &logger, Logger::log);
proj_context_use_proj4_init_rules(pj_context, d->usePROJ4InitRules_);
}
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"
@@ -9248,7 +9377,11 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
.c_str());
pj_context->projStringParserCreateFromPROJStringRecursionCounter--;
valid = pj != nullptr;
// Restore initial error logger and level
proj_log_level(pj_context, log_level);
pj_context->logger = old_logger;
pj_context->logger_app_data = old_logger_app_data;
// Remove parameters not understood by PROJ.
if (valid && d->steps_.size() == 1) {
@@ -9310,13 +9443,13 @@ PROJStringParser::createFromPROJString(const std::string &projString) {
proj_destroy(pj);
if (!valid) {
std::string prefix("Error " + toString(proj_context_errno(pj_context)) +
": ");
const int l_errno = proj_context_errno(pj_context);
std::string prefix("Error " + toString(l_errno) + " (" +
proj_errno_string(l_errno) + ")");
if (logger.msg.empty()) {
logger.msg =
prefix + proj_errno_string(proj_context_errno(pj_context));
logger.msg = prefix;
} else {
logger.msg = prefix + logger.msg;
logger.msg = prefix + ": " + logger.msg;
}
}
@@ -9476,7 +9609,7 @@ JSONFormatter::~JSONFormatter() = default;
// ---------------------------------------------------------------------------
CPLJSonStreamingWriter &JSONFormatter::writer() const { return d->writer_; }
CPLJSonStreamingWriter *JSONFormatter::writer() const { return &(d->writer_); }
// ---------------------------------------------------------------------------
+8 -6
View File
@@ -38,6 +38,8 @@
#include "proj/internal/internal.hpp"
#include "proj/internal/io_internal.hpp"
#include "proj_json_streaming_writer.hpp"
#include <algorithm>
#include <memory>
#include <string>
@@ -1102,15 +1104,15 @@ void Identifier::_exportToJSON(JSONFormatter *formatter) const {
const std::string &l_code = code();
const std::string &l_codeSpace = *codeSpace();
if (!l_codeSpace.empty() && !l_code.empty()) {
auto &writer = formatter->writer();
auto writer = formatter->writer();
auto objContext(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("authority");
writer.Add(l_codeSpace);
writer.AddObjKey("code");
writer->AddObjKey("authority");
writer->Add(l_codeSpace);
writer->AddObjKey("code");
try {
writer.Add(std::stoi(l_code));
writer->Add(std::stoi(l_code));
} catch (const std::exception &) {
writer.Add(l_code);
writer->Add(l_code);
}
}
}
+12
View File
@@ -406,6 +406,16 @@ PJ *OPERATION(pipeline,0) {
int i_pipeline = -1, i_first_step = -1, i_current_step;
char **argv, **current_argv;
if( P->ctx->pipelineInitRecursiongCounter == 5 )
{
// Can happen for a string like:
// proj=pipeline step "x="""," u=" proj=pipeline step ste=""[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline p step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ste="[" u=" proj=pipeline step ""x="""""""""""
// Probably an issue with the quoting handling code
// But doesn't hurt to add an extra safety check
proj_log_error (P, "Pipeline: too deep recursion");
return destructor (P, PJD_ERR_MALFORMED_PIPELINE); /* ERROR: nested pipelines */
}
P->fwd4d = pipeline_forward_4d;
P->inv4d = pipeline_reverse_4d;
P->fwd3d = pipeline_forward_3d;
@@ -495,7 +505,9 @@ PJ *OPERATION(pipeline,0) {
err = proj_errno_reset (P);
P->ctx->pipelineInitRecursiongCounter ++;
next_step = pj_create_argv_internal (P->ctx, current_argc, current_argv);
P->ctx->pipelineInitRecursiongCounter --;
proj_log_trace (P, "Pipeline: Step %d (%s) at %p", i, current_argv[0], next_step);
if (nullptr==next_step) {
+1 -1
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 3
#define PROJ_VERSION_PATCH 0
#define PROJ_VERSION_PATCH 3
extern char const PROJ_DLL pj_release[]; /* global release id string */
+1 -1
View File
@@ -38,7 +38,7 @@
#endif
#ifndef PJ_VERSION
#define PJ_VERSION 630
#define PJ_VERSION 633
#endif
#ifdef PROJ_RENAME_SYMBOLS
+5 -1
View File
@@ -511,11 +511,15 @@
/* ------------------------------------------------------------------------ */
#define EPSG_CODE_METHOD_VERTCON 9658
#define EPSG_NAME_METHOD_VERTCON "VERTCON"
#define EPSG_NAME_METHOD_VERTCON_OLDNAME "VERTCON"
#define EPSG_NAME_METHOD_VERTCON "Vertical Offset by Grid Interpolation (VERTCON)"
#define EPSG_CODE_METHOD_VERTICALGRID_NZLVD 1071
#define EPSG_NAME_METHOD_VERTICALGRID_NZLVD "Vertical Offset by Grid Interpolation (NZLVD)"
#define EPSG_CODE_METHOD_VERTICALGRID_GTX 1084
#define EPSG_NAME_METHOD_VERTICALGRID_GTX "Vertical Offset by Grid Interpolation (gtx)"
#define EPSG_NAME_PARAMETER_VERTICAL_OFFSET_FILE "Vertical offset file"
#define EPSG_CODE_PARAMETER_VERTICAL_OFFSET_FILE 8732
+1
View File
@@ -711,6 +711,7 @@ struct projCtx_t {
void* file_finder_user_data = nullptr;
int projStringParserCreateFromPROJStringRecursionCounter = 0; // to avoid potential infinite recursion in PROJStringParser::createFromPROJString()
int pipelineInitRecursiongCounter = 0; // to avoid potential infinite recursion in pipeline.cpp
projCtx_t() = default;
projCtx_t(const projCtx_t&);

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