Compare commits

..
1780 Commits
Author SHA1 Message Date
Clifford Yapp 30b6e69ac1 Merge tag '9.7.1' into RELEASE 2026-02-04 16:13:45 -05:00
Kristian Evers e37c81729a docs: update version numbers and release date 2025-12-01 15:28:34 +01:00
Kristian Evers 9719626fc5 docs: update news and download for 9.7.1 release 2025-12-01 15:27:19 +01:00
Kristian Evers ff5f3b166a Update version numbers for 9.7.1 release 2025-11-25 10:56:03 +01:00
Kristian Evers da62929788 database: Bump PROJ-data version number 2025-11-25 10:47:42 +01:00
Kristian Evers 6f4f4e131f Update NEWS for 9.7.1 release 2025-11-25 10:45:31 +01:00
Kristian Evers d3463f1435 Merge remote-tracking branch 'origin/9.7' into 9.7 2025-11-25 10:44:49 +01:00
Kristian Evers 9669eff676 Merge pull request #4620 from OSGeo/backport-4592-to-9.7
[Backport 9.7] projinfo: make it honour '-k crs'
2025-11-25 10:43:37 +01:00
Kristian Evers 20c61b37aa Update man-pages from Sphinx-docs 2025-11-25 10:27:32 +01:00
Even Rouault db4a625dca projinfo: make it honour '-k crs' 2025-11-25 08:39:29 +00:00
Even Rouault 43e1cfe336 Merge pull request #4615 from OSGeo/backport-4606-to-9.7
[Backport 9.7] WKT/PROJJSON datum ensemble import: allow no members
2025-11-20 15:18:21 +01:00
Even Rouault f6c51f6e9f WKT/PROJJSON datum ensemble import: allow no members
With the future extension of the ETRS89 datum ensemble to all recently
created ETRS89-XX national datums, the number of members in the ensemble
will be huge and will make ugly WKT/PROJJSON, hence it is highly likely
that listing the members will be made optional. Be tolerant of that on
the parsing size, but still emit them on export for now.
2025-11-19 16:22:39 +00:00
Even Rouault 5d07e2e689 Merge pull request #4601 from OSGeo/backport-4599-to-9.7
[Backport 9.7] BoundCRS::identify: fix creation of an invalid BoundCRS (that can cause later crashes) for CRS based on 'NTF (Paris)'
2025-11-04 12:01:36 +01:00
Even Rouault 1e730948fe BoundCRS::identify: fix creation of an invalid BoundCRS (that can cause later crashes) for CRS based on 'NTF (Paris)'
Fixes qgis/qgis#63787
2025-11-03 23:27:27 +00:00
Even Rouault bcd4ac4441 Avoid false positive coverity scan warning 2025-11-01 22:32:59 +01:00
Even Rouault 46cb2512a5 Merge pull request #4595 from OSGeo/backport-4594-to-9.7
[Backport 9.7] proj_clone(): fix insufficient propagation of FORCE_OVER=YES
2025-11-01 22:29:56 +01:00
Even Rouault fe2605eb2f proj_clone(): fix insufficient propagation of FORCE_OVER=YES
Fixes #4591
2025-11-01 15:33:12 +00:00
Even Rouault 95fa250ce9 Merge pull request #4586 from OSGeo/backport-4583-to-9.7
[Backport 9.7] Database: update to EPSG v12.029
2025-10-16 23:15:34 +02:00
Even Rouault 7f48d80289 Database: add fr_ign_ggm23v2.tif to grid_alternatives.sql 2025-10-03 20:00:11 +00:00
Even Rouault 7c69c3aa44 Database: update to EPSG v12.029 2025-10-03 20:00:11 +00:00
Even Rouault cb258bc70d Database: update to EPSG v12.027 2025-10-03 20:00:11 +00:00
Even Rouault 73802200d2 Merge pull request #4582 from OSGeo/backport-4581-to-9.7
[Backport 9.7] createOperations(): fix compound to compound when horizontal CRS of …
2025-09-29 09:52:14 +02:00
Even Rouault fecbbae427 createOperations(): fix compound to compound when horizontal CRS of one is a bound whose hub CRS is the geog CRS of the target, and a vertical transf is involved
Fixes #4580
2025-09-29 07:03:10 +00:00
Even Rouault b11b76c4d1 Merge pull request #4579 from OSGeo/backport-4577-to-9.7
[Backport 9.7] createOperations(): fix compound to compound when vertical CRS definition is equivalent but not strictly identical
2025-09-26 15:17:23 +02:00
Even Rouault 9c381624cd createOperations(): fix compound to compound when vertical CRS definition is equivalent but not strictly identical
Fixes #4576
2025-09-24 15:34:40 +00:00
Even Rouault 6e3bb0dfc9 Merge pull request #4578 from OSGeo/backport-4574-to-9.7
[Backport 9.7] Database: enable transformations_czechia.sql
2025-09-24 17:12:24 +02:00
Even Rouault 8b0ea2e182 Database: enable transformations_czechia.sql
now that cz_cuzk_table_-y-x_3_v1710.tif is available
(https://github.com/OSGeo/PROJ-data/pull/147)
2025-09-23 17:49:34 +00:00
Even Rouault 5224d8350d Merge pull request #4572 from OSGeo/backport-4571-to-9.7
[Backport 9.7] Database: update to EPSG v12.026
2025-09-18 15:56:31 +02:00
Even Rouault 6eac68f682 Database: update to EPSG v12.026
Remove extra erroneous usage for EPSG:11021 'ETRS89-NOR [EUREF89] / UTM zone 31N'
2025-09-18 13:01:41 +00:00
Even Rouault 54ea7524f3 Merge pull request #4570 from OSGeo/backport-4568-to-9.7
[Backport 9.7] Database: update to EPSG v12.025
2025-09-17 10:47:06 +02:00
Even Rouault f7284d37a8 Various tweaks to take into account switch from ETRS89 to ETRS89-NOR [EUREF89] 2025-09-15 11:42:51 +00:00
Even Rouault 3320ed884b Fix setting requiresPerCoordinateInputTime flag for PROJ-synthetized operations 2025-09-15 11:42:51 +00:00
Even Rouault bdc0bc6480 Database: update to EPSG v12.025 2025-09-15 11:42:50 +00:00
Even Rouault 334395bea0 news.rst: fixes 2025-09-15 13:37:03 +02:00
Kristian Evers 7b92e89450 Update website version numbers and dates 2025-09-15 09:13:15 +02:00
Kristian Evers b24cdfa5ec Update docs for 9.7.0 release 2025-09-15 09:02:18 +02:00
Kristian Evers 5c07a4bddb proj.db: bump version number of PROJ-data 2025-09-08 15:14:35 +02:00
Kristian Evers ca5bbdd01e Update NEWS for 9.7.0 release! 2025-09-08 15:13:08 +02:00
Kristian Evers 9340b742dd Update man-pages from Sphinx-docs 2025-09-08 13:54:57 +02:00
Even Rouault 2c57ef8357 Revert "CI: workaround cppcheck bug"
This reverts commit b3c52f3af3.

The bug has been fixed in cppcheck
2025-09-07 13:41:56 +02:00
Even Rouault 16b2189481 Merge pull request #4563 from OSGeo/dependabot/github_actions/actions/checkout-5
Bump actions/checkout from 4 to 5
2025-09-05 18:08:10 +02:00
Even Rouault 7d596ae1c3 Merge pull request #4564 from rouault/no_kv_Svalbard_EUREF89_SVD2024
Database: add mapping from Href_Svalbard_EUREF89_EGG2015_2024.bin to no_kv_Svalbard_EUREF89_SVD2024.tif
2025-09-05 18:07:37 +02:00
Even Rouault 5dc8afcd92 Database: add mapping from Href_Svalbard_EUREF89_EGG2015_2024.bin to no_kv_Svalbard_EUREF89_SVD2024.tif
```
$ echo 76 25 0 0 | PROJ_DATA=data PROJ_NETWORK=ON bin/cct EPSG:11004
 76.0000000000   25.0000000000      -25.6158        0.0000
```
2025-09-05 16:35:28 +02:00
Even Rouault 5bb60a8536 Fix typos [ci skip] 2025-09-02 21:42:28 +02:00
dependabot[bot] 6550d6d93b Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-02 12:01:44 +00:00
Even Rouault 080fd7ae4a Merge pull request #4562 from rouault/epsg_12_021
Database: update to EPSG v12.022
2025-09-02 10:15:20 +02:00
Even Rouault 2b51a049ac Add logic to fix ITRF2014 to ETRS89-DNK 2025-09-01 16:33:23 +02:00
Even Rouault b38d51f898 Database: update to EPSG v12.022 2025-08-30 23:03:31 +02:00
Even Rouault 62c603f3f9 Add a data/sql/non_imported_operations.sql (non integrated in DB) 2025-08-30 23:03:31 +02:00
Even Rouault 62645ef6b1 travis/install.sh: test adding non-official file to DB 2025-08-30 23:03:31 +02:00
Even Rouault 77cefbaaec Import and implement 3 new methods used by NKG (bump db structure to 1.6)
Demo
```
 # Tests "Position Vector (geocen) & Geocen translations NEU velocities (gtg)"

$ echo 3140996.6730 596336.8511 5500477.1338 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct NKG:ETRF14_TO_FI
 3140996.7242    596336.8904  5500477.0896     inf
$ echo 3140996.6730 596336.8511 5500477.1338 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct EPSG:10810
 3140996.7242    596336.8904  5500477.0896     inf

$ echo 3140996.7242 596336.8904 5500477.0896 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct -I NKG:ETRF14_TO_FI
 3140996.6730    596336.8511  5500477.1338     inf
$ echo 3140996.7242 596336.8904 5500477.0896 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct -I EPSG:10810
 3140996.6730    596336.8511  5500477.1338     inf

 # Tests "Geocentric translations using NEU velocity grid (gtg)" and "Geocen translations by grid (gtg) & Geocen translations NEU velocities (gtg)"

$ echo 3140996.6730 596336.8511 5500477.1338 2025 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct NKG:ITRF2014_TO_NO
 3140997.2140    596336.4062  5500476.6768     2025.0000
$ echo 3140996.6730 596336.8511 5500477.1338 2025 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct EPSG:10817
 3140997.2140    596336.4062  5500476.6768     2025.0000

$ echo 3140997.2140 596336.4062 5500476.6768 2025 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct -I NKG:ITRF2014_TO_NO
 3140996.6730    596336.8511  5500477.1338     2025.0000
$ echo 3140997.2140 596336.4062 5500476.6768 2025 | PROJ_NETWORK=ON PROJ_DATA=data bin/cct -I EPSG:10817
 3140996.6730    596336.8511  5500477.1338     2025.0000
```
2025-08-29 14:41:18 +02:00
Even Rouault a2628fcda1 Database: update to EPSG v12.021 2025-08-27 21:20:30 +02:00
Even Rouault ff43c46b19 Merge pull request #4561 from rouault/epsg_12_019
Database: update to EPSG v12.019
2025-08-21 17:58:09 +02:00
Even Rouault 2048af1d9e Add support for 'Geographic2D Offsets by TIN Interpolation (JSON)' method and remove custom database entry for 'NGO 1948 to ETRS89 (2)' 2025-08-21 00:09:06 +02:00
Even Rouault 3a00a758c3 Database: update to EPSG v12.019 2025-08-21 00:09:06 +02:00
Even Rouault d029573c53 CI: add an action to verify proper linting 2025-08-21 00:09:06 +02:00
Even Rouault d1bba41fce Reformat 2025-08-20 17:08:08 +02:00
Even Rouault e4219caa29 Merge pull request #4560 from cffk/geod-2.2
BUG-fix: geodesic inverse for meridional points on prolate ellipsoid
2025-08-19 20:11:25 +02:00
Charles Karney 7f8716862e BUG-fix: geodesic inverse for meridional points on prolate ellipsoid
This fixes a bug in the inverse geodesic routine for extreme prolate
ellipsoids (f < -2 or b > 3*a).  The utility routine invgeod does not
allow you to specify prolate ellipsoid (an overall gripe I have with
PROJ).  However, the API does let you set f < 0.  Of course, the results
you get are still approximate, since f is outside the recommended range
f < |1/50|.

This syncs with version 2.2 of geographiclib-c.  This includes a couple
of workarounds for compiler issues:

(1) clang -Wkeyword-macro triggered a warning with nullptr being
defined.  Switch to NULLPTR and define this to be nullptr, NULL, or 0.

(2) "error: a function declaration without a prototype is deprecated in
all versions of C [-Werror,-Wstrict-prototypes]".  Fix by changing the
declaration "int f()" to "int f(void)".

Finally, update geod.rst to replace +ellps=<ellipse> by
+ellps=<ellispoid>.  Presumably the man page will catch up shortly.
2025-08-19 11:44:14 -04:00
Even Rouault ec880608be Merge pull request #4559 from jjimenezshaw/docker-libtiff-dev
Use libtiff-dev instead of libtiff5-dev in docker
2025-08-18 12:59:47 +02:00
Javier Jimenez Shaw ee4491802e Use libtiff-dev instead of libtiff5-dev in docker 2025-08-18 09:25:15 +02:00
Even Rouault 1ab9dfc62f Merge pull request #4557 from jjimenezshaw/update-docker-24.04
Update Dockerfile to ubuntu:24.04
2025-08-15 20:45:54 +02:00
Javier Jimenez Shaw 5b926b8a93 update Dockerfile to ubuntu:24.04 2025-08-15 18:54:36 +02:00
Even Rouault 27dfb11f26 Merge pull request #4556 from rouault/epsg_12_018
Database: update to EPSG v12.018
2025-08-12 12:53:50 +02:00
Even Rouault 2750aec84b Database: update to EPSG v12.018 2025-08-12 00:11:20 +02:00
Even Rouault 2d1c017de2 Merge pull request #4555 from rouault/fix_gdal_12891
Support exporting Mercator (Spherical) on a sphere as Mercator_1SP in WKT1
2025-08-08 21:44:56 +02:00
Even Rouault 37efb5a7d3 Support exporting Mercator (Spherical) on a sphere as Mercator_1SP in WKT1
Fixes OSGeo/gdal#12891
2025-08-08 12:09:35 +02:00
Even Rouault b3c52f3af3 CI: workaround cppcheck bug 2025-08-08 12:09:16 +02:00
Even Rouault 3c600db66a Merge pull request #4554 from rouault/db_SLO-VTP2024
Database: add entry for SLO-VTP2024.xyz in grid_alternatives.sql
2025-08-01 13:07:19 +02:00
Even Rouault 17b51a2601 Merge pull request #4553 from jjimenezshaw/sqlite-msg
On SQLite query error, show first the error msg than the sql query
2025-07-30 18:54:09 +02:00
Even Rouault 408573e8f3 Database: add entry for SLO-VTP2024.xyz in grid_alternatives.sql
Matches PROJ-data addition of https://github.com/OSGeo/PROJ-data/pull/144
2025-07-30 18:52:32 +02:00
Javier Jimenez Shaw 2653d9865b On SQLite query error, show first the error msg
than the sql query. The query could be huge, and the text not registered completely.
2025-07-28 18:54:22 +02:00
Even Rouault 2de2d856ae Merge pull request #4552 from rouault/fix_4550
createOperations(): fix a case involving 2 CompoundCRS, one with TOWGS84, and the 2 verticalCRS differing by units
2025-07-28 15:44:52 +02:00
Even Rouault 14f46f263d createOperations(): fix a case involving 2 CompoundCRS, one with TOWGS84, and the 2 verticalCRS differing by units
Fixes #4550
2025-07-26 18:55:22 +02:00
Even Rouault 2ce895da4d Merge pull request #4549 from rouault/epsg_12_017
Database: update to EPSG 12.017
2025-07-24 16:39:19 +02:00
Even Rouault 0fead84ee9 CI: avoid issue with msys2 2025-07-23 19:18:07 +02:00
Even Rouault b158bbc7fc Database: update to EPSG 12.017
We currently skip operation EPSG:10953, 'CSRN2025 (ITRF2020) to CSRN2025 (NAD83 2011) (1)',
as this is a time-dependent Helmert transfomation between 2 static CRS,
which breaks our sanity checks. A following EPSG update will fix this.
2025-07-23 18:03:59 +02:00
SunBlackandKristian Evers 95b1764d18 Use correct path alias syntax on windows (#4546)
Co-authored-by: Kristian Evers <kristian@evers.dev>
2025-07-14 23:52:00 +02:00
Even Rouault 5571b7b737 Merge pull request #4545 from rouault/fix_cs_iau_polar
IAU2015 CRS: fix wrong code for coordinate system of North Polar and South Polar CRSs
2025-07-12 18:21:44 +01:00
Even Rouault 523ad5804c IAU2015 CRS: fix wrong code for coordinate system of North Polar and South Polar CRSs 2025-07-11 15:02:26 +02:00
Even Rouault 79d318f2bd Database: update to EPSG v12.015
also update consistency checks and code to make sure we deal properly
with new Helmert transformation EPSG:10905 "ETRS89/DREF91/2016 to Asse
2025 + Asse 2025 height (1)" whose source CRS is a geog3D CRS but target
is a compound CRS...
2025-07-11 12:17:05 +02:00
Even Rouault 36ff1542f8 Merge pull request #4540 from rouault/epsg_12_014
Database: update to EPSG 12.014
2025-07-06 14:14:56 +01:00
Even Rouault b786f363ec Database: update to EPSG 12.014
The main change is the improved metadata accuracy declaration for
"WGS 84 to EGM2008 height (1)" from 1 m to 0.113 m.

And also the mention to cdn.proj.org GTG grids for EGM96 and EGM2008 :-)
2025-07-05 13:18:13 +02:00
Even Rouault af01b94f07 Merge pull request #4536 from rouault/fix_4535
Fixes related to WKT import/export of DerivedGeodetic/GeographicCRS
2025-07-04 09:25:24 +01:00
Even Rouault a3cf3cad37 Merge pull request #4539 from rouault/fix_4537
Fix tolower()/toupper() implementation to not lead to undefined behavior
2025-07-04 09:25:08 +01:00
Even Rouault 127ba1343f Avoid undefined behavior with isgraph() use 2025-07-04 09:59:27 +02:00
Even Rouault 7ed4f9d68c WKT2:2019 export: export ID of BaseCRS of DerivedGeographic/GeodeticCRS (when there is not an ID at DerivedCRS level)
Related to refs #4535
2025-07-03 20:43:53 +02:00
Even Rouault 6aff55988f WKT import: add heuristics to figure out the baseCRS of a DerivedGeodeticCRS that is geocentric and using a Helmert geocentric deriving conversion is geocentric
Fixes #4535
2025-07-03 20:43:53 +02:00
Even Rouault f43c123c0d Fix tolower()/toupper() implementation to not lead to undefined behavior
Fixes #4537
2025-07-03 20:22:28 +02:00
Even Rouault 4c2d15eede Merge pull request #4532 from vmirgorod/feature/proj_geod_direct
Added proj_geod_direct for PJ trasformation object
2025-07-02 19:55:47 +01:00
Even Rouault c81772bc2d Merge pull request #4534 from rouault/db_new_nsgi_grids
Database: referene nl_nsgi_nllat2018.tif and nl_nsgi_bongeo2004.tif grids
2025-07-01 14:41:20 +01:00
Even Rouault 2a4d3b33d5 Database: referene nl_nsgi_nllat2018.tif and nl_nsgi_bongeo2004.tif grids
Those grids were added in PROJ-data 1.22 per https://github.com/OSGeo/PROJ-data/pull/137
but the proj.db changes were missing
2025-07-01 12:17:33 +02:00
Even Rouault e3b228f00b Merge pull request #4531 from rouault/fix_4529
gie: fix memory leak on non existing input file
2025-06-30 21:17:49 +01:00
Slava Mirgorod f6f966c66d Added proj_geod_direct for PJ object 2025-06-29 15:53:46 +03:00
Even Rouault 1c7e10d963 Merge pull request #4530 from rouault/fix_4528
opt_parse: avoid potential heap-buffer-overflow when parsing non-ASCII characters (affect cct and gie)
2025-06-28 13:36:27 +01:00
Even Rouault 37e03ffaa3 gie: fix memory leak on non existing input file
Fixes #4529

and add minimal tet_gie.yaml file
2025-06-28 14:35:58 +02:00
Even Rouault 432f21bd11 cct: fix memleak with -h, --version and failure with -I 2025-06-28 14:35:58 +02:00
Even Rouault 2493491947 opt_parse: avoid potential heap-buffer-overflow when parsing non-ASCII characters (affect cct and gie)
Fixes #4528
2025-06-28 00:16:53 +02:00
Even Rouault c1d8b687ba cct and gie: return error code 1 when argument parsing fails 2025-06-27 15:18:34 +02:00
Even Rouault dc0eff523a cct and gie: return error code 1 when argument parsing fails 2025-06-27 15:08:54 +02:00
Even Rouault db3a7e79a6 Merge pull request #4527 from rouault/fix_msvc_C5287
geodesic.c: fix MSVC C5287 warnings about 'operands are different enum types 'geod_mask' and 'captype''
2025-06-25 20:20:07 +01:00
Even Rouault e33b29eedf geodesic.c: fix MSVC C5287 warnings about 'operands are different enum types 'geod_mask' and 'captype'' 2025-06-25 16:43:06 +02:00
Even Rouault 40f8dec820 Merge pull request #4526 from rouault/fix_pyproj_1501
proj_trans_bounds(): fix 9.6.2 regression when going from long/lat crossing antimeridian to projected
2025-06-18 17:08:55 +01:00
Even Rouault da8b102c68 Merge pull request #4525 from rouault/refs_gdal_12583
WKT importer: better error message when BBOX is invalid (e.g south_lat > north_lat)
2025-06-18 17:08:47 +01:00
Even Rouault 6456f9e92b Merge pull request #4523 from rouault/fix_4522
Geostationary projection: speed up inverse spherical and ellipsoidal computation
2025-06-18 17:08:38 +01:00
Even Rouault d656da3434 proj_trans_bounds(): fix 9.6.2 regression when going from long/lat crossing antimeridian to projected
Fixes issues introduced by https://github.com/OSGeo/PROJ/pull/4513 where
we generate an output BBOX that is too large.

Fixes https://github.com/pyproj4/pyproj/issues/1501
2025-06-18 01:06:07 +02:00
Even Rouault c94e4664e2 WKT importer: better error message when BBOX is invalid (e.g south_lat > north_lat)
Refs https://github.com/OSGeo/gdal/issues/12583
2025-06-17 17:34:27 +02:00
Even Rouault b00563892a Geostationary projection: speed up inverse spherical computation
Before:
```
$ bin/bench_proj_trans --pipeline "+proj=pipeline +inv +step +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere" 137881.85 4490747.09
137881.85 4490747.09 -> 0.034807228056148 0.850471730911161
Duration: 677 ms
Throughput: 7.39 million coordinates/s
```

After:
```
$ bin/bench_proj_trans --pipeline "+proj=pipeline +inv +step +proj=geos +h=35785831.0 +lon_0=0 +ellps=sphere" 137881.85 4490747.09
137881.85 4490747.09 -> 0.034807228056148 0.850471730911161
Duration: 602 ms
Throughput: 8.31 million coordinates/s
```
2025-06-16 11:26:06 +02:00
Even Rouault 70a066c6be Geostationary projection: speed up inverse ellipsoidal computation
Fixes #4522

Before:
```
$ bin/bench_proj_trans --pipeline "+proj=pipeline +inv +step +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84" 137881.85 4490747.09
137881.85 4490747.09 -> 0.0349065842446029 0.855211334383648
Duration: 978 ms
Throughput: 5.11 million coordinates/s
```

After:
```
$ bin/bench_proj_trans --pipeline "+proj=pipeline +inv +step +proj=geos +h=35785831.0 +lon_0=0 +ellps=WGS84" 137881.85 4490747.09
137881.85 4490747.09 -> 0.0349065842446029 0.855211334383648
Duration: 668 ms
Throughput: 7.49 million coordinates/s
```
2025-06-16 11:21:03 +02:00
Even Rouault d87fcea05e Fix code comment 2025-06-10 18:21:51 +02:00
Even Rouault 2f93cd222c download.rst: update for 9.6.2 2025-06-06 14:27:17 +02:00
Even Rouault dfe99c271b news.rst: update 2025-06-06 14:27:17 +02:00
Even Rouault 82d8e183b6 NEWS.md: update for 9.6.2 2025-06-06 14:27:17 +02:00
Even Rouault 8879a1aa69 Merge pull request #4519 from rouault/db_esri_deprecated_fix
Database: change ESRI deprecated records back to their deprecated state
2025-06-04 08:18:34 +01:00
Even Rouault 320bf3fa5f Merge pull request #4518 from rouault/fix_gdal_12511
ProjectedCRS::identify(): more robust identification of old ESRI names using _IntlFeet
2025-06-04 08:18:15 +01:00
Even Rouault b12746ae91 Database: change ESRI deprecated records back to their deprecated state
Fixes https://github.com/OSGeo/PROJ-CRS-Explorer/pull/36#issuecomment-2935170928

During the ArcGIS Pro 3.5 database import, the import script wrongly
considered the new value 'codechange' as meaning not deprecated, which
resulted in deprecated CRS no longer being flagged as such.
2025-06-03 15:40:17 +02:00
Even Rouault 1dba65ee94 ProjectedCRS::identify(): more robust identification of old ESRI names using _IntlFeet
Fixe https://github.com/OSGeo/gdal/issues/12511
2025-06-03 15:40:05 +02:00
Even Rouault e084868e2c Update docs/source/spelling_wordlist.txt 2025-06-03 15:39:53 +02:00
Even Rouault a9556b921d Merge pull request #4516 from rouault/more_warnings
Enable -Wimplicit-fallthrough, -Wdeprecated-copy-dtor, -Wweak-vtables…
2025-06-03 13:18:23 +01:00
Kristian Evers c7f9b6f2a1 docs: Re-enable sphinxcontrib.spelling
This was commented out due to the extension not being available on MacOS
where the docs where build locally to check for issues in the RST-files.
2025-06-02 16:26:55 +02:00
Kristian Evers 2f51d313af Update docs for 9.6.1 release 2025-06-02 15:51:46 +02:00
Even Rouault dccc94fb66 Enable -Wimplicit-fallthrough, -Wdeprecated-copy-dtor, -Wweak-vtables, -Wdocumentation-unknown-command when possible 2025-06-01 13:48:46 +02:00
Even Rouault aed8544393 Merge pull request #4515 from rouault/fix_4514
Fix issue related to D_Unknown_based_on_WGS_84_ellipsoid datum name
2025-05-30 15:52:48 +01:00
Even Rouault 839aa740d9 Datum name comparison: better take into account Esri style D_ name prefixing
Fixes #4514
2025-05-29 20:12:56 +02:00
Even Rouault 71d62f1078 WKT import: normalize Esri style 'D_Unknown_based_on_WGS_84_ellipsoid' datum name to 'Unknown based on WGS 84 ellipsoid'
Fixes #4514
2025-05-29 20:02:48 +02:00
Even Rouault 5a089b0c4c Merge pull request #4513 from rouault/qgis_61318
proj_trans_bounds(): sample points within the source grid to avoid missing extent such as world-wide coverage from EPSG:4326 to ESRI:54099 (Spilhaus)
2025-05-28 15:48:14 +01:00
Even Rouault 7a3b3bcaa0 Code comment typo fix 2025-05-28 16:15:01 +02:00
Even Rouault 52007dc026 proj_trans_bounds(): sample points within the source grid to avoid missing extent such as world-wide coverage from EPSG:4326 to ESRI:54099 (Spilhaus)
Relates/fixes https://github.com/qgis/QGIS/issues/61318
2025-05-28 16:14:53 +02:00
Even Rouault c42922b7c9 proj_trans_bounds(): change a bit to be more natural looking
similar change for proj_trans_bounds_3D(), with a fix for an
invalid axis order swap when input is geocentric and output is lon/lat
ordered
2025-05-28 16:07:44 +02:00
Even Rouault e516424b0f Merge pull request #4512 from rouault/fix_qgis_61999
proj_trans_bounds(): avoid erroring out, in some cases, when PJ* object is directly constructed from a PROJ pipeline
2025-05-28 15:07:18 +01:00
Even Rouault 05389313ee proj_trans_bounds(): avoid erroring out, in some cases, when PJ* object is directly constructed from a PROJ pipeline
Refs https://github.com/qgis/QGIS/issues/61999
2025-05-26 22:37:19 +02:00
Even Rouault c927bb19df Merge pull request #4511 from rouault/epsg_12_013
Database: update to EPSG v12.013
2025-05-26 21:19:45 +01:00
Even Rouault a64a748701 Database: update to EPSG v12.013 2025-05-26 18:50:05 +02:00
Kristian Evers 2d8bb41896 Bump PROJ-data version to 1.22 in database metadata 2025-05-25 20:34:13 +02:00
Kristian Evers d8e202b01c Update CITATION.cff for 9.6.1 release 2025-05-25 20:32:31 +02:00
Kristian Evers 286d7848ca Update NEWS for 9.6.1 release 2025-05-25 20:31:17 +02:00
Even Rouault 14a4ab1708 Merge pull request #4509 from rouault/cppcheck_master_fixe
Make cppcheck master happy
2025-05-25 18:00:29 +01:00
Even Rouault ebc3a192a9 Make cppcheck master happy 2025-05-25 13:59:48 +02:00
Kristian Evers 1c9f43c299 Merge pull request #4507 from rouault/fix_4506
Fix Windows build when both EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES are set
2025-05-25 08:44:56 +02:00
Even Rouault 57b2538df9 Fix Windows build when both EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES are set
Fixes #4506
2025-05-25 00:50:37 +02:00
Even Rouault b2eda4380b Merge pull request #4500 from ag-pix4d/win-generate-pdbs
Add an option to ship PDB files
2025-05-22 10:51:02 +01:00
Kristian Evers a132ed5a77 Add grid alternatives for Danish DVR90->EVRF2019 grids (#4503) 2025-05-22 02:41:52 +02:00
Even Rouault 117da3b0db Merge pull request #4502 from Olexandr88/patch-2
chore(readme): add release badge
2025-05-21 18:07:17 +01:00
Olexandr88 d184732692 Update README.md 2025-05-21 20:01:24 +03:00
Even Rouault 38e5c9e3e6 Merge pull request #4501 from Olexandr88/patch-1
chore: added a badge and link to CodeQL
2025-05-21 17:51:52 +01:00
Olexandr88 fe82b66e1a Update README.md 2025-05-21 19:44:19 +03:00
Alexey Gribovskiy 262f7b50a4 Set EXPORT_PDB for Windows build 2025-05-21 16:56:23 +02:00
Alexey Gribovskiy ebf67f3a34 Add ship_pdb flag 2025-05-21 16:06:12 +02:00
Even Rouault 2f661d5985 Merge pull request #4499 from kbevers/lks-2020
Add grid alternative for lv_lgia_lks92to2020.tif
2025-05-21 14:29:01 +01:00
Kristian Evers 4f8df0c2c0 Add grid alternative for lv_lgia_lks92to2020.tif 2025-05-21 15:08:58 +02:00
Even Rouault 4eb540570f Merge pull request #4497 from kbevers/epsg12.012
Update EPSG to version 12.012
2025-05-21 12:24:08 +01:00
Kristian Evers 4bfcef99f6 Add basic manual to scripts/build_db.py 2025-05-21 11:30:36 +02:00
Kristian Evers 500bdb0ded Update EPSG to 12.012 2025-05-21 11:30:10 +02:00
Even Rouault 8b65d5b14e Merge pull request #4495 from rouault/epsg_12_009
Database: update to EPSG v12.009
2025-05-16 13:27:20 +01:00
Even Rouault 06f1b500b4 Database: update to EPSG v12.009 2025-05-15 17:52:18 +02:00
Even Rouault 1d9623eff3 show_useless_aliases.sql: hide expected duplicates (master only) 2025-05-15 17:52:09 +02:00
Even Rouault 247a4a1184 Merge pull request #4492 from rouault/fix_4491
createOperationsCompoundToGeog(): avoid bringing non-sensical transformations
2025-05-14 11:00:59 +01:00
Even Rouault f26bcc2b38 Merge pull request #4490 from rouault/alias_name_old_epsg
Database: add values from alias_name table that were removed in older EPSG releases, to improve recognizing old WKT strings
2025-05-14 11:00:50 +01:00
Even Rouault 8a467dd147 Merge pull request #4489 from rouault/database_esri_arcgis_pro_3_5
Database: update ESRI to ArcGIS Pro 3.5
2025-05-14 11:00:39 +01:00
Even Rouault 7262632a0c createOperationsCompoundToGeog(): avoid bringing non-sensical transformations
Fixes #4491
2025-05-13 22:01:09 +02:00
Even Rouault bab02db2de Database: add values from alias_name table that were removed in older EPSG releases, to improve recognizing old WKT strings
The process is to look at the diff of the alias_name table for each
update commit of the EPSG database (and going back before our first
update...) and finding removed lines.
2025-05-11 23:47:30 +02:00
Even Rouault 4259ec75ec Database: update ESRI to ArcGIS Pro 3.5 2025-05-11 20:18:13 +02:00
Even Rouault ca296bb942 CI OSX: skip autotools based post-installation test due to issue with m4 2025-05-11 20:17:53 +02:00
Even Rouault e3a27d2d4b Merge pull request #4487 from rouault/epsg_12_008
Database: update to EPSG v12.008
2025-05-07 10:48:00 +01:00
Even Rouault 2840822787 Database: update to EPSG v12.008 2025-05-06 15:45:58 +02:00
Even Rouault a83395650f Fix Coverity Scan warnings 2025-05-04 20:49:53 +02:00
Even Rouault 4113927322 Merge pull request #4484 from rouault/WKT_DEFININGTRANSFORMATION
WKT2 parser: recognize DEFININGTRANSFORMATION (but ignore it)
2025-04-30 20:18:47 +01:00
Even Rouault f9226e2424 WKT2 parser: recognize DEFININGTRANSFORMATION (but ignore it)
related to #4469
2025-04-28 23:42:40 +02:00
Even Rouault a80ccece35 Merge pull request #4479 from rouault/fix_4476
Database: fix duplicated entries with auxiliary database
2025-04-28 12:36:40 +01:00
Even Rouault 6c006da0ea Merge pull request #4477 from rouault/fix_4475
FileManager::open_resource_file(): honour known URLs from grid_altern…
2025-04-28 12:36:32 +01:00
Even Rouault 4d0abd6238 Merge pull request #4474 from jjimenezshaw/better-getGeoidModels
getGeoidModels: use vertical_crs.datum_code to get vcrss ...
2025-04-28 12:36:26 +01:00
Even Rouault e0e1c6e1ae Database: fix duplicated entries with auxiliary database
Fixes #4476

```
$ PROJ_AUX_DB=nsrs_proj.db bin/projinfo NSRS:SD_ABDN
PROJ.4 string:
+proj=tmerc +lat_0=43.2 +lon_0=-98.3 +k=1.00006 +x_0=5840730 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs

WKT2:2019 string:
PROJCRS["NATRF2022 / South Dakota Aberdeen",
    BASEGEOGCRS["NATRF2022",
        DYNAMIC[
            FRAMEEPOCH[2020]],
        DATUM["North American Terrestrial Reference Frame 2022",
            ELLIPSOID["GRS 1980",6378137,298.257222101,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["NSRS","NATRF2022_2D"]],
    CONVERSION["South Dakota Aberdeen (m)",
        METHOD["Transverse Mercator",
            ID["EPSG",9807]],
        PARAMETER["Latitude of natural origin",43.2,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",-98.3,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Scale factor at natural origin",1.00006,
            SCALEUNIT["unity",1],
            ID["EPSG",8805]],
        PARAMETER["False easting",5840730,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["easting (X)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["northing (Y)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Not known."],
        AREA["World."],
        BBOX[-90,-180,90,180]],
    ID["NSRS","SD_ABDN"]]

$ PROJ_AUX_DB=nsrs_proj.db bin/projinfo --list-crs --authority NSRS | grep "South Dakota" | grep -v SD_
NSRS:SD "NATRF2022 / South Dakota"
```
2025-04-27 21:18:48 +02:00
Even Rouault 1a45a728cf FileManager::open_resource_file(): honour known URLs from grid_alternatives that don't point to cdn.proj.org
Fixes #4475

With that fix:
```
$ echo 50 -70 0 | PROJ_NETWORK=ON PROJ_AUX_DB=nsrs_proj.db bin/cs2cs NSRS:NATRF2022_2D+NAPGD2022 NSRS:NATRF2022_3D -d 9
50.000000000	-70.000000000 -26.198699954
```

(adding a new test wasn't convenient as we don't currently have an entry
in grid_alternatives that do not point to cdn.proj.org and can be
accessed through Range requests)
2025-04-27 20:15:29 +02:00
Javier Jimenez Shaw 4ce14c4392 getGeoidModels: use vertical_crs.datum_code to get vcrss that uses different units 2025-04-27 18:21:07 +02:00
Even Rouault dc94ce8e3c Merge pull request #4473 from rouault/uint32_fix
Add missing include for uint32_t on Windows with gcc 15.1
2025-04-27 17:19:18 +01:00
Even Rouault 0122685ef6 Fix C++20 deprecation warning about implicit capture of this 2025-04-27 17:19:46 +02:00
Even Rouault e4db874ab5 CI: MSYS: build with CMAKE_CXX_STANDARD=20 to avoid warnings with gtest 2025-04-27 16:49:38 +02:00
Even Rouault cb0af23b82 Add missing include for uint32_t on Windows with gcc 15.1
Fixes https://github.com/OSGeo/PROJ/actions/runs/14691467666/job/41227338487
2025-04-27 14:38:59 +02:00
Even Rouault cb1ed3177d Merge pull request #4471 from gdt/fix/bare-isnan
c++ nit: Fix bare isnan() to std::isnan()
2025-04-27 12:15:35 +01:00
Greg Troxel 79ca52477d c++ nit: Fix bare isnan() to std::isnan()
and include cmath instead of math.h, because this is a C++ source
file.
2025-04-26 20:02:35 -04:00
Kristian Evers 62795ec369 Merge pull request #4468 from nsajko/projjson_rst_list_item_fix
PROJJSON specification: fix RST list syntax
2025-04-23 11:44:45 +02:00
Neven Sajko 7a856df7b8 PROJJSON specification: fix RST list syntax
https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#bullet-lists
2025-04-22 10:44:10 +02:00
Even Rouault 4d1bdab2c5 Merge pull request #4465 from rouault/fix_4464
createOperations(): for NAD83(CSRS)[x] to NAD83(CSRS)[y], do not go through NAD83
2025-04-17 10:23:01 +02:00
Even Rouault 200452a452 createOperations(): for NAD83(CSRS)[x] to NAD83(CSRS)[y], do not go through NAD83
Fixes #4464
2025-04-15 18:44:40 +02:00
Even Rouault e991d42084 Merge pull request #4462 from rouault/fix_c23_embed
CMake: avoid detection of C23 #embed on too old compilers
2025-04-14 10:19:16 +02:00
Even Rouault a48567a790 CMake: avoid detection of C23 #embed on too old compilers
Fixes #4461
2025-04-14 09:58:18 +02:00
Even Rouault 279f54c13b Merge pull request #4459 from rouault/epsg_12_007
Database: update to EPSG v12.007
2025-04-11 14:10:11 +02:00
Even Rouault f5dca5319e Database: update to EPSG v12.007 2025-04-10 16:15:43 +02:00
Even Rouault 313811d5e9 Merge pull request #4457 from jjimenezshaw/gsigeo2024
Add transformation for jp_gsi_jpgeo2024.tif (geoid model JPGEO2024 in…
2025-04-10 11:40:10 +02:00
Javier Jimenez Shaw 2dc4a07432 Add transformation for jp_gsi_jpgeo2024.tif (geoid model JPGEO2024 in Japan) 2025-04-10 10:33:06 +02:00
Even Rouault d423529014 Merge pull request #4454 from rouault/epsg_12_006
Database: update to EPSG v12.006
2025-04-09 18:14:41 +02:00
Even Rouault 52b7f31294 Database: update to EPSG v12.006 2025-04-09 17:36:29 +02:00
Even Rouault 337744530a Avoid cppcheck complain 2025-04-09 17:36:29 +02:00
jgpallero 0f8b1dbd7f Bug correction in Wagner VI parameters (#4449) 2025-04-05 13:16:32 +02:00
Kristian Evers 64c45bb9b3 Merge pull request #4451 from jidanni/patch-42
Update geod.rst to mention -f covers azimuths too
2025-04-04 07:51:30 +02:00
積丹尼 Dan Jacobson aedd4a29bb Update geod.rst to mention -f covers azimuths too 2025-04-04 13:05:56 +08:00
Even Rouault 21ac55dff3 proj_trans_bounds(): fix doc 2025-04-01 23:34:35 +02:00
Charles Karney c58aad1ad9 Implement uniform conversions between auxiliary latitudes (#4446)
This follows on the discussion in #4441.  In particular
latitudes.cpp now offers methods for converting between auxiliary
laitudes using trigonometric series whose coefficients are power series
in n.  The series are evaluated using Clenshaw summation and Horner's
method.  For small flattening, these often offer better accuracy than
the analytical expressions.

Now mlfn.cpp and tmerc.cpp use these conversions, simplifying the
implementations in these files.  In particular tmerc's functions gatg
and clens (which puzzlingly seemed to do exactly the same thing!) have
been removed.  tmerc's clenS (with a capital "S") stays -- it does
complex Clenshaw summation

Along the way, I've simplified pj_conformal_lat and
pj_conform_lat_inverse in latitudes.cpp.  For the former, I've
substituted a better conditioned formula; for the latter, I used the
existing (and more efficent) approach implemented in pj_sinhpsi2tanphi.

The computation of authalic latitudes in latitudes.cpp now uses the
series method if the flattening is small.  However some of the test
cases of the spillhaus projection use large flattening (is this really
necessary?); so I've had to retain the poorly conditioned analytical
formulas as well.

If we really wanted to support large flattening in this case, it's
necessary to evaluate the authalic latitude using Eqs. (52), (53), (54)
of "On auxiliary latitudes" (https://arxiv.org/abs/2212.05818) and using
Newton's method on the tangents of the angles for the inverse, using
Eq. (57).  I don't see the need for these at present.

I've simplified the interface somewhat: passing P instead of P->e,
P->onees, etc. separately; dropping "_coeffs" off the q function name
and the tagging of the inverse function name with "_exact".  I had hoped
to retire the external use of Snyder's q(sinphi).  However, some equal
area projections, e.g., the cylindrical version, really do need this
function instead of the authalic latitude directly.
2025-03-29 14:36:19 +01:00
Kristian Evers 0a142c395b Merge pull request #4443 from rouault/fix_4442
Add missing 'limits' and 'algorithm' includes
2025-03-22 13:41:39 +01:00
Even Rouault ff662169d1 Merge pull request #4441 from rouault/fix_4440
Implement 'exact' authalic latitude->geographic latitude and use it in +proj=aea/cea/laea/eqearth/healpix/rhealpix
2025-03-22 13:10:09 +01:00
Even Rouault 81bb66b489 Add missing 'limits' and 'algorithm' includes
and add CI test to check for that (borrowed from GDAL)

Fixes #4442
2025-03-22 13:09:07 +01:00
Even Rouault 58d3603bd1 latitudes.cpp: improve authalic implementation with @cffk comments A) 2025-03-21 19:30:45 +01:00
Even Rouault 895810a245 Implement 'exact' authalic latitude->geographic latitude and use it in +proj=aea/cea/laea/eqearth/healpix/rhealpix
Fixes #4440
2025-03-20 18:06:29 +01:00
Kristian Evers 024a11723f Merge pull request #4437 from kbevers/omerc-doc
Add note about unexpected behaviour of omerc
2025-03-20 07:21:56 +01:00
Kristian Evers 8847f0b041 Add note about unexpected behaviour of omerc
The mapping from geodetic to projected coordinates is not unique in all
cases for the ellipsoidal form of the projection. It doesn't seem like
we can fix it, so instead a word of caution is added to the docs.

Closes #1922
2025-03-19 22:15:54 +01:00
Even Rouault 208d643e7b Merge pull request #4434 from rouault/epsg_12_005
Database: update to EPSG v12.005
2025-03-19 21:33:37 +01:00
Even Rouault 53fef69e48 Database: update to EPSG v12.005 2025-03-18 12:06:10 +01:00
Even Rouault 4dc0a31bd3 Merge pull request #4435 from kbevers/spelling
Add new words to spellchecking ignore list
2025-03-18 12:05:25 +01:00
Kristian Evers 0f4f567b41 Add new words to spellchecking ignore list 2025-03-18 11:54:10 +01:00
Even Rouault 864adbde97 Merge pull request #4427 from rouault/fix_4425
Deal with South Orientated TMerc presented as regular TMerc but with Scale_Factor=-1
2025-03-16 14:04:22 +01:00
Kristian Evers 8b58501b09 Bump version numbers in preparation for 9.7.0 release 2025-03-15 09:55:56 +01:00
Kristian Evers b312d19454 Update docs for 9.6.0 2025-03-15 09:35:17 +01:00
Even Rouault a394ae789a Deal with South Orientated TMerc presented as regular TMerc but with Scale_Factor=-1
such as ESRI:102470

Fixes #4425
2025-03-14 17:45:33 +01:00
Kristian Evers 771248c787 Merge pull request #4422 from rouault/DEFAULT_EMBED_RESOURCE_FILES_fix
Build: make sure that BUILD_SHARED_LIBS is initialized before defining DEFAULT_EMBED_RESOURCE_FILES
2025-03-13 06:57:19 +01:00
Even Rouault 4ead47b7e9 Build: make sure that BUILD_SHARED_LIBS is initialized before defining DEFAULT_EMBED_RESOURCE_FILES
otherwise DEFAULT_EMBED_RESOURCE_FILES will be set to ON
2025-03-12 21:32:04 +01:00
Kristian Evers 4557d0a4cd Add recent fix to NEWS for 9.6.0 2025-03-11 11:50:40 +01:00
Even Rouault c5a266d8f6 Merge pull request #4416 from sebastic/bash-completion
Remove hashbang from bash completion.
2025-03-10 17:39:45 +01:00
Even Rouault 5e53d327f9 Merge pull request #4418 from jjimenezshaw/doc-all-images
[doc] Add 'List of all projection images' page to documentation
2025-03-10 17:38:58 +01:00
Even Rouault c47596f3bf Merge pull request #4419 from pjonsson/retry-ssl-error
Retry "SSL connection timeout"
2025-03-10 17:37:05 +01:00
Even Rouault 220a06942a projinfo-bash-completion.sh: add leading comment 2025-03-10 17:24:13 +01:00
Peter A. Jonsson f148be8b7d Retry "SSL connection timeout"
Building the GDAL image can fail with:

Downloading https://cdn.proj.org/de_lgvl_saarland_README.txt... (86 / 439)
Downloading https://cdn.proj.org/de_lgvl_saarland_SeTa2016.tif... (87 / 439)
Cannot open https://cdn.proj.org/de_lgvl_saarland_SeTa2016.tif: SSL connection timeout
Cannot download https://cdn.proj.org/de_lgvl_saarland_SeTa2016.tif

so add SSL connection timeout
to the list of things that get
a retry time.

Sibling of commit 72307126.
2025-03-10 13:49:48 +01:00
Javier Jimenez Shaw c131eb072d [doc] document how to run generate_all_images.py 2025-03-09 11:36:19 +01:00
Javier Jimenez Shaw bdce337e5a [dox] fix images for healpix rhealpix projections 2025-03-09 11:29:30 +01:00
Javier Jimenez Shaw 4db14a8cd9 [doc] Add 'List of all projection images' page to documentation 2025-03-08 23:38:21 +01:00
Bas Couwenberg 89c3ac1972 Remove hashbang from bash completion.
Completions are meant to be sourced, not executed.
2025-03-08 17:20:59 +01:00
Kristian Evers e2f043245e Update man-pages from Sphinx-docs 2025-03-08 15:55:50 +01:00
Kristian Evers ef0544bafc Update man-pages from Sphinx-docs 2025-03-08 15:55:50 +01:00
Kristian Evers d097ef9ad0 Adjust release date due to postponement 2025-03-08 15:55:50 +01:00
Kristian Evers 0fb0640053 Update CITATION year and release date 2025-03-08 15:55:50 +01:00
Kristian Evers 0442bce6db Update NEWS for 9.6.0 release 2025-03-08 15:55:50 +01:00
Kristian Evers 696c7fc31c Add script that generates a first draft of the release notes
Example:

    python scripts/releasenotes.py 9.6.0 <github_token>

This will output a NEWS-section based on the pull requests and issues
related to the version to be released.

Full disclosure, this script has been generated using an AI assistant as
I couldn't be bothered to learn how to interface with the GitHub REST
API. It seemingly produces a useful result so thanks to our AI
overloads.
2025-03-08 15:55:50 +01:00
Even Rouault 06dfcefb96 Merge pull request #4414 from rouault/fix_4397
proj_download_file(): invalidate in-memory caches related to downloaded file (for the current context)
2025-03-04 11:46:54 +01:00
Even Rouault 289e8bce4a proj_download_file(): invalidate in-memory caches related to downloaded file (for the current context)
Fixes #4397
2025-03-03 11:27:20 +01:00
Even Rouault 83d3123a1b Merge pull request #4413 from rouault/epsg_12_004
Database: update to EPSG v12.004
2025-03-03 08:53:41 +01:00
Even Rouault 168dcddf01 Database: update to EPSG v12.004 2025-03-02 22:48:39 +01:00
Even Rouault 6fe7bc524e Merge pull request #4412 from yurish/lgia-geoid-grid
Adding Latvia 2000 height transformation
2025-03-02 22:33:20 +01:00
Jurijs Ješkins cabdc3cd5c Fixing MD5 signature 2025-02-28 17:06:37 +02:00
Jurijs Ješkins 423c0cacd6 Adding Latvia 2000 height transformation 2025-02-28 16:45:18 +02:00
Kristian Evers c4d1d4ab8f Merge pull request #4410 from OSGeo/kbevers-patch-1
Fix +dx parameter in ITRF97 string
2025-02-22 18:52:34 +01:00
Kristian Evers 1957d0f530 Fix +dx parameter in ITRF97 string 2025-02-22 09:45:58 +01:00
Kristian Evers 6451989480 Merge pull request #4408 from jjimenezshaw/typo-itrf2014
Fix typo in parameter for ITRF97 in ITRF2014 file
2025-02-22 09:42:17 +01:00
Javier Jimenez Shaw 73e6b4e8b1 Fix typo in parameter for ITRF97 in ITRF2014 file 2025-02-22 08:55:16 +01:00
Even Rouault 1ba796ea79 Merge pull request #4404 from rouault/epsg_12_002
Database: update to EPSG v12.002
2025-02-20 10:17:45 +01:00
Even Rouault 3f30534c43 Database: update to EPSG v12.002 2025-02-20 00:04:14 +01:00
Even Rouault c09fa1b152 Merge pull request #4403 from rouault/fix_2564b59ed24674aa8c8c22bff6cba840ab0e527d
Fix recent regression in createOperationsGeogToVertFromGeoid() (master only, not for release notes)
2025-02-19 17:37:27 +01:00
Even Rouault f55133f9f7 Fix recent regression in createOperationsGeogToVertFromGeoid() (master only, not for release notes)
Fixes issue introduced in 2564b59ed2
2025-02-19 17:14:09 +01:00
Even Rouault e9c407a49e Merge pull request #4402 from rouault/export_esri_54099
Export ESRI:54099 WGS_1984_Spilhaus_Ocean_Map_in_Square as PROJ string
2025-02-19 10:46:39 +01:00
Even Rouault 69eaf881e8 Export ESRI:54099 WGS_1984_Spilhaus_Ocean_Map_in_Square as PROJ string,
and fix ESRI:54098 mapping to use +proj=spilhaus with +k_0=sqrt(2)

Fixes #1851
2025-02-19 09:39:54 +01:00
Javier Jimenez Shaw 85e7d8e7b2 Spilhaus: better use lon_0 and lat_0 2025-02-19 00:18:39 +01:00
Javier Jimenez Shaw 05f6183b55 Spilhaus projection 2025-02-17 13:17:53 +01:00
Even Rouault f40d911adf Merge pull request #4396 from rouault/engineering_crs
Database: add a engineering_datum and engineering_crs tables; import few related EPSG records
2025-02-16 20:14:21 +01:00
Even Rouault bfd48ce3c6 Database: add a engineering_datum and engineering_crs tables; import few related EPSG records 2025-02-16 19:48:03 +01:00
Kristian Evers 2bd03d9a26 Merge pull request #4399 from kbevers/update-nkg-euref-fin
NKG.sql: Add support for EUREF-FIN in Finish transformations
2025-02-14 11:13:56 +01:00
Kristian Evers 7243974b7d nkg.sql: Add direction of steps in concatenated operations 2025-02-13 21:31:01 +01:00
Kristian Evers 9672d4e18a NKG.sql: Add support for EUREF-FIN in Finish transformations
Recently the Finish national realization of ETRS89 was added to the EPSG
registry as it's own separate entity. This commits adds support for the
new EUREF-FIN CRS (EPSG:10689) in the NKG transformations. This is done
by duplicating the existing transformation entries for Finland and
modifying them to have EUREF-FIN as their end-point. This ensures
backwards compatibility for users that implemented the original approach
in their workflows.

The gist of it all is that in addition to the existing transformations

    NKG:ITRF2000_TO_FI and NKG:ITRF2014_TO_FI

two new ones have been added:

    NKG:ITRF2000_TO_FI_EUREF-FIN and NKG:ITRF2014_TO_FI_EUREF-FIN

Below a few examples are given, that verify that the old and newly added
transformations are equivalent, apart from their final target CRS.

First a demonstration of use of the transformations directly

```sh
export PROJ_DATA=data/
export PROJ_NETWORK=ON

echo 27 62 100 | bin/cct +proj=cart
 2675020.1042   1362990.8210  5608603.5251           inf

echo 2675020.1042 1362990.8210 5608603.5251 2025.0 | bin/cct -d 8 NKG:ITRF2000_TO_FI
2675020.75185987  1362990.35866198  5608603.16545234     2025.0000

echo 2675020.1042 1362990.8210 5608603.5251 2025.0 | bin/cct -d 8 NKG:ITRF2000_TO_FI_EUREF-FIN
2675020.75185987  1362990.35866198  5608603.16545234     2025.0000

echo 2675020.1042 1362990.8210 5608603.5251 2025.0 | bin/cct -d 8 NKG:ITRF2014_TO_FI
2675020.76927503  1362990.36127342  5608603.12613439     2025.0000

echo 2675020.1042 1362990.8210 5608603.5251 2025.0 | bin/cct -d 8 NKG:ITRF2014_TO_FI
2675020.76927503  1362990.36127342  5608603.12613439     2025.0000
```

and then using source and target CRS's. The invovled EPSG-codes are:

```
EPSG:7912:  ITRF2014    geodetic coordinates
EPSG:4937:  ETRS89      geodetic coordinates
EPSG:10689: EUREF-FIN   geodetic coordinates
```

```sh
echo 62 27 100 2025.0 | bin/cs2cs -d 8 EPSG:7912 EPSG:10689
61.99999528     26.99998642 99.82795259 2025

echo 62 27 100 2025.0 | bin/cs2cs -d 8 EPSG:7912 EPSG:10689 --area finland
61.99999528     26.99998642 99.82795259 2025

echo 62 27 100 2025.0 | bin/cs2cs -d 8 EPSG:7912 EPSG:4937
61.99999528     26.99998642 99.82795259 2025

echo 62 27 100 2025.0 | bin/cs2cs -d 8 EPSG:7912 EPSG:4937 --area finland
61.99999528     26.99998642 99.82795259 2025
```

As shown, the results are equivalent, which keeps existing workflows
happy.
2025-02-13 15:18:40 +01:00
Even Rouault 77bb0cc0d2 Merge pull request #4394 from rouault/proj_trans_bounds_3D
Add proj_trans_bounds_3D()
2025-02-06 15:11:50 +01:00
Even Rouault 832643930d Merge pull request #4393 from rouault/split_4D_api
Dispatch content of 4D_api.cpp into multiple .cpp files
2025-02-06 15:11:31 +01:00
Even Rouault 99a8b73bfa Add proj_trans_bounds_3D()
Fixes #4392

```c++
/** \brief Transform boundary, taking into account 3D coordinates.
 *
 * Transform boundary densifying the edges to account for nonlinear
 * transformations along these edges and extracting the outermost bounds.
 *
 * Note that the current implementation is not "perfect" when the source CRS is
 * geocentric, the target CRS is geographic, and the input bounding box
 * includes the center of the Earth, a pole or the antimeridian. In those
 * circumstances, exact values of the latitude of longitude of discontinuity
 * will not be returned.
 *
 * If one of the source or target CRS of the transformation is not 3D, the
 * values of *out_zmin / *out_zmax may not be significant.
 *
 * For 2D or "2.5D" transformation (that is planar component is
 * geographic/coordinates and 3D axis is elevation), the documentation of
 * proj_trans_bounds() applies.
 *
 * @param context The PJ_CONTEXT object.
 * @param P The PJ object representing the transformation.
 * @param direction The direction of the transformation.
 * @param xmin Minimum bounding coordinate of the first axis in source CRS
 *             (target CRS if direction is inverse).
 * @param ymin Minimum bounding coordinate of the second axis in source CRS.
 *             (target CRS if direction is inverse).
 * @param zmin Minimum bounding coordinate of the third axis in source CRS.
 *             (target CRS if direction is inverse).
 * @param xmax Maximum bounding coordinate of the first axis in source CRS.
 *             (target CRS if direction is inverse).
 * @param ymax Maximum bounding coordinate of the second axis in source CRS.
 *             (target CRS if direction is inverse).
 * @param zmax Maximum bounding coordinate of the third axis in source CRS.
 *             (target CRS if direction is inverse).
 * @param out_xmin Minimum bounding coordinate of the first axis in target CRS
 *             (source CRS if direction is inverse).
 * @param out_ymin Minimum bounding coordinate of the second axis in target CRS.
 *             (source CRS if direction is inverse).
 * @param out_zmin Minimum bounding coordinate of the third axis in target CRS.
 *             (source CRS if direction is inverse).
 * @param out_xmax Maximum bounding coordinate of the first axis in target CRS.
 *             (source CRS if direction is inverse).
 * @param out_ymax Maximum bounding coordinate of the second axis in target CRS.
 *             (source CRS if direction is inverse).
 * @param out_zmax Maximum bounding coordinate of the third axis in target CRS.
 *             (source CRS if direction is inverse).
 * @param densify_pts Recommended to use 21. This is the number of points
 *     to use to densify the bounding polygon in the transformation.
 * @return an integer. 1 if successful. 0 if failures encountered.
 * @since 9.6
 */
```
2025-02-05 11:15:32 +01:00
Even Rouault 17a5d80e1c proj_trans_bounds(): minor code cleanup 2025-02-05 11:14:46 +01:00
Even Rouault 2a4339eb9d Dispatch content of 4D_api.cpp into multiple .cpp files
No functional change, just moving code around.

4D_api.cpp has become quite large and a set of 'random' things, that
didn't correlate well with the '4D' naming. Some re-organization was needed.

Create following files:
- src/area.cpp: PJ_AREA related code
- src/coordinates.cpp: functions related to coordinate manipulation
- src/coord_operation.cpp: PJCoordOperation methods
- src/create.cpp: pj_create_internal() related stuff
- src/crs_to_crs.cpp: proj_create_crs_to_crs() and the like
- src/dist.cpp: distance related functions
- src/info.cpp: proj_info() and proj_pj_info()
- src/trans.cpp: proj_trans(), proj_trans_array(), proj_trans_generic(), proj_roundtrip()
- src/trans_bounds.cpp: proj_trans_bounds()

Some other functions also moved to more relevant existing source files.
2025-02-05 11:14:46 +01:00
Even Rouault 43831ab647 Merge pull request #4395 from rouault/epsg_11_031
Database: update to EPSG v11.031
2025-02-05 11:13:47 +01:00
Even Rouault 2844b302f0 Database: update to EPSG v11.031 2025-02-05 10:25:00 +01:00
Even Rouault 8268efca12 Merge pull request #4387 from rouault/epsg_11_029
Database: update to EPSG v11.029, and fix Geog3D_to_Geog2D_GravityRelatedHeight to work with CompoundCRS
2025-01-23 17:11:33 +01:00
Even Rouault 1624dcf05b Database: update to EPSG v11.029, and fix Geog3D_to_Geog2D_GravityRelatedHeight to work with compoundCRS 2025-01-22 17:55:53 +01:00
Even Rouault d82b32b817 Add support for 'Coordinate Frame rotation full matrix (geog3D)' 2025-01-22 17:39:18 +01:00
Even Rouault c34044742a Fix a few Coverity Scan warnings 2025-01-20 00:06:48 +01:00
Even Rouault e1733c3d97 Merge pull request #4386 from rouault/fix_4385
Inverse +proj=cass: fix non-convergence on inputs where easting=false_easting or northing=false_northing
2025-01-18 15:19:18 +01:00
Even Rouault 90ad86d9ef Inverse +proj=cass: fix non-convergence on inputs where easting=false_easting or northing=false_northing
Fixes #4385

For a unknown reason, a test in pj_generic_inverse_2d() was skipping
adding the iterative correction terms when the input was such that
easting=false_easting or northing=false_northing, causing the function
to do nothing useful and fail after its maximum allowed number of
iterations was reached. The remove tests might or might not have been
needed... Only future will tell...
2025-01-17 15:19:08 +01:00
Even Rouault c524721f7e Merge pull request #4383 from rouault/epsg_11_028
Database: update to EPSG v11.028
2025-01-17 10:39:58 +01:00
Even Rouault 1384b79263 Merge pull request #4382 from rouault/fix_gdal_11650
proj_clone(): properly propagate errorIfBestTransformationNotAvailable and other flags from source object
2025-01-17 10:39:49 +01:00
Even Rouault 942cc65b2c Merge pull request #4381 from rouault/gtiff_grid_name_improvement
Debugging/internals: append sub-grid index to grid name when opening a multi-grid TIFF file
2025-01-17 10:39:38 +01:00
Even Rouault 410971022b Database: update to EPSG v11.028 2025-01-16 19:55:13 +01:00
Even Rouault c6cca8e634 proj_clone(): properly propagate errorIfBestTransformationNotAvailable and other flags from source object
Fixes https://github.com/OSGeo/gdal/issues/11650
2025-01-15 22:39:18 +01:00
Even Rouault ad8bb71f2c Debugging/internals: append sub-grid index to grid name when opening a multi-grid TIFF file 2025-01-15 21:42:50 +01:00
Even Rouault 27cf3a9bc6 Merge pull request #4371 from rouault/projinfo_bash_completion
Add bash completion script for projinfo
2025-01-15 17:38:37 +01:00
Even Rouault 98dcc579ef Merge pull request #4379 from rouault/proj_geoidgrid_extent
createOperations(): use more appropriate operation when using a 'PROJ {grid_name}' geoid model, based on matching the vertical datum
2025-01-15 17:38:00 +01:00
Even Rouault 2564b59ed2 createOperations(): use more appropriate operation when using a 'PROJ {grid_name}' geoid model, based on matching the vertical datum
Helps when transforming from 'NAD83(2011) / Puerto Rico and Virgin Is. + "VIVD09 height + PROJ us_noaa_g2012bp0.tif' to NAD83(2011).
Without that fix, PROJ would use the EPSG record for the NAD83(2011) <--> PRVD02 height (Puerto Rico) to get the extent of
the transformation, instead of the one for NAD83(2011) <--> VIVD09 height (Virgin Islands), causing the
resulting global transformation to not be usable in practice.
2025-01-14 16:13:44 +01:00
Even Rouault b047dd2361 Add std::move() 2025-01-13 21:53:11 +01:00
Even Rouault 0224fd72ee pj_load_ini(): add std::move() 2025-01-13 21:52:16 +01:00
Even Rouault 05e34a013f ellps_ellps(): avoid potential memleak 2025-01-13 21:51:35 +01:00
Even Rouault 8070b61a61 Merge pull request #4377 from rouault/coverity_fixes
Coverity Scan fixes
2025-01-13 17:22:31 +01:00
Even Rouault 0e18acc88c Merge pull request #4378 from rouault/cppcheck_master_fix
Cppcheck master fixes
2025-01-13 17:22:22 +01:00
Even Rouault 3f91fd4286 typo fixes 2025-01-13 02:09:07 +01:00
Even Rouault 3b5f383293 CI: add a cppcheck master config (which may only fails on push, not pull requests) 2025-01-12 22:08:32 +01:00
Even Rouault 0b5659c2b9 Fixes to make cppcheck master happy 2025-01-12 21:52:09 +01:00
Even Rouault 26c35fd1ea pj_ctx: copy constructor: copy master-added native_ca member 2025-01-12 21:51:39 +01:00
Even Rouault b672c5238c Coverity Scan fixes 2025-01-12 21:19:50 +01:00
Even Rouault 84d1a093ce README.md: remove no longer relevant badges [ci skip] 2025-01-12 18:39:12 +01:00
Even Rouault abaf367de3 Merge pull request #4376 from rouault/cancel
HOWTO-RELEASE: 'cancel' no longer relevant social media
2025-01-12 15:28:20 +01:00
Even Rouault ec66d50f94 HOWTO-RELEASE: 'cancel' no longer relevant social media [ci skip] 2025-01-12 14:52:11 +01:00
Even Rouault 6754b7cbab Merge pull request #4375 from rouault/make_unique
Use std::make_unique<> instead of internal::make_unique<>
2025-01-11 03:41:06 +01:00
Even Rouault f30c6a4795 Merge pull request #4373 from rouault/EMBED_RESOURCE_DIRECTORY
Rename EMBED_GRIDS_DIRECTORY to EMBED_RESOURCE_DIRECTORY, and also embed .pol files
2025-01-09 16:37:45 +01:00
Even Rouault 53ed2e02d6 Use std::make_unique<> instead of internal::make_unique<> 2025-01-09 16:35:53 +01:00
Even Rouault cb98cb0fa4 Formatting fixes 2025-01-09 16:35:48 +01:00
Even Rouault 081d12a22a Merge pull request #4366 from rouault/cpp_17
Build: Update to C++17 version
2025-01-09 15:09:32 +01:00
Even RouaultandKristian Evers 0dd04bd2a0 RFC3: relax to allow updating programming language standard in minor versions. (#4369)
* RFC3: relax to allow updating programming language standard in minor versions.

* Further updates to RFC3

---------

Co-authored-by: Kristian Evers <kristian@evers.dev>
2025-01-09 15:09:13 +01:00
ca80a5d76a Add Airocean projection (formerly Dymaxion) (#4303)
Fixes #232

Co-authored-by: Even Rouault <even.rouault@spatialys.com>
Co-authored-by: Mike Taves <mwtoews@gmail.com>
2025-01-08 21:15:19 +01:00
Even Rouault 9bc1a6eb13 Merge pull request #4372 from rouault/epsg_11_027
Database: update to EPSG v11.027
2025-01-08 03:01:47 +01:00
Even Rouault f509b3f1f3 Rename EMBED_GRIDS_DIRECTORY to EMBED_RESOURCE_DIRECTORY, and also embed .pol files
(master only)
2025-01-07 22:09:48 +01:00
Even Rouault d21f370f8d Database: update to EPSG v11.027 2025-01-07 19:46:45 +01:00
Even Rouault d887cad4fc projinfo completion: also suggest appropriate vertical CRS 2025-01-07 19:36:44 +01:00
Even Rouault 45527039f3 Add bash completion script for projinfo
and install it in standard ${prefix}/share/bash-completion/completions directory

Demo:

```
source ./scripts/projinfo-bash-completion.sh
```

```
$ projinfo <TAB><TAB>
EPSG:      ESRI:      IAU_2015:  IGNF:      NKG:       NRCAN:     OGC:       PROJ:
```

```
$ projinfo -<TAB><TAB>
-3d                                        --boundcrs-to-wgs84                         --list-crs                                  --searchpaths
--accuracy                                  --c-ify                                     --main-db-path                              --show-superseded
--allow-ellipsoidal-height-as-vertical-crs  --crs-extent-use--grid-check                -o                                          --single-line
--area                                      --dump-db-structure                         --output-id                                 --spatial-test
--authority                                 --hide-ballpark                             --pivot-crs                                 --summary
--aux-db-path                               --identify                                  -q
--bbox                                      -k                                          --remote-data
```

```
$ projinfo -o <TAB><TAB>
all        PROJ       PROJJSON   SQL        WKT1:ESRI  WKT1:GDAL  WKT2:2015  WKT2:2019
```

```
$ projinfo "NAD83(2011) <TAB><TAB>
NAD83(2011)                                                                NAD83(2011) / New Mexico West
NAD83(2011) / Adjusted Jackson (ftUS)                                      NAD83(2011) / New Mexico West (ftUS)
NAD83(2011) / Alabama East                                                 NAD83(2011) / New York Central
[ ... snip ... ]
```

```
$ projinfo EPSG:43<TAB><TAB>
4322 -- WGS 72    4324 -- WGS 72BE  4326 -- WGS 84
```
2025-01-07 18:20:44 +01:00
Even Rouault 6258c6549c Merge pull request #4367 from rouault/fr_ign_RGM04versRGM23
Database: register grid fr_ign_RGM04versRGM23.tif
2025-01-07 14:31:29 +01:00
Even Rouault 3d8085aa84 Database: register grid fr_ign_RGM04versRGM23.tif
added in PROJ-data per https://github.com/OSGeo/PROJ-data/pull/132

Using Helmert transformation:
```
$ echo -12.82 45.16 0 | bin/cs2cs -d 8 RGM04 RGM23
-12.81999702	45.16000607 0.00000000
```

Using grid:
```
$ echo -12.82 45.16 0 | PROJ_DATA=data:/home/even/proj/PROJ-data/fr_ign bin/cs2cs -d 8 RGM04 RGM23
-12.81999723	45.16000619 0.00000000
```
2025-01-06 00:33:55 +01:00
Even Rouault 177f6f34b6 Merge pull request #4364 from rouault/etrf_to_etrf
Improve ETRFxxx to ETRFyyy, and WGS 84 (xxx) to WGS 84 (yyy)
2025-01-06 00:28:45 +01:00
Even Rouault 2743e42ca7 Merge pull request #4363 from rouault/fix_4362
Database: replicate EGM2008 grid transformation record to WGS 84 realizations
2025-01-06 00:28:36 +01:00
Even Rouault cdd7809e73 Build: Update to C++17 version
The immediate driver for this change is related when fetching GTest.
Currently we are stuck with GTest-1.12.1 because is the latest version
supporting C++11. Later versions require C++14.
However, GTest-1.12.1 has a CMakeLists.txt with
``cmake_minimum_required(VERSION 3.5)`` which causes the following
warning with modern CMake versions:
```
CMake Deprecation Warning at build/_deps/googletest-src/CMakeLists.txt:4 (cmake_minimum_required):
  Compatibility with CMake < 3.10 will be removed from a future version of
  CMake.
```
Updating to >= C++14 allows us to use GTest-1.15.2 which has a
``cmake_minimum_required(VERSION 3.13)``
2025-01-03 03:04:43 +01:00
Even Rouault 16b75c1cbc Move ParameterValue class members to a dedicated .cpp files to avoid false-positive from CSA 2025-01-03 03:04:43 +01:00
Even Rouault 0911ff3c69 Rework code a bit to avoid false positive CSA warnings in C++17 mode 2025-01-03 02:18:25 +01:00
Even Rouault d93fc9adc3 CI: update clang_static_analyzer to ubuntu-24.04 to avoid false positives 2025-01-03 01:15:10 +01:00
Even Rouault 5500ba73a9 Merge pull request #4365 from rouault/ci_other_checks
CI: update 'other_checks' to ubuntu-24.04
2025-01-02 23:20:13 +01:00
Even Rouault 52da535c1a Add test for ETRF2000-PL to ETRF2014 2025-01-02 20:47:49 +01:00
Even Rouault e3f0aaff15 CI: update 'other_checks' to ubuntu-24.04
It seems ubuntu-latest is progressively rolled out by GitHub to
be updated to ubuntu-24.04 (in my forks at least), and currently
'pip3 install cffconvert' fails on it.
2025-01-02 20:11:33 +01:00
Even Rouault 87d01c2211 Database: add concatenated operations for all WGS 84 (xxx) to WGS 84 (yyy) realizations 2025-01-02 19:59:37 +01:00
Even Rouault 72e4068507 createOperations(): more relevant ETRFxxxx to ETRFyyyy results 2025-01-02 19:54:06 +01:00
Even Rouault b769746910 createOperations(): fix 'WGS 84 (Gxxx) + EGM2008 height' to 'WGS 84 (Gyyy) + EGM2008 height' 2025-01-02 17:37:41 +01:00
Even Rouault b9b84c92e1 Database: replicate EGM2008 grid transformation record to WGS 84 realizations
Fixes #4362
2025-01-02 17:37:41 +01:00
Even Rouault 4bacf908f9 Merge pull request #4357 from rouault/concatenated_operation_step_direction
Database: add an optional step_direction column to the concatenated_operation_step table
2025-01-02 16:27:25 +01:00
Robrecht-VS 68ad9e8735 Added an option native_ca to proj.ini and an environment variable PROJ_NATIVE_CA to be able to configure curl to use the operating system CA store. (#4356)
Fixes #4338
2024-12-24 13:43:01 +01:00
Even Rouault 299c472fb5 Change 'step_direction' value 'inverse' to 'reverse' 2024-12-22 15:18:33 +01:00
Even Rouault 10781772e8 Database: add an optional step_direction column to the concatenated_operation_step table
and consequently bump database version structure to 1.5

Building a concatenated operation from its steps is a incredibly complex
logic, which requires:
- figuring out in which direction the step must be actually run
- set source/target CRS on conversions, that natively lack it, by
  propagating. This is done by propagating CRS from the neighbouring
  steps... when this is possible. If you chain directly too many conversions,
  we'll lack the information at some point. Hopefully for records we
  have, this is mostly just a theoretical concern (I believe, not
  totally sure...)
  All that is to satisfy consistency checks, that check that
  target_crs[op[n]] == source_crs[op[n+1]]. Although in some cases we do
  need to access the CRS. Typically for a map projection to know the
  ellipsoid shape. So the alternative would be to attach the ellipsoid
  shape as a parameter of a map projection (the good old +ellps
  parameter of PROJ.4 strings) rather than relying on the one of the base
  geographic CRS.
- sometimes insert an implicit Geographic<-->Geocentric conversion step
- other things I might not even suspect.

This change tries to slightly improve this by addressing the first issue
mentioned - figuring out the direction - by adding a step_direction column to the
concatenated_operation_step table. Obviously as currently the EPSG
dataset doesn't include such information (CC @RogerLott with which I've
recently discussed that issue), we must still allow a NULL value to mean
unknown. For the few records we maintain under our PROJ authority, we can
define it though. At least, this improves a bit the readability of our records.

While writing all this, and recalling code I had to write in past years
in the pipeline inference logic that need to synthetize intermediate CRS,
I'm strongly thinking to what you mentionned @busstoptaktik about the
limitations of the current model... Requiring that operation steps have
a CRS is a major practical annoyance.
2024-12-20 02:42:36 +01:00
Even Rouault 3421b04700 Database: bump PROJ_DATA.VERSION to 1.21 2024-12-17 18:06:42 +01:00
Even Rouault 8f04f84eea Merge pull request #4355 from jjimenezshaw/fi-geoids
Finnish geoid models in grid_alternatives.sql
2024-12-17 16:43:53 +01:00
Javier Jimenez Shaw 3959e8fb32 update md5 2024-12-17 15:26:40 +01:00
Javier Jimenez Shaw 90b615334b add Finnish geoid models to grid_alternatives.sql 2024-12-17 15:26:40 +01:00
Even Rouault e5e3a6bbab Merge pull request #4341 from rouault/GDA94_AHD_to_GDA2020_AVWS
createOperations(): fine tune for 'GDA94 + AHD height' to 'GDA2020 to AVWS height'
2024-12-17 15:08:44 +01:00
Even Rouault 067fe73abb Merge pull request #4353 from rouault/epsg_tin_shift
Take into account new EPSG methods 'Cartesian Grid Offsets by TIN Interpolation (JSON)' and 'Vertical Offset by TIN Interpolation (JSON)'
2024-12-17 14:46:43 +01:00
Even Rouault cc0a63c151 Merge pull request #4349 from rouault/EMBED_GRIDS_DIRECTORY
Add a CMake EMBED_GRIDS_DIRECTORY option to embed .tif/.json files in to libproj
2024-12-17 14:46:30 +01:00
Even Rouault e2129c5262 lib_proj.cmake: add a dependency to proj.db in the C23 code path 2024-12-17 02:17:23 +01:00
Even Rouault e7ef01b1de Take into account new EPSG methods 'Cartesian Grid Offsets by TIN Interpolation (JSON)' and 'Vertical Offset by TIN Interpolation (JSON)'
and remove custom transformations for Finland TIN base transformations
that were previously under the PROJ authority
2024-12-16 19:15:18 +01:00
Even Rouault deb31c9d3c AuthorityFactory::createCoordinateOperation(): consider accuracy = '999.0' as unknown 2024-12-16 19:15:16 +01:00
Even Rouault 387f442890 Merge pull request #4350 from rouault/epsg_11_024
Database: update to EPSG v11.025
2024-12-14 17:54:06 +01:00
Even Rouault 62754ba73f Database: update to EPSG v11.025 2024-12-14 13:09:45 +01:00
Even Rouault 48be4550cd Database: update to EPSG v11.024 2024-12-13 18:33:21 +01:00
Even Rouault 951962deb4 Merge pull request #4348 from rouault/fix_4347
Add support for 'Coordinate Frame rotation full matrix (geocen)' and …
2024-12-13 17:57:27 +01:00
Even Rouault 364972b45b Add a CMake EMBED_GRIDS_DIRECTORY option to embed .tif/.json files into libproj
and also generalize the existing EMBED_RESOURCE_FILES option to embed the ITRFxxxx
resource files.

```
.. option:: EMBED_GRIDS_DIRECTORY=<directory>

    .. versionadded:: 9.6

    Embed files from <directory> ending with .tif or .json in the PROJ library itself.

    The pointed directory can potentially be the full PROJ-data package (uncompressed).
    In that case, about 6 GB of free disk and 16 GB of RAM are required to build PROJ.

    When using this parameter, EMBED_RESOURCE_FILES must be set to ON.

    If the content of the directory changes, you need to run CMake again to
    update the list of files.
```
2024-12-13 15:38:53 +01:00
Even Rouault b572229544 Add support for 'Coordinate Frame rotation full matrix (geocen)' and 'Coordinate Frame rotation full matrix (geog2D)' methods
and import related records from EPSG.

Note that concatenated operation EPSG:10675 is not imported because
https://epsg.org/concatenated-operation_10675/BES2020-to-Saba-height-1.html is ill defined in EPSG 11.023
due to first step referencing BES2020 Saba geographic 2D (EPSG:10639), but source CRS of concatenated
operation referencing BES2020 Saba geographic 3D (EPSG:10638)

Fixes #4347
2024-12-11 18:43:53 +01:00
Even Rouault 14f508002a Merge pull request #4340 from rouault/PROJ_DB_SQL_EXPECTED_MD5_revision
PROJ_DB_SQL_EXPECTED_MD5: do not make it sensitive to PROJ_VERSION or…
2024-12-10 15:07:43 +01:00
Even Rouault a4ad891766 Merge pull request #4344 from rouault/METHOD_VERTICALGRID_ASC
Map EPSG method 'Vertical Offset by Grid Interpolation (asc)' to +proj=vgridshift
2024-12-10 15:07:24 +01:00
Even Rouault 17de573e32 Merge pull request #4345 from rouault/doc_service_provider
Doc: add a service provider page
2024-12-10 15:07:06 +01:00
Even Rouault d651a4fd8b Doc: add a service provider page
Copy&paste s/GDAL/PROJ/ adaptation from https://gdal.org/en/stable/community/service_providers.html
Only Spatialys listed as core contributor for now
2024-12-09 19:55:56 +01:00
Even Rouault cf2ee49d75 Map EPSG method 'Vertical Offset by Grid Interpolation (asc)' to +proj=vgridshift
Fixes #4342

Note that currently none of the .asc grids are in PROJ-data. Most of the
ones registered in the EPSG dataset are for EVRF2019 heights and are
managed by Euref. My past attempts of getting an open data license for
the grid from Euref have not been successful.
2024-12-09 15:17:39 +01:00
Even Rouault 2f38bbbc0a createOperations(): fine tune for 'GDA94 + AHD height' to 'GDA2020 to AVWS height' 2024-12-09 00:41:33 +01:00
Even Rouault 9782de4f41 PROJ_DB_SQL_EXPECTED_MD5: do not make it sensitive to PROJ_VERSION or other records in the metadata table
The intent was actually already to avoid making the md5sum sensitive to
PROJ_VERSION changes, but this was broken. Generalize that also to other
records in the metadata table, such as PROJ_DATA.VERSION, to simplify
the release process.
2024-12-07 14:51:37 +01:00
Even Rouault a33372b0cf Merge pull request #4339 from rouault/epsg_11_023
Database: update to EPSG v11.023, and related changes
2024-12-07 14:00:57 +01:00
Even Rouault 1fa2b337c4 Merge pull request #4337 from rouault/fix_4335
createOperations(): do Helmert transformation in 2D when one of source or target CRS is compound
2024-12-07 14:00:50 +01:00
Even Rouault 8946128fdb Database: update to EPSG v11.023 2024-12-05 22:04:53 +01:00
Even Rouault 4403aa0516 Take into account renaming of 'Geoid undulation' to 'Geoid height' parameter 2024-12-05 22:04:52 +01:00
Even Rouault 5334e3df3e Add support to map EPSG methods 'Geographic3D to GravityRelatedHeight' and 'Geographic3D to Geog2D+GravityRelatedHeight' (used for Saba Island) to PROJ +proj=affine +z_off 2024-12-05 21:36:42 +01:00
Even Rouault c35c8aeec5 exportToProj of 'Geocentric translation by Grid Interpolation (IGN)': make check of interpolation CRS robust to axis order difference in preparation for EPSG v11.023 update 2024-12-05 21:34:52 +01:00
Even Rouault 6d7c8c24b6 Merge pull request #4336 from mwtoews/tranverse-typos
Fix typo Tranverse->Transverse and many other fixes
2024-12-05 19:57:52 +01:00
Even Rouault b4c0550511 createOperations(): do Helmert transformation in 2D when one of source or target CRS is compound
Fixes #4335
2024-12-04 23:46:49 +01:00
Mike Taves 282e7fa7bc Fix typo Tranverse->Transverse and many other fixes 2024-12-05 11:29:32 +13:00
Even Rouault 2dc4914f08 Merge pull request #4334 from rouault/createFromPROJString_optims
createFromPROJString: avoid repeated openings of proj.db and proj.ini and lookup of 'epsg'
2024-12-02 14:54:05 +01:00
Even Rouault 7fbd2ceca8 Merge pull request #4333 from rouault/proj_trans_bounds_to_compound_crs
proj_trans_bounds(): make it work when target CRS is a CompoundCRS
2024-12-02 14:53:55 +01:00
Even Rouault 810afa0dce Merge pull request #4332 from wonder-sk/patch-1
Add Mergin Maps to PROJ users
2024-12-02 14:53:39 +01:00
Even Rouault dc289adeef Merge pull request #4331 from rouault/projjson_projected_crs_base_crs_type
PROJJSON export: for a Projected CRS, add an explicit type=GeographicCRS/GeodeticCRS members to the base_crs member
2024-12-02 14:53:21 +01:00
Kristian Evers 6a1e2dc5c8 Spell check: Allow 'Wdocumentation' as it is used in NEWS.rst 2024-12-01 12:50:07 +01:00
Kristian Evers 13608fef05 Update docs for 9.5.1 release 2024-12-01 12:36:00 +01:00
Even Rouault 9ab0f640fe pj_open_file(): cache result in PJ_CONTEXT structure
Helps marginally for https://github.com/MapServer/MapServer/issues/7189
2024-11-28 23:03:57 +01:00
Even Rouault c4b29f688c createFromPROJString: avoid creating a temporary PROJ context to limit number of proj.db openings
Helps marginally for https://github.com/MapServer/MapServer/issues/7189
2024-11-28 23:03:15 +01:00
Even Rouault d1fa64ff3e proj_trans_bounds(): make it work when target CRS is a CompoundCRS 2024-11-28 21:58:34 +01:00
Kristian Evers 911150486f Make sure to mention the correct EPSG version in NEWS
Version 10.022 was overlooked in the first attemp.

[skip ci]
2024-11-27 19:40:01 +01:00
Martin Dobias ca32395d42 Add Mergin Maps to PROJ users 2024-11-27 15:00:52 +01:00
Even Rouault 17fe008a83 PROJJSON export: for a Projected CRS, add an explicit type=GeographicCRS/GeodeticCRS members to the base_crs member
This can make consumption/validation of PROJJSON easier. This doesn't
affect forward/backward compatibility as the importer is tolerant about
presence or absence of base_crs.type, and the schema too.
2024-11-26 17:38:18 +01:00
Kristian Evers d0f0341b90 Merge pull request #4330 from rouault/HOWTO-RELEASE_PROJ_DB_SQL_EXPECTED_MD5
HOWTO-RELEASE.md: add a step to update PROJ_DB_SQL_EXPECTED_MD5 when version number is changed
2024-11-26 16:17:39 +01:00
Even Rouault 8f44ebed1f HOWTO-RELEASE.md: add a step to update PROJ_DB_SQL_EXPECTED_MD5 when version number is changed 2024-11-26 15:13:30 +01:00
Kristian Evers 86130c155a Update NEWS for 9.5.1 release 2024-11-26 08:43:02 +01:00
Even Rouault 10b0febf75 Merge pull request #4328 from rouault/fix_wkt1_esri_export_of_Cylindrical_Equal_Area
WKT1 ESRI export: fix wrong mapping of Lambert Cylindrical Equal Area to Behrmann
2024-11-25 20:16:49 +01:00
Even Rouault e0bd19659e WKT1 ESRI export: fix wrong mapping of Lambert Cylindrical Equal Area to Behrmann 2024-11-23 13:39:00 +01:00
Even Rouault 2d430667ce Change to create a 'stable' branch rather than a tag 2024-11-18 14:58:36 +01:00
Even Rouault 28f43005e0 Doc: add custom robots.txt 2024-11-18 14:58:36 +01:00
Even Rouault 5af093da62 Merge pull request #4324 from rouault/auto_tag_stable_HOWTO_RELEASE
Update HOWTO-RELEASE.md regarding auto_tag_stable.yml
2024-11-18 12:08:01 +01:00
Even Rouault 25ee5a5f00 Merge pull request #4326 from OSGeo/backport-4323-to-master
[Backport master] [9.5 branch ] Add .github/workflows/auto_tag_stable.yml
2024-11-18 12:07:54 +01:00
Even Rouault e8856d3ddb auto_tag_stable.yml: run git config 2024-11-18 11:54:39 +01:00
Even Rouault 12fcf290d0 auto_tag_stable.yml: try tuning to trigger a RtD build 2024-11-18 11:54:38 +01:00
Even Rouault 32b27e1878 Add .github/workflows/auto_tag_stable.yml
This workflow automatically updates and pushes the 'stable' tag
when commits are pushed to the branch pointed by
https://github.com/OSGeo/PROJ/settings/variables/actions/STABLE_BRANCH
2024-11-18 10:22:00 +00:00
Even Rouault bb24e728cc HOWTO-RELEASE.md: remove lines about RtD changes no longer needed 2024-11-16 18:32:53 +01:00
Even Rouault c936171f0e Merge pull request #4322 from seanm/Werror-pthread
Removed leftover setting of CMAKE_REQUIRED_FLAGS
2024-11-16 15:49:32 +01:00
Even Rouault 7824c19c69 Update HOWTO-RELEASE.md regarding auto_tag_stable.yml
Update the procedure to update the workflow that automatically refreshes the "stable" tag from commits in the current release branch.
2024-11-16 15:45:08 +01:00
Sean McBride a759224515 Removed leftover setting of CMAKE_REQUIRED_FLAGS
Back in 88d91f709c I removed a `check_c_source_compiles` to detect some pthread stuff and converted to std::mutex instead.

This stuff I believe I should have removed back then too.

The -Werror caused a problem in VTK, which still has the `check_c_source_compiles`, because a totally unrelated warning made the try-compile fail when it should have passed.
2024-11-14 16:22:32 -05:00
Even Rouault 863a75eed7 Merge pull request #4320 from rouault/fix_4319
Optimization: createOperations(): avoid database lookups for CRS (typically PROJ strings) using unknown datums
2024-11-14 11:36:24 +01:00
Even Rouault f37e6b988c Merge pull request #4318 from rouault/smarter_match_by_name
createObjectsFromName(): be more tolerant about N/S vs North/South, absence of zone or height
2024-11-11 20:59:31 +01:00
Even Rouault 38d215bd1d Optimization: createOperations(): avoid database lookups for CRS (typically PROJ strings) using unknown datums
Fixes #4319

With that improvement, the runtime of the following snippet goes from
25.4 second to 0.9 second:
```c
    for(int i = 0; i < 2000; ++i)
    {
        PJ_CONTEXT *C = proj_context_create();
        PJ *P = proj_create_crs_to_crs(C,
           "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs",
           "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs", NULL);
        proj_destroy(P);
        proj_context_destroy(C);
    }
```
2024-11-11 20:17:04 +01:00
Even Rouault e25f8113c2 Add a UNKNOWN_BASED_ON constant 2024-11-11 20:17:04 +01:00
Even Rouault 09c2346661 DatabaseContext::getName(): add a memory cache 2024-11-11 19:52:35 +01:00
Even Rouault 8052252697 Add DatabaseContext::getQueryCounter() 2024-11-11 19:52:35 +01:00
Even Rouault 09e54a96e4 createObjectsFromName(): be more tolerant about N/S vs North/South, absence of zone or height
We want the following matches to be possible:

user entry            official name
------------------    ----------------
EGM96                 EGM96 height
WGS84 UTM31 north     WGS 84 / UTM zone 31N
2024-11-10 14:22:05 +01:00
Even Rouault 9f2289cfdc Merge pull request #4315 from rouault/hungarian_grids
Database: hu_bme Hungarian grids added
2024-11-08 17:11:16 +01:00
Even Rouault d71db11945 Database: update PROJ_DB_SQL_EXPECTED_MD5 2024-11-08 14:20:07 +01:00
Zoltan Siki 6cda60105a Database: hu_bme Hungarian grids added 2024-11-08 14:19:42 +01:00
Even Rouault 606e138617 Merge pull request #4312 from rouault/epsg_11_022
Database: update to EPSG v11.022
2024-11-05 23:32:45 +01:00
Even Rouault 830b390645 Update PROJ_DB_SQL_EXPECTED_MD5 2024-11-05 19:41:15 +01:00
Even Rouault 6ab8ec8ee0 Database: update to EPSG v11.022 2024-11-05 19:41:06 +01:00
Even Rouault 495c3ad760 Merge pull request #4310 from rouault/esri_arcgis_pro_3_4
Database: update ESRI to ArcGIS Pro 3.4
2024-11-05 19:35:52 +01:00
Even Rouault d8c86b52e4 Update PROJ_DB_SQL_EXPECTED_MD5 2024-11-04 23:56:09 +01:00
Even Rouault 25b4119077 Database: update ESRI to ArcGIS Pro 3.4 2024-11-04 23:55:58 +01:00
Even Rouault 48574191a4 Merge pull request #4290 from rouault/remove_include_ctest
CMake: use enable_testing() instead of include(CTest)
2024-11-04 22:48:48 +01:00
Even Rouault 64164dee4f Merge pull request #4301 from jjimenezshaw/thueringen
Add grid alternative for de_tlbg_thueringen_NTv2gridTH.tif
2024-11-03 15:30:51 +01:00
Even Rouault 9e5d951385 Update PROJ_DB_SQL_EXPECTED_MD5 2024-11-03 14:34:26 +01:00
Even Rouault 14a79de1fa Database: update PROJ_DATA.VERSION to 1.20 2024-11-03 14:33:06 +01:00
Even Rouault a0201cbc1c CI: fix Conda builds 2024-11-02 02:48:19 +01:00
Even Rouault 278757c209 Merge pull request #4306 from OSGeo/dependabot/github_actions/mamba-org/setup-micromamba-2
Bump mamba-org/setup-micromamba from 1 to 2
2024-11-01 21:08:03 +01:00
dependabot[bot] 4582c5a7fd Bump mamba-org/setup-micromamba from 1 to 2
Bumps [mamba-org/setup-micromamba](https://github.com/mamba-org/setup-micromamba) from 1 to 2.
- [Release notes](https://github.com/mamba-org/setup-micromamba/releases)
- [Commits](https://github.com/mamba-org/setup-micromamba/compare/v1...v2)

---
updated-dependencies:
- dependency-name: mamba-org/setup-micromamba
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-01 19:09:32 +00:00
Even Rouault 4d0838578b Merge pull request #4302 from rouault/fix_pyproj_705
Fail consistently on network error and grid transformations
2024-11-01 18:57:35 +01:00
Even Rouault 17b2c2b58f Defered grid loading: do not try to re-open a grid that previously failed to open from the same PJ* instance 2024-11-01 16:10:35 +01:00
Even Rouault ddfb7e7f50 Merge pull request #4304 from rouault/fix_Wshadow
Fix -Wshadow warnings between parammappings.cpp and singleoperation.cpp with unity builds
2024-11-01 15:30:58 +01:00
Even Rouault 909a675f81 Fix -Wshadow warnings between parammappings.cpp and singleoperation.cpp with unity builds 2024-11-01 14:48:41 +01:00
Even Rouault 99f89764b0 Fail consistently on network error and grid transformations
Currently when we need to use a remote grid that can't be opened, we
return HUGE_VAL coordinates values and a proj_errno = PROJ_ERR_OTHER_NETWORK_ERROR,
(I guess) as expected... But if we do following proj_trans() calls on the same
transformation object, the grid transformation is ignored and we
fallback to other methods (Helmert, ballpark, etc.).
Fix that by consistently returning the same error values as the initial
failed call.

Fixes https://github.com/pyproj4/pyproj/issues/705
2024-11-01 00:07:26 +01:00
Javier Jimenez Shaw d5e1204e38 Add grid alternative for de_tlbg_thueringen_NTv2gridTH.tif 2024-10-31 18:49:17 +01:00
Even Rouault de73f2416a Merge pull request #4297 from rouault/epsg_11_021
Database: update to EPSG v11.021
2024-10-30 13:39:21 +01:00
Even Rouault 3601b8d6a5 Merge pull request #4296 from dbs4261/patch-1
Fixed sql_filelist.cmake relative path issue
2024-10-30 13:39:12 +01:00
Even Rouault 2e827c7b36 Database: update to EPSG v11.021 2024-10-30 02:18:37 +01:00
Daniel Simon a20aa4af4c Fixed sql_filelist.cmake relative path issue
`CMAKE_CURRENT_SOURCE_DIR` is relative to the file that includes `sql_filelist.cmake` not relative to `sql_filelist.cmake` itself. This allows running the module from other portions of a cmake script, for example in a consuming project with FetchContent.
2024-10-29 15:50:45 -07:00
Even Rouault b2ae2aec73 rfc-8.rst: fix spelling warnings 2024-10-29 02:45:22 +01:00
Even Rouault 36328ee38f Merge pull request #4289 from rouault/proj_factors_perf_enhancements
proj_factors(): enhance speed when called repeatedly on same compound or projected CRS
2024-10-28 15:59:38 +01:00
Even Rouault 252b13c2aa Add RFC8 text: Embedding resource files into libproj (#4274) 2024-10-28 14:57:40 +01:00
Even Rouault 463d104a55 Merge pull request #4265 from rouault/embed
Add CMake options EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES for proj.db and proj.ini embedding
2024-10-28 14:56:05 +01:00
Even Rouault 4ada7ae5d3 Merge pull request #4293 from jjimenezshaw/sterea-k0
[doc] add k_0 to sterea projection
2024-10-27 10:28:13 +01:00
Javier Jimenez Shaw d6a29bb938 [doc] add k_0 to sterea projection 2024-10-27 01:38:09 +02:00
Even Rouault 0f13d87b2c Merge pull request #4291 from agiudiceandrea/patch-1
Doc: fix typo in Peirce Quincuncial projection
2024-10-25 22:45:47 +02:00
Andrea Giudiceandrea da0356d3c4 Doc: fix typo in Peirce Quincuncial projection 2024-10-25 22:43:06 +02:00
Even Rouault a67091e21b CMake: use enable_testing() instead of include(CTest)
According to Craig Scott in https://discourse.cmake.org/t/is-there-any-reason-to-prefer-include-ctest-or-enable-testing-over-the-other/1905/2 ,
using include(CTest) adds unnecessary clutter that is only needed for
dashboard submission. enable_testing() is enough otherwise

"Port" of https://github.com/OSGeo/shapelib/pull/162
2024-10-25 21:21:10 +02:00
Even Rouault 7e945f807b proj_factors(): enhance speed when called repeatedly on same compound or projected CRS
by caching internal objects within internal state of provided P
2024-10-25 13:12:45 +02:00
Even Rouault 01194d8767 Merge pull request #4287 from ldesousa/patch-1
Corrects ISEA projection name in 9.5 release notes
2024-10-23 19:42:54 +02:00
Luís de Sousa aa57b6249a Corrects ISEA projection name in 9.5 release notes 2024-10-23 17:44:07 +01:00
Even Rouault 13c065a61d Merge pull request #4282 from rouault/fix_4281
Database: ingest deprecated ESRI names to be able to better import old WKT ESRI
2024-10-22 14:50:45 +02:00
Even Rouault 98974da7b7 Merge pull request #4280 from rouault/fast_proj_db_build
Speed-up dramatically proj.db build time.
2024-10-22 14:49:37 +02:00
Even Rouault a6f5fa7703 Database: ingest deprecated ESRI names to be able to better import old WKT ESRI
Fixes #4281
2024-10-18 19:14:24 +02:00
Even Rouault 842240d67b Speed-up dramatically proj.db build time.
Current proj.db build time is typically 50 to 60 seconds (and up to 7.5
hours on arm64 cross-compilation with full emulation!). Most of it is
due to running consistency checks. Those checks actually only need to run
once each time when we update the content of the database. When skipping
them, the build time is cut to 3 seconds or so.
So in data/CMakeLists.txt, let keep track of an expected md5sum
resulting from the concatenation of the data/sql/*.sql files. When
building proj.db, we check if the got and expected md5sum match. If they
do build proj.db by inserting the consistency check triggers after
having inserted data record. If there's a mismatch, do a one time build
with the triggers inserted before the data records, check that proj.db
builds fine with that, and if so, emit a CMake error message indicating
to the user that they must update the PROJ_DB_SQL_EXPECTED_MD5 variable
in data/CMakeLists.txt with the provided value. Next runs will go
through the fast build path, until content is updated again.
2024-10-16 23:18:35 +02:00
Even Rouault 54a7662dbc Merge pull request #4275 from rouault/epsg_11_018
Database: update to EPSG v11.019
2024-10-13 11:41:15 +02:00
Even Rouault 97da11b6b7 Null VerticalCRS to VerticalCRS: optimize as +proj=noop instead of +proj=geogoffset +dh=0 2024-10-10 23:36:41 +02:00
Even Rouault 8b891db1e8 Database: update to EPSG v11.019 2024-10-10 23:36:41 +02:00
Even Rouault 0a14c19a51 Also embed proj.ini if EMBED_RESOURCE_FILES=ON 2024-10-10 14:30:14 +02:00
Even Rouault 8c143c6ea9 Doc: document EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES 2024-10-10 14:30:14 +02:00
Even Rouault 99d146b408 cmake/FileEmbed.cmake: improve code 2024-10-10 14:30:14 +02:00
Even Rouault 243745fbd3 CI: test -DEMBED_RESOURCE_FILES=ON 2024-10-10 14:30:14 +02:00
Even Rouault 36b84d7507 Make EMBED_RESOURCE_FILES work with non-C23 compilers 2024-10-10 14:30:14 +02:00
Even Rouault a29c62e602 memvfs.c: make it read-only 2024-10-10 14:30:14 +02:00
Even Rouault 2b2ecbb3e5 memvfs: avoid uintptr->ptr cast which is not compatible of CHERI architectures 2024-10-10 14:30:13 +02:00
Even Rouault 5c811d2f11 memvfs: make it work with 'projinfo --list-crs' or 'cct "this is a bogus CRS meant to trigger a syntax error in proj_create"'
Other changes in SQLiteHandle so that ATTACH DATABASE properly works
2024-10-10 14:30:13 +02:00
Even Rouault 108787c343 Add EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES options 2024-10-10 14:30:13 +02:00
Even Rouault 49906f73a3 Merge pull request #4270 from rouault/sphinx_rtd_theme_3_0_0
Doc: use 'version_selector' instead of 'display_version' which is deprecated by sphinx-rtd-theme 3.0.0
2024-10-09 16:35:24 +02:00
Even Rouault eb25d7154c Doc: conf.py: use correct 'html_css_files' property 2024-10-07 16:04:36 +02:00
Even Rouault 58a7a14887 Doc: use 'version_selector' instead of 'display_version' which is deprecated by sphinx-rtd-theme 3.0.0 2024-10-07 16:04:35 +02:00
Even Rouault 4659ad1552 Merge pull request #4266 from rouault/fix_ci_fuzz_pr_4265
WKT importer: fix nullptr dereference on invalid VERTCS[]
2024-10-05 14:39:59 +02:00
Even Rouault 702847d729 Merge pull request #4267 from mohawk2/patch-1
Omit trailing blank line in `proj_create_crs_to_crs` portion of C quickstart
2024-10-04 15:12:09 +02:00
mohawk2 bc6d063c4a Omit trailing blank line in proj_create_crs_to_crs portion of C quickstart 2024-10-04 08:08:48 +00:00
Even Rouault e3b6bb2a55 WKT importer: fix nullptr dereference on invalid VERTCS[]
Was spotted by cifuzz in run https://github.com/OSGeo/PROJ/actions/runs/11166711328?pr=4265
2024-10-03 20:02:51 +02:00
Even Rouault 0134c14505 Merge pull request #4263 from rouault/clang_19_warnings
Fix clang-19 'warning: empty paragraph passed to '@throw' command [-Wdocumentation]'
2024-10-03 14:27:41 +02:00
Even Rouault 8d37366e30 Fix clang-19 'warning: empty paragraph passed to '@throw' command [-Wdocumentation]'
clang-19 -Wdocumentation is super pedantic and requires an explanation
for why we throw exceptions. You're so demanding clang-19! We are kind
enough to mention we throw... Doxygen doesn't even require us to justify
the circumstances in which we have to do that. Oh well, let's please you
to get peace back...
2024-10-03 00:23:59 +02:00
Even Rouault 0e2cb56b8d test_projinfo.yaml: update expected results (master only change) 2024-09-29 20:55:13 +02:00
Even Rouault d19ab643b9 Merge pull request #4255 from rouault/projinfo_time_dependent
projinfo: display whether an operation is time-dependent
2024-09-27 17:55:35 +02:00
Even Rouault 4297e098b3 Merge pull request #4259 from rouault/TIME_DEPENDENT_COORDINATE_FRAME
isTimeDependent(): do not mark 'static' Coordinate Frame helmert transformations as time-dependent, ...
2024-09-25 11:57:58 +02:00
Even Rouault ff907615d8 isTimeDependent(): do not mark 'static' Coordinate Frame helmert transformations as time-dependent, only time-dependent ones... 2024-09-25 03:00:38 +02:00
Even Rouault 41aa398777 Merge pull request #4254 from rouault/epsg_11_017
Database: update to EPSG v11.017
2024-09-24 18:59:31 +02:00
Even Rouault f16373327d Merge pull request #4252 from rouault/tweak_findsOpsInRegistryWithIntermediate
findsOpsInRegistryWithIntermediate(): restrict to using known source/target CRS that have the same originating authority
2024-09-24 18:59:24 +02:00
Clifford Yapp 2b3b06d8d1 Merge v9.5.0 to RELEASE 2024-09-24 10:27:25 -04:00
Even Rouault e2174f8292 README.md: dummy commit to trigger doc rebuild 2024-09-20 15:38:45 +02:00
Even Rouault de22c176a6 projinfo: display whether an operation is time-dependent 2024-09-18 11:37:41 +02:00
Even Rouault 4d29d46ec8 Database: update to EPSG v11.017 2024-09-17 20:23:23 +02:00
Even Rouault 78d5d84ce0 findsOpsInRegistryWithIntermediate(): restrict to using known source/target CRS that have the same originating authority
Fixes https://lists.osgeo.org/pipermail/proj/2024-September/011531.html
i.e.
```
projinfo -s EPSG:4269 -t EPSG:6318 --3d --spatial-test intersects
```

The fix consists in making sure that we recognize that the 3d-promoted
object EPSG:4269 (NAD83(86)) is still linked to EPSG, and thus discard
ESRI 3D objects in findsOpsInRegistryWithIntermediate()

Fixes a "regression" of https://github.com/OSGeo/PROJ/pull/4244
(one could argue which of the results is the best, given that NAD83(86)
as a 3D geographic CRS has no solid foundation)
2024-09-17 16:33:23 +02:00
Even Rouault ed0a29ced9 Simplify/clean use of getCandidateAuthorities() 2024-09-17 15:24:05 +02:00
Even Rouault 551471f3c0 Merge pull request #4249 from rouault/rtd_long_line
CI: Fix ReadTheDocs test for [ci skip] with multiline commit messages
2024-09-16 22:41:38 +02:00
Even Rouault 1e2c773deb Merge pull request #4251 from rouault/doc_spelling
Doc: fix typos and add a CI check to spot them
2024-09-16 22:41:26 +02:00
Even Rouault 615b184d25 Add .github/workflows/doc_checks.yml 2024-09-15 18:19:18 +02:00
Even Rouault 693620fe71 Doc: update spelling_wordlist.txt 2024-09-15 18:19:18 +02:00
Even Rouault 4356b4ece4 Doc: remove tab characters 2024-09-15 18:19:17 +02:00
Even Rouault 2af1ba45f6 Doc: fix typos 2024-09-15 18:19:17 +02:00
Even Rouault 49ebcf5c08 Merge pull request #4248 from ecere/master
affine.rst: Fixed second s21 that should say s22
2024-09-15 15:05:11 +02:00
Even Rouault 8032e9ba25 Merge pull request #4247 from rouault/update_gigs_5110
More strict syntax for test/gigs/5110.gie.failing (LAEA)
2024-09-15 15:04:26 +02:00
Kristian Evers ab75759697 Update version numbers etc in anticipation of 9.6.0 release 2024-09-15 14:38:48 +02:00
Kristian Evers 6d60e836f1 Update docs for 9.5.0 release 2024-09-15 14:35:14 +02:00
Daniel Baston b7178fa234 CI: Fix ReadTheDocs test for [ci skip] with multiline commit messages
git log will emit a blank line which passes the grep -v test and
prevents exiting.
2024-09-15 14:23:12 +02:00
Jerome St-Louis 19fd62d2b6 affine.rst: Fixed second s21 that should say s22 2024-09-14 22:37:38 -04:00
Even Rouault 83c91dd26f More strict syntax for test/gigs/5110.gie.failing (LAEA)
Current results are that we pass the simple one-time forward / reverse tests, but not
repeated 1000 times:

```
$ bin/gie ../test/gigs/5110.gie.failing
-------------------------------------------------------------------------------
Reading file '../test/gigs/5110.gie.failing'
-------------------------------------------------------------------------------
proj=pipeline step init=epsg:4258 inv step init=epsg:3035
-------------------------------------------------------------------------------
     FAILURE in 5110.gie.failing(116):
     roundtrip deviation: 105.138717 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(120):
     roundtrip deviation: 168.120679 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(124):
     roundtrip deviation: 344.822744 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(128):
     roundtrip deviation: 759.297462 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(132):
     roundtrip deviation: 1311.809746 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(140):
     roundtrip deviation: 344.822713 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(144):
     roundtrip deviation: 344.822789 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(148):
     roundtrip deviation: 344.822744 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(152):
     roundtrip deviation: 344.822853 mm, expected: 6.000000 mm
     -----
     FAILURE in 5110.gie.failing(156):
     roundtrip deviation: 344.822747 mm, expected: 6.000000 mm
-------------------------------------------------------------------------------
total: 23 tests succeeded,  0 tests skipped, 10 tests FAILED!
-------------------------------------------------------------------------------
```
2024-09-11 20:07:31 +02:00
Kristian Evers 0a407325fb Keep CITATION details up to date
- Bumped version number
- Updated affiliation for Thomas and Kristian, reflecting recent change
  in agency name
2024-09-09 12:40:12 +02:00
Kristian Evers 6ad9c25787 Release notes for 9.5.0 2024-09-09 12:38:28 +02:00
Kristian Evers 2fc72a5e0a Update man-pages from Sphinx-docs 2024-09-09 11:11:43 +02:00
Kristian Evers 602740ebca Update release date and version numbers
The original release date was pushed two weeks and a new PROJ-data
version is to be released.
2024-09-09 11:09:19 +02:00
Even Rouault 38dd7c2446 Refresh proj_symbol_rename.h 2024-09-08 14:06:33 +02:00
Even Rouault 4fccba3a61 Merge pull request #4244 from rouault/ETRF2000_ETRS89
createOperation(): tune so that ITRF2000->ETRS89 does not return only NKG grid based operations but also time-dependent Helmert
2024-09-05 15:58:48 +02:00
Even Rouault 529904c263 createOperation(): tune so that ITRF2000->ETRS89 does not return only NKG grid based operations but also time-dependent Helmert 2024-09-05 01:18:02 +02:00
Even Rouault 0100ad08e1 AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(): avoid using intermediate CRS of ancient era when dealing with modern source/target CRS 2024-09-04 20:57:04 +02:00
Even Rouault b6bf25c2d5 Merge pull request #4241 from rouault/epsg_11_016
Database: update to EPSG 11.016
2024-09-02 12:34:30 +02:00
Even Rouault 2143a4ba7f Database: update to EPSG 11.016 2024-09-01 19:54:20 +02:00
Even Rouault a327e5238f CI: completely disable .travis.yml since arm64 builds are also broken now 2024-09-01 19:54:08 +02:00
Even Rouault e2fd35dfd8 Merge pull request #4231 from MechanicalSoftworks/forking-race-condition
Fix race condition surrounding DB reopening during fork
2024-08-31 16:30:37 +02:00
Even Rouault ad98ddfc95 Merge pull request #4238 from kbevers/gllat-glmsl
Add grid alternatives releated to GLLAT and GLMSL
2024-08-29 12:34:25 +02:00
Kristian Evers ba74cc981c Add grid alternatives releated to GLLAT and GLMSL 2024-08-29 08:56:36 +02:00
Even Rouault 298f7f6f96 Merge pull request #4237 from rouault/fix_4236
GeographicBoundingBox::create(): accept degenerate bounding box reduced to a point or a line
2024-08-27 15:14:02 +02:00
Even Rouault 903cfffd61 cs2cs and projinfo: emit warning when it looks like longitude and latitudes have been switched in --bbox 2024-08-27 14:15:05 +02:00
Even Rouault 85c6a0ec54 GeographicBoundingBox::create(): accept degenerate bounding box reduced to a point or a line
by extending it by the minimal amount to form a non-degenerate one.

Also throws when south > north

Fixes #4236
2024-08-27 14:15:05 +02:00
Even Rouault 58fca6dc51 Merge pull request #4235 from rouault/ITRF2020
Add data/ITRF2020 with ITRF2020 to ITRFother, and ITRF2020 plate motion models
2024-08-27 12:51:38 +02:00
Even Rouault 0c4b6a73ae Add data/ITRF2020 with ITRF2020 to ITRFother, and ITRF2020 plate motion models
Demo showing correctness/consistency with EPSG for ITRF2020 to ITRFother:

$ echo 2 49 0 | bin/cs2cs -d 10 ITRF2020 ITRF2014
2.0000000132	49.0000000042 -0.0042266957

$ echo 2 49 0 | PROJ_DATA=data bin/cct -d 10 +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart +ellps=GRS80 +step +init=ITRF2020:ITRF2014 +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
  2.0000000132   49.0000000042  -0.0042266957           inf

$ echo 2 49 0 | bin/cs2cs -d 10 ITRF2020 ITRF97
1.9999992955	49.0000000329 0.0239864234

$ echo 2 49 0 | PROJ_DATA=data bin/cct -d 10 +proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart +ellps=GRS80 +step +init=ITRF2020:ITRF97 +step +inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
  1.9999992955   49.0000000329  0.0239864234           inf
2024-08-27 00:48:34 +02:00
Even Rouault f43295a134 CI: fix Conda builds 2024-08-26 16:59:46 +02:00
Even Rouault 54913a4cbc Merge pull request #4234 from rouault/travis_disable_s390x
CI: disable Travis-CI s390x which has been broken for nearly one month now, and they still haven't fixed it
2024-08-26 15:32:41 +02:00
Even Rouault 77a00acc05 CI: disable Travis-CI s390x which has been broken for nearly one month now, and they still haven't fixed it 2024-08-26 15:23:27 +02:00
Lucas Zadrozny 6fcc657d7a Fix race condition surrounding DB reopening during fork 2024-08-20 20:53:32 +10:00
Even Rouault 2ce6c7a9b1 Merge pull request #4230 from jjimenezshaw/test-false-ne
Add minor test to Local Orthographic
2024-08-17 21:40:12 +02:00
Javier Jimenez Shaw 8cdb2ba744 Add minor test to Local Orthographic with non zero false easting and northing 2024-08-17 09:19:21 +02:00
Even Rouault 8a94b995ca Merge pull request #4229 from rouault/fine_tune_local_ortho
Fix parameter mappings of Local Orthographic, and re-import ESRI database with the mapping for this method
2024-08-16 23:32:48 +02:00
Even Rouault f9f8b7f0c5 Fix parameter mappings of Local Orthographic, and re-import ESRI database with the mapping for this method 2024-08-16 23:11:06 +02:00
Even Rouault c83e18e54a Merge pull request #4228 from jjimenezshaw/local-geographic
Add new Conversion "Local Orthographic"
2024-08-16 21:31:06 +02:00
Javier Jimenez Shaw 221b2d51ba Add new conversion Local Orthographic
with code 1130 from updated EPSG v11.015
with azimuth and scale factor in proj=ortho projection
2024-08-16 19:44:14 +02:00
Even Rouault 8cf1bafa36 Merge pull request #4227 from rouault/cppcheck_fixes
Fix very minor issues or workaround latest cppcheck false positives
2024-08-15 18:02:21 +02:00
Even Rouault c0a18c3855 Fix very minor issues or workaround latest cppcheck false positives 2024-08-15 16:26:28 +02:00
Even Rouault de10157706 Merge pull request #4221 from rouault/missing_time
Add PROJ_ERR_COORD_TRANSFM_MISSING_TIME and proj_coordoperation_requires_per_coordinate_input_time()
2024-08-15 12:05:07 +02:00
Even Rouault 1f9e46a46c Merge pull request #4226 from rouault/epsg_11_015
Database: update to EPSG 11.015
2024-08-15 12:04:54 +02:00
Even Rouault a3e17fb9f2 Database: update to EPSG 11.015 2024-08-14 23:09:41 +02:00
Even Rouault 4bf43e981a docs/docbuild/Dockerfile: add tex-gyre 2024-08-14 13:43:52 +02:00
Even Rouault 14e8e1565b Add proj_coordoperation_requires_per_coordinate_input_time() 2024-08-14 13:41:49 +02:00
Even Rouault d56f0dea58 Add PROJ_ERR_COORD_TRANSFM_MISSING_TIME, and use it +proj=deformation/defmodel 2024-08-14 13:38:54 +02:00
Even Rouault 892a313f85 Merge pull request #4225 from ecere/master
ISEA: Fix bug introduced in 825682a2ea
2024-08-14 13:38:05 +02:00
Even Rouault ae23ad5466 docs/docbuild/Dockerfile: add make 2024-08-14 12:52:54 +02:00
Jerome St-Louis 724878b97a ISEA: Fix bug introduced in 5f0aedf1e8
- Also added tests for `+orient=pole`
- step 1: double z = fabs(cosZ) < 1E-15 ? 0 : acos(cosZ); was wrong
- acos(0) is Pi/2, not 0
2024-08-14 06:50:20 -04:00
Even Rouault af475c6ee5 Merge pull request #4211 from ecere/master
ISEA Inverse projection (#3047)
2024-08-14 12:06:42 +02:00
Jerome St-Louis d1d8a5a75e ISEA: Save four trigonometric calls
- Avoid calling isea_rotate() in isea_tri_plane() to rotate
  coordinates in bottom triangles by 180 degrees.
2024-08-14 05:14:14 -04:00
Even Rouault 6803c5a0d5 Merge pull request #4224 from mwtoews/cmake-python3
CMake: replace Python3 with Python
2024-08-14 10:13:03 +02:00
Even Rouault 7e4da4d3b7 Merge pull request #4222 from mwtoews/container-upgrade
Dockerfile: fix warnings and other clean-ups
2024-08-14 10:11:45 +02:00
Jerome St-Louis 7874a3aa1b ISEA: Removing extraneous multiplications, unused code
- NOTE: There may have been an undocumented +rescale= parameter which
will no longer work
2024-08-14 00:13:02 -04:00
Jerome St-Louis 5f0aedf1e8 ISEA: Optimizations, unification and simplification
- Eliminating several redundant trigonometric function calls
- Single shared definition of dodecahedron vertices
  (centers of icosahedral triangular faces) for
  forward and inverse
- Shared data structure for forward and inverse
- Consistent use of 0-base index for triangular faces
2024-08-13 21:58:38 -04:00
Mike Taves 7bc9bac427 CMake: replace Python3 with Python 2024-08-14 13:04:54 +12:00
Mike Taves 4767406411 Dockerfile: fix warnings and other clean-ups 2024-08-14 11:11:12 +12:00
Jerome St-Louis 825682a2ea ISEA Inverse projection (#3047)
- Integrating code ported from Java to eC, then eC to C++ implementing the inverse ISEA projection
- Originally from Franz-Benjamin Mocnik's ISEA implementation found at
   https://github.com/mocnik-science/geogrid/blob/master/src/main/java/org/giscience/utils/geogrid/projections/ISEAProjection.java
   (MIT License)
- NOTE: The inverse only supports the default planar options
2024-08-13 17:49:44 -04:00
Even Rouault 64ece97813 Merge pull request #4220 from mwtoews/cmake-use-network
CMake: add TESTING_USE_NETWORK configure option
2024-08-13 19:04:30 +02:00
Javier Jimenez Shaw 0702d757f4 projinfo: 2 args equivalent to usage of -s and -t (#4218) 2024-08-13 19:01:28 +02:00
Mike Taves 038fe34203 CMake: add TESTING_USE_NETWORK configure option 2024-08-13 22:36:01 +12:00
Mike Taves d2b7ecde3c DOC: specify test requirements; add nlohmann/json to build reqs 2024-08-13 22:28:56 +12:00
WangWeiLin-MV bddac146b2 CMake: add option EMBED_PROJ_DATA_PATH (#4207) 2024-08-12 22:05:49 +02:00
Even Rouault e3f7098ba6 Fix formatting 2024-08-12 18:10:12 +02:00
Even Rouault 59ea0dac6f Merge pull request #4216 from rouault/fix_4215
Add missing include cstdint
2024-08-07 12:01:47 +02:00
Even Rouault 8b78ba4c18 Add missing include cstdint
Fixes #4215
2024-08-07 11:26:16 +02:00
Even Rouault a4593b4a91 Merge pull request #4213 from jjimenezshaw/vertica-method-1129
Process properly EPSG_CODE_METHOD_VERTICALGRID_GTG with code 1129
2024-08-01 16:24:28 +02:00
Javier Jimenez Shaw 5d173d8de9 process properly EPSG_CODE_METHOD_VERTICALGRID_GTG with code 1129 2024-08-01 15:39:36 +02:00
Even Rouault 6400b75371 Merge pull request #4208 from seanm/misc-warnings
Fixed misc warnings
2024-07-31 17:51:45 +02:00
79b4f28c10 [Backport master] Update utm.rst to show how TM and UTM are related (#4210)
Co-authored-by: 積丹尼 Dan Jacobson <jidanni@jidanni.org>
Co-authored-by: Kristian Evers <kristian@evers.dev>
2024-07-28 08:23:24 +12:00
Sean McBride 9e8cdb7244 Removed unused member functions
Warnings were:

warning: unused member function 'get_table' [-Wunused-member-function]

warning: unused member function 'clear' [-Wunused-member-function]

The string `get_table` appears nowhere else in the repository. The string `clear` does, being so generic, but things still compile after its removal, and these are tests, not public API.
2024-07-25 15:01:17 -04:00
Sean McBride f160acdb17 Fixed -Wunused-macros by conditionalizing to Cygwin only
Only define _GNU_SOURCE  on Cygwin.

warning was:

warning: macro is not used [-Wunused-macros]
2024-07-25 14:56:22 -04:00
Sean McBride f320fa7d60 Fixed -Wunused-template warning
This function is unused when building with ENABLE_TIFF=OFF.

The warning was:

warning: unused function template 'insertIntoHierarchy' [-Wunused-template]
2024-07-25 14:18:53 -04:00
Sean McBride e2a6662eca Fixed -Wcast-align warning, use memcpy instead
The warning was:

warning: cast from 'unsigned char *' to 'int *' increases required alignment from 1 to 4 [-Wcast-align]

An idiomatic solution is to use memcpy().
2024-07-25 14:17:29 -04:00
Sean McBride 45fca00fd2 Fixed -Wunused-macros warning; removed #define of PJ_DATUMS_
The string "PJ_DATUMS_" is nowhere else in the codebase, so presumably it is leftover junk.
2024-07-25 14:16:09 -04:00
Even Rouault 7d766a4ba1 Merge pull request #4200 from rouault/fix_4198
cct: emit error message and return error code when not being able to open input file
2024-07-21 14:59:57 +02:00
Even Rouault be9b42aa31 Merge pull request #4205 from rouault/fix_4202
Doc: prepare for ReadTheDocs Deprecation: Removal of Sphinx context injection at build time
2024-07-21 12:52:33 +02:00
Even Rouault 148292df28 Doc: prepare for ReadTheDocs Deprecation: Removal of Sphinx context injection at build time
Fixes #4202
2024-07-20 17:45:42 +02:00
積丹尼 Dan Jacobson cce46228bd optargpm.h: improve error message regarding mix of options starting with plus and minux (#4201)
Fixes #4199
2024-07-19 10:26:06 +02:00
Even Rouault e9557f1a03 cct: emit error message and return error code when not being able to open input file
Fixes #4198
2024-07-15 12:28:55 +02:00
Even Rouault 4bee401ad4 Merge pull request #4196 from jmckenna/output-name-summary
CMake: update output name summary (useful for Windows builds)
2024-07-11 20:00:05 +02:00
Jeff McKenna b6ffa835b6 update output name summary for CMake 2024-07-11 14:12:15 -03:00
Even Rouault d6311ab9bc Merge pull request #4167 from rouault/fix_4151
CMake: for Windows builds, defaults PROJ DLL to be just 'proj_${PROJ_MAJOR_VERSION}.dll'
2024-07-10 11:42:51 +02:00
Even Rouault 872a8d105f CMake: for Windows builds, defaults PROJ DLL to be just 'proj_${PROJ_MAJOR_VERSION}.dll'
instead of "proj_${PROJ_MAJOR_VERSION}_${PROJ_MINOR_VERSION}.dll"

This is configurable (for all platforms) by setting the new
PROJ_OUTPUT_NAME Make Variable

On MinGW, the APPEND_SOVERSION option can be set to ON, to add a "-${PROJ_SOVERSION}"
suffix to the PROJ shared library name.

Fixes #4151
2024-07-09 15:41:48 +02:00
Even Rouault eb12b9e3e8 Merge pull request #4189 from rouault/epsg_11_012
Database: update to EPSG 11.012
2024-07-08 21:06:40 +03:00
Even Rouault b5271a541a Merge pull request #4192 from rouault/fix_4191
Docs: add a note to explain EXE_SQLITE3 must of the host architecture
2024-07-08 21:06:30 +03:00
Even Rouault e97b0aeb02 Docs: add a note to explain EXE_SQLITE3 must of the host architecture
Fixes #4191
2024-07-07 10:27:38 +02:00
Even Rouault 0117b31c4a Database: update to EPSG 11.012 2024-07-06 13:24:35 +02:00
Even Rouault 979f20516e Merge pull request #4187 from OSGeo/dependabot/github_actions/docker/build-push-action-6
build(deps): bump docker/build-push-action from 5 to 6
2024-07-01 21:56:04 +02:00
dependabot[bot] a9f12ca4ca build(deps): bump docker/build-push-action from 5 to 6
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5 to 6.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 19:51:07 +00:00
Even Rouault ef281eb8f4 Merge pull request #4183 from rouault/decrease_exceptions
Limit number of C++ exceptions thrown & caught internally
2024-07-01 20:02:59 +02:00
Even Rouault 88a4c89a9d Merge pull request #4185 from jjimenezshaw/google-verification
[Doc] add google-site-verification meta tag in index.rst
2024-07-01 20:02:44 +02:00
Javier Jimenez Shaw 009bf58001 [Doc] add google-site-verification meta tag in index.rst 2024-07-01 19:45:59 +02:00
Tom Willow de8118616a Fix: not apply -Wextra-semi for gcc version<8 (#4184) 2024-06-29 17:33:22 +02:00
Even Rouault a9620afb75 Merge pull request #4181 from rouault/wkt1_oracle_albers_conical_equal_area
WKT import: add support for Oracle WKT 'Albers_Conical_Equal_Area' spelling
2024-06-26 19:34:21 +02:00
Even Rouault beaa1219a3 Add a mode to Transformation::getTOWGS84Parameters() to not throw exceptions 2024-06-26 19:32:55 +02:00
Even Rouault 793b7f2e1b pj_obj_create(): avoid C++ exception to be thrown when trying to export a dummy conversion to a PROJ string 2024-06-26 19:32:23 +02:00
Even Rouault 26685c3b27 Code reformatting 2024-06-26 19:30:35 +02:00
Clifford Yapp 47410920e0 Match 9.4.1 tag contents 2024-06-25 09:45:10 -04:00
Clifford Yapp 27be1f0c29 Update PROJ to v9.4.1 2024-06-25 09:42:55 -04:00
Even Rouault 932b66a363 WKT import: add support for Oracle WKT 'Albers_Conical_Equal_Area' spelling
Fixes https://lists.osgeo.org/pipermail/qgis-user/2024-June/054599.html
2024-06-25 00:09:54 +02:00
Even Rouault d73e829df9 Merge pull request #4180 from rouault/coverity_perf_warnings
Fix Coverity Scan performance warnings (CID 463080, 463079, 463078, 463077)
2024-06-24 23:42:17 +02:00
Even Rouault c4e09c04a5 Fix Coverity Scan performance warnings (CID 463080, 463079, 463078, 463077) 2024-06-23 20:35:09 +02:00
Even Rouault 4aa16151b9 Merge pull request #4179 from rouault/epsg_11_009
Database: update to EPSG v11.009
2024-06-20 18:50:49 +02:00
Even Rouault 4b20027f31 Database: update to EPSG v11.009 2024-06-20 16:41:41 +02:00
Even Rouault 480ccd618e CRS::createBoundCRSToWGS84IfPossible(): update it to work with CRS with 2 usages, with one extent containing a smaller one, like the EPSG 11.009 updated UTM ETRS89 CRS 2024-06-20 16:41:33 +02:00
Even Rouault 2495779d62 Merge pull request #4177 from joukewitteveen/patch-1
Support default context as nullptr in coordinateTransform
2024-06-20 13:03:27 +02:00
Even Rouault cc3ecaebb4 helmert.rst: fix rotation matrix formula (fixes #4178) 2024-06-20 13:02:55 +02:00
Even Rouault 36815b4bea Merge pull request #4176 from rouault/fix_4175
createOperations: make it work when transforming from/to a CompoundCRS with a DerivedVerticalCRS with ellipsoidal height
2024-06-20 01:06:30 +02:00
Jouke Witteveen 1b684bce2f coordinateTransformer: support default context as nullptr
In #3705, coordinateTransformer was added with documentation stating the
default context will be used when null is given as a context. This did
not work because the context was not sanitized.
2024-06-19 20:30:49 +02:00
Even Rouault 53be9fb273 createOperations: make it work when transforming from/to a CompoundCRS with a DerivedVerticalCRS with ellipsoidal height
Such CompoundCRS is strictly speaking not OGC Topic 2 conformant, but
can make sense from a practical point of view.

Fixes #4175
2024-06-18 23:33:57 +02:00
Even Rouault 90e148d509 Merge pull request #4174 from rouault/fix_4173
+proj=gridshift: make projected grids work with PROJ_NETWORK=ON
2024-06-18 13:08:48 +02:00
Even Rouault 68c678bd42 Merge pull request #4172 from rouault/toWGS84AutocorrectWrongValues
Add toWGS84AutocorrectWrongValues() method and use it in PROJ.4 and WKT1 CRS import
2024-06-18 13:08:40 +02:00
Even Rouault d978fdc0e9 Merge pull request #4171 from rouault/cs2cs_no_double_parse
cs2cs: create proj_create() only once for source/target CRS
2024-06-18 13:08:28 +02:00
Even Rouault 44e45b9b5f +proj=gridshift: make projected grids work with PROJ_NETWORK=ON
Fixes #4173
2024-06-17 19:35:15 +02:00
Even Rouault cceff3e49e Add toWGS84AutocorrectWrongValues() method and use it in PROJ.4 and WKT1 CRS import
This adds an heuristics to detect, aud autocorrect, wrong sign in rotation terms of
TOWGS84 clause wrongly imported from a Coordinate Frame rotation, such
as the ones currently emitted by epsg dot io.

Refs #4170
2024-06-15 17:46:17 +02:00
Even Rouault 1e3307012e cs2cs: create proj_create() only once for source/target CRS 2024-06-15 17:43:23 +02:00
Even Rouault 5b6867612d Merge pull request #4169 from rouault/intersects_comments
Add code comments in GeographicBoundingBox::Private::intersects()/intersections()
2024-06-10 22:44:47 +02:00
Even Rouault 2ebf62c8db Merge pull request #4168 from rouault/fix_4154
BoundCRS::exportToPROJ(): handle case of NADCON conus grid
2024-06-10 22:44:31 +02:00
Even Rouault d467ecb758 Merge pull request #4166 from rouault/fix_wrong_utm_zone_south
Fix wrong EPSG conversion code for UTM south
2024-06-10 22:44:15 +02:00
Even Rouault ee912165d3 Add code comments in GeographicBoundingBox::Private::intersects()/intersections() 2024-06-08 23:40:17 +02:00
Even Rouault 926bbd2064 BoundCRS::exportToPROJ(): handle case of NADCON conus grid
Fixes #4154
2024-06-05 19:21:18 +02:00
Even Rouault 41be4092fd Fix -Wdocumentation warning 2024-06-05 17:12:11 +02:00
Even Rouault 8b7c1b9ca0 WKT/PROJJSON import: correct wrong EPSG code for UTM South conversions 2024-06-05 17:12:01 +02:00
Even Rouault 9c1d1ea0aa Fix wrong EPSG conversion code for UTM south
When generating a Conversion object for a UTM south conversion (for
example when importing from PROJ.4 or WKT1), we currently use a wrong
offset.

Fixes https://gis.stackexchange.com/questions/482037/what-is-epsg17056
2024-06-05 17:12:01 +02:00
Even Rouault e0e14829a4 Merge pull request #4162 from rouault/howto_release_zenodo
HOWTO-RELEASE: add a step to check GitHub Zeonodo integration
2024-06-05 01:29:13 +02:00
Even Rouault 4ac06aa6d8 Merge pull request #4163 from jjimenezshaw/missing-pj_grid_info
[doc] add missing var name for PJ_GRID_INFO.filename
2024-06-05 00:07:55 +02:00
Javier Jimenez Shaw 7c83292d59 [doc] add missing var name for PJ_GRID_INFO.filename 2024-06-04 23:54:21 +02:00
Even Rouault 10e0e705ac HOWTO-RELEASE: add a step to check GitHub Zeonodo integration 2024-06-04 16:24:22 +02:00
Even Rouault 64bef2b488 Merge pull request #4158 from rouault/fix_4156
docker.yml: re-instate pushing Docker 'proj' image for non-master builds
2024-06-03 19:36:23 +02:00
erykoff 929f94609a Fix imoll and imoll_o zone calculations to correct inverse transformations near the "seams". (#4159)
Fixes #4155

* Fix x zone boundaries when doing inverse imoll transform.

* Fix x zone boundaries when doing inverse imoll_o transform.

* Add roundtrip tests for imoll near the "seams".

* Add roundtrip tests for imoll_o near the "seams".
2024-06-03 19:35:44 +02:00
Even Rouault 5083bad941 docker.yml: re-instate pushing Docker 'proj' image for non-master builds
Fixes #4156
Reverts d9df80600f
2024-06-02 20:00:27 +02:00
Kristian Evers 82af82809d Bump proj-data version in docs configuration 2024-05-29 13:39:47 +02:00
Kristian Evers d1b458c5de Update download and news entries in docs 2024-05-29 12:53:13 +02:00
Kristian Evers 3b7a6a9b2e Update NEWS for 9.4.1
More or less a duplicate commit of similar additions in the 9.4 branch
but due to the markdown-conversion of NEWS and other files a separate
commit is done for the sake of simplicity.
2024-05-27 21:27:58 +02:00
Kristian Evers 875a485fa5 Bump PROJ-data version in metadata.sql 2024-05-27 21:08:24 +02:00
Kristian Evers 266a825cdf Bump PROJ-data version in metadata.sql 2024-05-27 21:07:53 +02:00
Kristian Evers 4c2da03c22 Update NEWS for 9.4.1 release 2024-05-27 21:05:33 +02:00
Kristian Evers c62e0fec07 Update man-pages from Sphinx-docs 2024-05-27 20:51:46 +02:00
Kristian Evers 89a5f5918d Update version numbers and date for 9.4.1 release 2024-05-27 20:44:06 +02:00
Even Rouault ad3e44134f Merge pull request #4150 from OSGeo/backport-4149-to-9.4
[Backport 9.4] Improve detection of compatible/incompatible celestial bodies
2024-05-24 17:57:28 +02:00
Even Rouault 38f218da43 createOperations(): improve detection of compatible/incompatible celestial bodies (fixes #4148) 2024-05-24 13:54:28 +00:00
Even Rouault 35a343fb30 WKT/PROJJSON importer: improve heuristics to guess the celestial body name by using the ellipsoid name (fixes #4148) 2024-05-24 13:54:28 +00:00
Even Rouault 99a51d25e4 Merge pull request #4149 from rouault/fix_4148
Improve detection of compatible/incompatible celestial bodies
2024-05-24 15:53:50 +02:00
Even Rouault ed11397490 createOperations(): improve detection of compatible/incompatible celestial bodies (fixes #4148) 2024-05-24 04:26:56 +02:00
Even Rouault 4097baf8e3 WKT/PROJJSON importer: improve heuristics to guess the celestial body name by using the ellipsoid name (fixes #4148) 2024-05-24 04:11:48 +02:00
Even Rouault ea00f187f7 Merge pull request #4146 from rouault/fix_coverity_460619
[Lint] WKTParser::Private: refactor code a bit in the hope to fix false-positive 'Untrusted value as argument' Coverity Scan warning
2024-05-13 00:04:27 +02:00
Even Rouault 1d4a155d33 [Lint] WKTParser::Private: refactor code a bit in the hope to fix false-positive 'Untrusted value as argument' Coverity Scan warning
Should hopefully fix CID 460619, 460620, 460621

Coverity Scan suddenly complains about propertyCount_ not being
properly being validated (which is wrong). Let's take the opportunity to
use a bit more C++ish style in the hope it will shut down that false
positive.
2024-05-12 21:21:09 +02:00
Even Rouault 5fb1688f1d Merge pull request #4145 from rouault/update_proj_symbol_rename
[9.4] proj_symbol_rename.h: update with current symbols
2024-05-10 16:56:59 +02:00
Even Rouault 74f4ed6213 Merge pull request #4144 from rouault/proj_context_set_user_writable_directory
API: add proj_context_set_user_writable_directory()
2024-05-10 16:56:54 +02:00
Even Rouault 1facc74a54 Merge pull request #4143 from OSGeo/backport-4138-to-9.4
[Backport 9.4] Database: update ESRI dataset to ArcGIS Pro 3.3
2024-05-10 16:56:45 +02:00
Even Rouault 68ab87e203 Update proj_symbol_rename.h 2024-05-09 23:38:54 +02:00
Even Rouault dda95a08d0 API: add proj_context_set_user_writable_directory()
Fixes #4142
2024-05-09 23:38:54 +02:00
Even Rouault 9baec73c01 proj_symbol_rename.h: update with current symbols 2024-05-09 21:48:24 +02:00
Even Rouault 994217540f Database: update ESRI dataset to ArcGIS Pro 3.3
Update to
https://github.com/Esri/projection-engine-db-doc/commit/3bbc1daccab58f82b6981ad81716ab3bf7670f82
/ tag v3.3.0

Fixes #4137
2024-05-09 19:14:51 +00:00
Even Rouault 5e9c999b5d Merge pull request #4139 from OSGeo/backport-4124-to-9.4
[Backport 9.4] DerivedProjectedCRS: deal with lack of explicit CS in BASEPROJCRS in WKT
2024-05-09 21:08:51 +02:00
Even Rouault f00f01dd11 Merge pull request #4141 from OSGeo/backport-4140-to-9.4
[Backport 9.4] Add grid alternatives related to DKLAT, DKMSL and GLLMSL
2024-05-09 21:08:33 +02:00
Even Rouault e353e08800 Merge pull request #4138 from rouault/esri_arcgis_pro_3_3
Database: update ESRI dataset to ArcGIS Pro 3.3
2024-05-09 21:08:23 +02:00
Kristian Evers 403c18c507 Grid grid-alternative types for DVR90 grids
Were set to `hgridshift` but should in fact på `geoid_like`.
2024-05-08 21:17:14 +00:00
Kristian Evers 11b3248919 Add grid alternatives related to DKLAT, DKMSL and GLLMSL 2024-05-08 21:17:14 +00:00
Even Rouault 1d0354fd7b Merge pull request #4140 from kbevers/dk-grid-updates
Add grid alternatives related to DKLAT, DKMSL and GLLMSL
2024-05-08 23:16:52 +02:00
Kristian Evers 6342f19b21 Grid grid-alternative types for DVR90 grids
Were set to `hgridshift` but should in fact på `geoid_like`.
2024-05-08 14:38:26 +02:00
Kristian Evers 881bff1249 Add grid alternatives related to DKLAT, DKMSL and GLLMSL 2024-05-08 14:37:42 +02:00
Mike Taves bb094d7174 Improve CLI testing (#4131) 2024-05-08 22:43:44 +12:00
Even Rouault d9df80600f docker.yml: only push packages for master builds 2024-05-08 02:08:59 +02:00
Even Rouault 23d50be12e Remove docker.yml [ci skip] 2024-05-08 02:07:24 +02:00
Even Rouault ee6a519fc5 DerivedProjetedCRS WKT export: emit a BASEPROJCRS.CS node in situations where there's ambiguity
Cf https://github.com/OSGeo/gdal/issues/9732#issuecomment-2072508672
2024-05-07 22:53:24 +00:00
Even Rouault 76735470c9 WKT2 grammar: allow a DERIVEDPROJCRS.BASEPROJCRS.CS node
Current WKT grammar (as of WKT2 18-010r11) does not allow a
BASEPROJCRS.CS node, but there are situations where this is
ambiguous and we want to allow one.
Cf https://github.com/OSGeo/gdal/issues/9732#issuecomment-2072508672
2024-05-07 22:53:24 +00:00
Even Rouault bf6a413739 DerivedProjectedCRS WKT import: workaround lack of explicit CS in BASEPROJCRS
Current WKT2 grammar doesn't allow an explicit CS (Coordinate System) in the BASEPROJCRS of
a DERIVEDPROJCRS. This leads to ambiguities when instanciating the
BASEPROJCRS. Cf https://github.com/OSGeo/gdal/issues/9732#issuecomment-2072508672
for a longer analysis

When importing such a DerivedProjectedCRS, we apply the following
strategy to try to reconstrut the CS of the baseProjCRS:
- if the baseProjCRS has an ID[], do a datebase lookup for this object,
  and if found, use its CS
- otherwise, do a database lookup from the name of the baseProjCRS, and
  if found, use its CS
- otherwise, browse through the PARAMETERs of the CONVERSION of the
  BASEPROJCRS, and if there is at least one such PARAMETER that has a
  linear unit, and if all PARAMETERs with a linear unit have the same
  one, then use it to reconstruct a Easting/Northing CartesianCS.
- otherwise, fallback to current behaviour, that is return a
  Easting/Northing CartesianCS with metre unit.

Fixes https://github.com/OSGeo/gdal/issues/9732
2024-05-07 22:53:24 +00:00
Even Rouault a715623148 Merge pull request #4124 from rouault/fix_gdal_9732
DerivedProjectedCRS: deal with lack of explicit CS in BASEPROJCRS in WKT
2024-05-08 00:52:51 +02:00
Even Rouault a42e1bab90 Merge pull request #4136 from OSGeo/backport-4134-to-9.4
[Backport 9.4] projinfo.rst: re-add '-s'
2024-05-08 00:36:40 +02:00
Even Rouault 4dddaaa482 Merge pull request #4135 from OSGeo/backport-4133-to-9.4
[Backport 9.4] bindings.rst: Add link to Perl bindings
2024-05-08 00:36:33 +02:00
Even Rouault 189b7a7ce9 Database: update ESRI dataset to ArcGIS Pro 3.3
Update to
https://github.com/Esri/projection-engine-db-doc/commit/3bbc1daccab58f82b6981ad81716ab3bf7670f82
/ tag v3.3.0

Fixes #4137
2024-05-08 00:34:36 +02:00
Even Rouault dbe5f772c0 projinfo.rst: re-add '-s' accidentally removed in 4ac2cfb25e 2024-05-06 11:30:28 +00:00
Even Rouault b59c4b5db3 Merge pull request #4134 from rouault/doc_projinfo_s
projinfo.rst: re-add '-s'
2024-05-06 13:30:05 +02:00
Arne Johannessen be567d8bbe Add link to Perl bindings 2024-05-06 11:15:04 +00:00
Arne Johannessen daeddc86ea Sort language bindings alphabetically 2024-05-06 11:15:04 +00:00
Even Rouault 3b1109dae3 Merge pull request #4133 from johannessen/perl-bindings
bindings.rst: Add link to Perl bindings
2024-05-06 13:12:53 +02:00
Even Rouault 6213ba0723 projinfo.rst: re-add '-s' accidentally removed in 4ac2cfb25e 2024-05-06 13:00:43 +02:00
Arne Johannessen 97cee1427b Add link to Perl bindings 2024-05-06 07:13:43 +02:00
Arne Johannessen 46cbc63a5f Sort language bindings alphabetically 2024-05-06 07:11:17 +02:00
Even Rouault ac88137ce9 Merge pull request #4132 from rouault/epsg_11_008
Database: update to EPSG v11.008
2024-05-02 02:05:11 +02:00
Even Rouault cdcdfceabc Database: update to EPSG v11.008 2024-05-02 00:36:19 +02:00
Even Rouault 8f29b8f48b test/fuzzers/build.sh: fix with latest ossfuzz update [ci skip] 2024-04-30 15:54:38 +02:00
Even Rouault 5a95429114 Merge pull request #4127 from rouault/stripVerticalComponent_alias_demoteTo2D
CRS::stripVerticalComponent(): Redirect it to demoteTo2D(std::string(), nullptr)
2024-04-29 16:13:11 +02:00
Even Rouault f3fa0e0594 Merge pull request #4129 from rouault/mac13
CI: switch from macos-latest to macos-13 to get x64 builds
2024-04-29 16:12:43 +02:00
Even Rouault 7bbb045109 mac.yml: select macos-13 for x64 builds 2024-04-27 19:16:33 +02:00
Even Rouault ced90ad8d5 adams_ws2.gie: disable test that fails on MacOS 13 2024-04-27 19:16:33 +02:00
Even Rouault 3c47abf8fd conda.yml: use macos-12 due to test failure 2024-04-27 18:57:50 +02:00
Even Rouault 04d9f210cd CI: conda.yml: change macos-latest to macos-13 2024-04-27 18:19:28 +02:00
Even Rouault 6e2b5b5c8f Revert ".github/workflows/docker.yml: (temporarily?) build proj-docs as proj-docs-2404"
This reverts commit 34a9a57654.

The ghcr.io/osgeo/proj-docs-2404 has been pushed, but for some reason it
can't be pulled by the GDAL job. So just use the original
ghcr.io/osgeo/proj-docs name
2024-04-27 16:50:36 +02:00
Even Rouault ad74ee2326 Revert "docker.yml: fix inverted elements"
This reverts commit 7ab4e5f52e.
2024-04-27 15:30:17 +02:00
Even Rouault 7ab4e5f52e docker.yml: fix inverted elements 2024-04-27 15:28:19 +02:00
Even Rouault ff0833ab50 Merge pull request #4128 from rouault/proj-docs-update
Update proj-docs Docker image to Ubuntu 24.04
2024-04-27 14:26:54 +02:00
Even Rouault d3cb3fb2f5 CRS::stripVerticalComponent(): redirect it to demoteTo2D(std::string(), nullptr)
stripVerticalComponent() was implemented in the initial commit of the PROJ 6 / GDAL
Barn SRS effort, but was not used internally at that time. Just as a potential
useful method for future users

Later we needed promoteTo3D(), and soon after the reverse operation, but
we (likely) forgot about the existence of stripVerticalComponent(). Hence
a new demoteTo2D() method, which is more capable than the initial
stripVerticalComponent().
2024-04-26 20:23:59 +02:00
Even Rouault 34a9a57654 .github/workflows/docker.yml: (temporarily?) build proj-docs as proj-docs-2404 2024-04-26 19:48:24 +02:00
Even Rouault 3635a00d62 docbuild/Dockerfile: update to Ubuntu 24.04, and remove no longer pins of a few packages 2024-04-26 19:48:24 +02:00
Even Rouault 332af8b1ad Fixes to make doc building work with Doxygen 1.9.8 2024-04-26 19:48:24 +02:00
Even Rouault 082e8484a1 Merge pull request #4126 from OSGeo/backport-4125-to-9.4
[Backport 9.4] PROJJSON specification and license: recall copyright and license
2024-04-25 17:36:01 +02:00
Even Rouault cc427d4fdd PROJJSON specification and license: recall copyright and license 2024-04-25 15:23:40 +00:00
Even Rouault 2f542b4ae8 Merge pull request #4125 from rouault/projjson_copyright_license
PROJJSON specification and license: recall copyright and license
2024-04-25 17:21:12 +02:00
Even Rouault 6e27046710 PROJJSON specification and license: recall copyright and license 2024-04-24 23:09:23 +02:00
Even Rouault c873334faf DerivedProjetedCRS WKT export: emit a BASEPROJCRS.CS node in situations where there's ambiguity
Cf https://github.com/OSGeo/gdal/issues/9732#issuecomment-2072508672
2024-04-23 17:53:55 +02:00
Even Rouault 6f85439a70 WKT2 grammar: allow a DERIVEDPROJCRS.BASEPROJCRS.CS node
Current WKT grammar (as of WKT2 18-010r11) does not allow a
BASEPROJCRS.CS node, but there are situations where this is
ambiguous and we want to allow one.
Cf https://github.com/OSGeo/gdal/issues/9732#issuecomment-2072508672
2024-04-23 17:53:06 +02:00
Even Rouault 38330b6729 DerivedProjectedCRS WKT import: workaround lack of explicit CS in BASEPROJCRS
Current WKT2 grammar doesn't allow an explicit CS (Coordinate System) in the BASEPROJCRS of
a DERIVEDPROJCRS. This leads to ambiguities when instanciating the
BASEPROJCRS. Cf https://github.com/OSGeo/gdal/issues/9732#issuecomment-2072508672
for a longer analysis

When importing such a DerivedProjectedCRS, we apply the following
strategy to try to reconstrut the CS of the baseProjCRS:
- if the baseProjCRS has an ID[], do a datebase lookup for this object,
  and if found, use its CS
- otherwise, do a database lookup from the name of the baseProjCRS, and
  if found, use its CS
- otherwise, browse through the PARAMETERs of the CONVERSION of the
  BASEPROJCRS, and if there is at least one such PARAMETER that has a
  linear unit, and if all PARAMETERs with a linear unit have the same
  one, then use it to reconstruct a Easting/Northing CartesianCS.
- otherwise, fallback to current behaviour, that is return a
  Easting/Northing CartesianCS with metre unit.

Fixes https://github.com/OSGeo/gdal/issues/9732
2024-04-23 17:53:06 +02:00
Javier Jimenez Shaw 860eb9ecee CI: avoid failure if .ccache doesn't exist 2024-04-18 17:24:21 +02:00
Even Rouault 4e6daa43fd Merge pull request #4121 from OSGeo/backport-4120-to-9.4
[Backport 9.4] ConcatenatedOperation::fixStepsDirection(): handle case where conversion is chained with transformation that must be reversed
2024-04-18 17:23:01 +02:00
Even Rouault f570b9f702 ConcatenatedOperation::fixStepsDirection(): handle case where conversion is chained with transformation that must be reversed
Fixes https://github.com/OSGeo/PROJ/issues/4116
2024-04-17 16:47:32 +00:00
Even Rouault 08ee492d73 Merge pull request #4120 from rouault/fix_4116
ConcatenatedOperation::fixStepsDirection(): handle case where conversion is chained with transformation that must be reversed
2024-04-17 18:45:28 +02:00
Even Rouault 432479678b Merge pull request #4119 from OSGeo/backport-4117-to-master
[Backport master] Update cct.rst warning of DMS dangers
2024-04-16 22:20:02 +02:00
Even Rouault 091bed1599 ConcatenatedOperation::fixStepsDirection(): handle case where conversion is chained with transformation that must be reversed
Fixes https://github.com/OSGeo/PROJ/issues/4116
2024-04-16 22:05:57 +02:00
積丹尼 Dan Jacobson 5ee843a828 Update cct.rst warning of DMS dangers
Proof:
```
echo 12.5 55       | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80
echo 12d30\'0\" 55 | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80
echo 12 55         | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80
  723842.2602   6100394.7568        0.0000        0.0000
  691875.6321   6098907.8250        0.0000        0.0000
  691875.6321   6098907.8250        0.0000        0.0000
```
2024-04-16 19:05:33 +00:00
Even Rouault b0e38e6e03 Merge pull request #4114 from OSGeo/backport-4113-to-9.4
[Backport 9.4] proj_create()/proj_create_from_database(): recall CRS AUTH:CODE in error message
2024-04-16 20:22:44 +02:00
Even Rouault 279f7573cf Merge pull request #4117 from jidanni/patch-41
Update cct.rst warning of DMS dangers
2024-04-16 20:22:23 +02:00
積丹尼 Dan Jacobson 06602365d6 Update cct.rst warning of DMS dangers
Proof:
```
echo 12.5 55       | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80
echo 12d30\'0\" 55 | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80
echo 12 55         | cct -z0 -t0 +proj=utm +zone=32 +ellps=GRS80
  723842.2602   6100394.7568        0.0000        0.0000
  691875.6321   6098907.8250        0.0000        0.0000
  691875.6321   6098907.8250        0.0000        0.0000
```
2024-04-14 10:38:23 +08:00
Even Rouault 1f670e8ee5 proj_create()/proj_create_from_database(): recall CRS AUTH:CODE in error message
Fixes #4112
2024-04-06 17:23:59 +00:00
Even Rouault 356e255022 Merge pull request #4113 from rouault/fix_4112
proj_create()/proj_create_from_database(): recall CRS AUTH:CODE in error message
2024-04-06 19:23:32 +02:00
Even Rouault 4bc2bc67ac proj_create()/proj_create_from_database(): recall CRS AUTH:CODE in error message
Fixes #4112
2024-04-05 20:04:10 +02:00
Even Rouault 589e01ea78 Merge pull request #4111 from kbevers/backport-nkg-unique-names
Backport NKG unique names
2024-04-04 17:34:33 +02:00
Even Rouault 92de8aa956 nkg.sql: fix remaining duplicated transformation names 2024-04-04 08:51:26 +02:00
Kristian Evers 2beb416e24 Make NKG Transformation names unique
A consequence of new database constrains introduced in #4071.
2024-04-04 08:50:29 +02:00
Even Rouault f4af2778eb Merge pull request #4108 from rouault/grammarErrorList
Add a WKTParser::grammarErrorList() method so that proj_create_from_wkt() can behave as documented
2024-04-02 20:44:45 +02:00
Even Rouault 8f7ae0e7b2 Merge pull request #4080 from rouault/consistency_checks_triggers
Database: rework a bit consistency checks triggers
2024-04-02 20:44:27 +02:00
Even Rouault 45f5694ae3 consistency_checks_triggers.sql: remove NKG exceptions related to unicity check of operation name 2024-04-02 19:23:54 +02:00
Even Rouault d6abd11fed nkg.sql: fix remaining duplicated transformation names 2024-04-02 19:23:54 +02:00
Even Rouault 59b194f1ab consistency_checks_triggers.sql: check that transformations with Geog3D to Geog2D+GravityRelatedHeight/Depth family of methods are properly registered 2024-04-02 14:21:50 +02:00
Even Rouault 42a97f9a97 consistency_checks_triggers.sql: add consistency check for 1st step of a concatenated operation 2024-04-02 14:21:50 +02:00
Even Rouault c1adccff36 Database: move final consistency checks on transformations as insert time triggers 2024-04-02 14:21:50 +02:00
Even Rouault b927c03a0b Database: move insertion triggers implementing consistency checks in a dedicated file
Can make it easier to disable them to speed the proj.db speed process
during some development scenarios.
2024-04-02 14:21:50 +02:00
Even Rouault ef3b9b86e4 Database: proj_db_table_defs.sql: remove no longer needed exception for EPSG:5375 "SIRGAS-Chile to WGS 84 (1)" 2024-04-02 14:21:06 +02:00
Kristian Evers 83ac84d944 Merge pull request #4098 from kbevers/unique-nkg-names
Make NKG Transformation names unique
2024-04-02 11:12:11 +00:00
Kristian Evers 36d75d30dd Make NKG Transformation names unique
A consequence of new database constrains introduced in #4071.
2024-04-02 12:38:04 +02:00
Even Rouault 7c97e3391d Add a WKTParser::grammarErrorList() method so that proj_create_from_wkt() can behave as documented 2024-03-28 18:46:41 +01:00
Even Rouault 72e6dbab11 Merge pull request #4107 from OSGeo/backport-4106-to-9.4
[Backport 9.4] Retry "Connection reset by peer"
2024-03-27 13:38:08 +01:00
Peter A. Jonsson 65fd97da33 Retry "Connection reset by peer"
Building the GDAL image can fail with:

Downloading https://cdn.proj.org/fr_ign_RAF18b.tif... (132 / 423)
Downloading https://cdn.proj.org/fr_ign_RAF20.tif... (133 / 423)
Downloading https://cdn.proj.org/fr_ign_RAGTBT2016.tif... (134 / 423)
Cannot open https://cdn.proj.org/fr_ign_RAGTBT2016.tif: OpenSSL SSL_read: Connection reset by peer, errno 104

so add the connection reset by peer
to the list of things that get a retry
time.
2024-03-27 11:44:52 +00:00
Even Rouault 70d4d32230 Merge pull request #4106 from pjonsson/retry-reset-by-peer
Retry "Connection reset by peer"
2024-03-27 12:42:36 +01:00
Peter A. Jonsson 7230712660 Retry "Connection reset by peer"
Building the GDAL image can fail with:

Downloading https://cdn.proj.org/fr_ign_RAF18b.tif... (132 / 423)
Downloading https://cdn.proj.org/fr_ign_RAF20.tif... (133 / 423)
Downloading https://cdn.proj.org/fr_ign_RAGTBT2016.tif... (134 / 423)
Cannot open https://cdn.proj.org/fr_ign_RAGTBT2016.tif: OpenSSL SSL_read: Connection reset by peer, errno 104

so add the connection reset by peer
to the list of things that get a retry
time.
2024-03-27 11:30:35 +01:00
Even Rouault 2ff88c7bca Merge pull request #4094 from rouault/cartesian_grid_offsets
Implement EPSG:9656 'Cartesian Grid Offsets' operation method, and import related records
2024-03-25 22:58:25 +01:00
Even Rouault e99882b596 Merge pull request #4093 from rouault/epsg_11_007
Database: update to EPSG v11.007, and other updates
2024-03-24 14:15:39 +01:00
Even Rouault 31ffa2b836 Merge pull request #4087 from rouault/faster_geodetic
Speed-up +proj=cart +inv
2024-03-24 14:15:11 +01:00
Even Rouault f9a967c9f8 Merge pull request #4105 from OSGeo/backport-4104-to-9.4
[Backport 9.4] Update roundtrip example in help text for cct
2024-03-24 14:13:52 +01:00
Kristian Evers 1ddece0683 Update roundtrip expample in help text for cct
Closes #4101
2024-03-24 11:46:43 +00:00
Kristian Evers ab4f65dccd Merge pull request #4104 from kbevers/cct-help
Update roundtrip expample in help text for cct
2024-03-24 11:46:19 +00:00
Kristian Evers 78cc41d49c Update roundtrip expample in help text for cct
Closes #4101
2024-03-24 10:46:34 +01:00
Mike Taves 071f7310b3 DOC: consistency via markdownlint; move AUTHORS to AUTHORS.md (#4096) 2024-03-21 23:36:45 +13:00
Even Rouault a3110b73bc Merge pull request #4095 from OSGeo/backport-4089-to-master
[Backport master] Doc: add note warning that stere/sterea are different things and …
2024-03-20 00:09:43 +01:00
Even Rouault 9aebac7dca Doc: add note warning that stere/sterea are different things and clarify their relationship with EPSG's Oblique Stereographic 2024-03-19 17:39:25 +00:00
Even Rouault 389f5619fe Merge pull request #4089 from rouault/doc_stere_sterea
Doc: add note warning that stere/sterea are different things and …
2024-03-19 18:34:24 +01:00
Even Rouault b1927ea29d Database: avoid now useless exception for 'NAD83(CSRS)v2 to NAD83(CSRS)v3 (1)' duplicate entry 2024-03-19 17:35:34 +01:00
Even Rouault c1957fddc7 windows.yml: make sure to run tests under bash so that a failure causes an error 2024-03-19 12:45:12 +01:00
Even Rouault 4d64a35d93 Implement EPSG:9656 'Cartesian Grid Offsets' operation method, and import related records 2024-03-19 12:42:54 +01:00
Even Rouault 7eb1c3a57e Recognize EPSG:1079 'New Zealand Deformation Model' and map it to +proj=defmodel, removing custom entries from other_transformation_custom.sql 2024-03-19 10:52:22 +01:00
Even Rouault 67f3402301 Operation Geographic3D Offset By Velocity Grid: use geodetic datum anchor epoch, now that NAD83(CSRS)vX datums have one since EPSG v11.007 2024-03-19 10:52:22 +01:00
Even Rouault f1b4e7237f Database: update to EPSG v11.007 2024-03-19 10:52:22 +01:00
Javier Jimenez Shaw 4f635b1376 [Doc] Rename NEWS and HOWTO-RELEASE to *.md (#4066)
* mv NEWS to NEWS.md

* mv HOWTO-RELEASE to HOWTO-RELEASE.md

* better formatting for replace command

* udpate CMakeLists.txt with HOWTO-RELEASE.md

* remove the indentation of the subsections: sed -i -e 's/^ //' NEWS.md

* Use markdown styles for sections

* Sections case consistent

* markdown: format alerts as blocks for readibility

* markdown: make lists of 'thanks to' more readable

* Remove README from the source dist
2024-03-18 22:32:55 +01:00
Even Rouault 17cd2d0ddd Merge pull request #4090 from OSGeo/backport-4079-to-9.4
[Backport 9.4] DatabaseContext::lookForGridInfo(): do not trigger network activity …
2024-03-18 01:52:16 +01:00
Even Rouault 863fa4aa75 Doc: add note warning that stere/sterea are different things and clarify their relationship with EPSG's Oblique Stereographic 2024-03-18 00:57:39 +01:00
Even Rouault 60f20de1bc Merge pull request #4091 from jjimenezshaw/mingw_w64-user-fail
[CI]: avoid failure in mingw_w64_build if .ccache doesn't exist
2024-03-16 21:00:10 +01:00
Even Rouault 2d22cf6810 geocentric_radius(): save a sqrt() 2024-03-16 20:59:49 +01:00
Even Rouault 36da998184 geocentric_radius(): reduce number of additions and multiplications 2024-03-16 20:24:35 +01:00
Even Rouault 73ebe8e68c +proj=cart +inv: use P->ra 2024-03-16 19:46:15 +01:00
Even Rouault 27561c1ac8 Speed-up +proj=cart +inv 2024-03-16 19:46:14 +01:00
Javier Jimenez Shaw e09d028053 CI: avoid failure if .ccache doesn't exist 2024-03-16 19:26:58 +01:00
Even Rouault ff8032df3f Merge pull request #4086 from rouault/backport_epsg_11_006
[Backport 9.4] Database: update to EPSG v11.006
2024-03-16 17:33:19 +01:00
Even Rouault 82ae265466 DatabaseContext::lookForGridInfo(): do not trigger network activity in PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE mode when all grids are known (fixes #4075) 2024-03-16 12:20:45 +00:00
Even Rouault b8354ebd8f Merge pull request #4079 from rouault/fix_4075
DatabaseContext::lookForGridInfo(): do not trigger network activity …
2024-03-16 13:18:09 +01:00
Even Rouault 0caf671083 projjson.rst: update reference to v0.7 schema (refs #4088) 2024-03-15 00:14:01 +01:00
Even Rouault 5f725fb720 projjson.rst: update reference to v0.7 schema (refs #4088) 2024-03-15 00:13:36 +01:00
Even Rouault 3925116eb2 DatabaseContext::lookForGridInfo(): do not trigger network activity in PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE mode when all grids are known (fixes #4075) 2024-03-14 18:11:06 +01:00
Javier Jimenez Shaw b31692e678 Database: update to EPSG v11.006 2024-03-14 18:09:06 +01:00
Even Rouault e6a051431a Merge pull request #4085 from jjimenezshaw/epsg-11.006
Database: update to EPSG v11.006
2024-03-14 18:03:45 +01:00
Javier Jimenez Shaw 49be0c2ae6 Database: update to EPSG v11.006 2024-03-14 17:23:40 +01:00
Javier Jimenez Shaw 385b9cecc9 do not create file builtin_authorities.sql 2024-03-14 17:23:32 +01:00
Even Rouault 294228ebbd Merge pull request #4083 from OSGeo/backport-4081-to-9.4
[Backport 9.4] Update geod.rst to reduce head scratching
2024-03-12 01:07:35 +01:00
Even Rouault 5a7e2bf60c Merge pull request #4082 from OSGeo/backport-4081-to-master
[Backport master] Update geod.rst to reduce head scratching
2024-03-12 01:07:31 +01:00
積丹尼 Dan Jacobson 76f4c9776e Update geod.rst to reduce head scratching 2024-03-11 09:56:26 +00:00
積丹尼 Dan Jacobson c92f159e8d Update geod.rst to reduce head scratching 2024-03-11 09:56:24 +00:00
Even Rouault ef7eb8c67a Merge pull request #4074 from rouault/pj_const
Make a few more functions that accept a 'PJ*' to actually acccept a 'const PJ*'
2024-03-09 14:30:37 +01:00
Even Rouault 7bda4e1890 Make a few more functions that accept a 'PJ*' to actually acccept a 'const PJ*' 2024-03-09 13:36:54 +01:00
Even Rouault 4d4f646ab0 Merge pull request #4071 from rouault/db_unique_names
Database: add constraint for unicity of CRS and operation names
2024-03-09 13:26:52 +01:00
Even Rouault 642b527652 Database: restrict the checks on name unicity to the 'official' authorities provided by upstream PROJ 2024-03-07 22:54:17 +01:00
Even Rouault a30fccfb51 Database: allow duplicate entry for 'ETRS89 to ETRS89 + Baltic 1957 height (1)' 2024-03-07 18:54:23 +01:00
Even Rouault ca6d01167a Merge pull request #4073 from rouault/fix_4070
HOWTO-RELEASE: mention updating the RTD global wildcard redirect (fixes #4070)
2024-03-07 18:53:51 +01:00
Even Rouault be66924fe8 Database: add constraint for unicity of CRS and operation names
More exactly on projected_crs, vertical_crs, compound_crs,
helmert_transformation, grid_transformation, other_transformation and
concatenated_operation tables.

Bump database layout version to 1.4
2024-03-07 18:45:53 +01:00
Even Rouault 1a5b48382e HOWTO-RELEASE: mention updating the RTD global wildcard redirect (fixes #4070) 2024-03-07 18:37:49 +01:00
Clifford Yapp 6106b16701 Update RELEASE to v9.4.0 2024-03-06 11:37:37 -05:00
Kristian Evers 23dc37959f Fix indentation error in docs/source/conf.py 2024-03-01 19:40:08 +01:00
Kristian Evers afeffdb734 Update sphinx config for RTD 2024-03-01 18:13:51 +01:00
Kristian Evers 3c7e4ee328 Bump versions numbers etc in preperation for version 9.5.0 2024-03-01 18:10:01 +01:00
Kristian Evers 7cd00d0b2c Update html docs for 9.4.0 2024-03-01 17:56:59 +01:00
Kristian Evers df8df3bc1b Update documentation for 9.3.1 release 2024-03-01 17:56:50 +01:00
Kristian Evers a05a9e2305 Update html docs for 9.4.0 2024-03-01 17:55:55 +01:00
Kristian Evers a259213ad5 Update documentation for 9.3.1 release 2024-03-01 17:37:43 +01:00
Kristian Evers 97c343cc1e Update PROJ-data version in docs 2024-02-26 17:07:02 +01:00
Kristian Evers cdcbfc1bcb Update CITATION files for 9.4.0 release 2024-02-26 17:05:25 +01:00
Kristian Evers 6b9dca8200 Update NEWS for 9.4.0 2024-02-26 17:03:21 +01:00
Kristian Evers a50ab98a28 Update man-pages from Sphinx-docs 2024-02-26 16:36:37 +01:00
Kristian Evers a67ff1206e Update man-pages from Sphinx-docs 2024-02-26 16:33:50 +01:00
Even Rouault 30847acfab Merge pull request #4064 from rouault/ci_conda_osx_arm64
CI: add support for Conda osx_arm64 builds
2024-02-25 21:11:46 +01:00
Even Rouault d3296b7f9b CI: add support for Conda osx_arm64 builds
Now that
https://github.com/conda-incubator/setup-miniconda/releases/tag/v3.0.2
has been released with support for them.
2024-02-25 21:09:57 +01:00
Even Rouault 170ea48ea5 Merge pull request #4063 from jjimenezshaw/pt-geoid
Add pt_dgt_GeodPT08.tif grid_alternative for Portuguese geoid model GeodPT08.dat
2024-02-25 12:02:15 +01:00
Javier Jimenez Shaw 44f0e89c67 Add pt_dgt_GeodPT08.tif to grid_alternatives.sql 2024-02-25 11:48:15 +01:00
Even Rouault 6ff93cbc8d Merge pull request #4062 from rouault/epsg_11_004
Database: update to EPSG v11.004
2024-02-25 11:11:16 +01:00
Even Rouault 86e023e36c codeql.yml: add 'sudo apt-get update' 2024-02-25 11:10:15 +01:00
Even Rouault 564d2b2fe0 Database: update to EPSG v11.004 2024-02-24 19:36:32 +01:00
Mike Taves b57acc864a Add more compiler warning flags (#4061)
* Add more compiler warning flags for GNU and Clang

* Resolve -Wdocumentation -Wno-documentation-deprecated-sync

* Resolve -Wzero-as-null-pointer-constant
2024-02-21 20:37:16 +01:00
Even Rouault 498d409835 Merge pull request #4059 from rouault/weffc++
Enable -Weffc++ for gcc and clang
2024-02-20 12:53:26 +01:00
Even Rouault 375a7c5e34 Enable -Weffc++ for gcc and clang 2024-02-20 11:58:15 +01:00
Even Rouault 81fecbc243 Another -Weffc++ warning fix 2024-02-20 11:50:23 +01:00
Even Rouault 26fb427e8d Fix -Weffc++ warnings 2024-02-20 11:35:59 +01:00
Even Rouault a3e5715132 Merge pull request #4058 from OSGeo/backport-4048-to-master
[Backport master] Update omerc.rst to show directly and indirectly given azimuth connection
2024-02-19 16:37:34 +01:00
Even Rouault 3638065ebe Merge pull request #4057 from OSGeo/backport-4049-to-master
[Backport master] Update omerc.rst to express two points connection
2024-02-19 16:37:29 +01:00
Even Rouault 99071b1946 Merge pull request #4044 from rouault/customizations_czechia
Tune concatenated operation instanciation, reference CR2005 geoid for Czechia and add (disabled by default) records for Czechia S-JTSK/05 based transformations
2024-02-19 16:20:10 +01:00
Even Rouault 94209fc1e5 Database: add transformations_czechia_extra.sql for transformations based on S-JTSK/05
For now this file is not integrated in the default build, due to
licensing of grid cz_cuzk_table_yx_3_v1710_east_north.tif being not clarified (work in progress with CUZK).
Thoat grid can be generated with the script https://github.com/OSGeo/PROJ-data/blob/master/cz_cuzk/convert_table_yx_3_v1710.py
2024-02-19 15:47:44 +01:00
Even Rouault 529114740e Database: add transformations_czechia.sql with CR2005 geoid for ETRS89 to Baltic 1957 height 2024-02-19 15:47:43 +01:00
Even Rouault b01d96698a customizations.sql: improve condition to create Geog3D->VertCRS transformation from Geog3D->Geog2D+VertCRS 2024-02-19 15:47:43 +01:00
Even Rouault 4ad46c60bf ConcatenatedOperation::fixStepsDirection(): invert first and last steps when needed 2024-02-19 14:50:25 +01:00
積丹尼 Dan Jacobson 097af607c7 Update omerc.rst to show directly and indirectly given azimuth connection
We must finally show the user the connection between the two input forms.
2024-02-19 13:26:26 +00:00
積丹尼 Dan Jacobson 4a83a67816 Update omerc.rst to express two points connection
We make sure the user understands how the two point and one point models interact.
2024-02-19 13:26:01 +00:00
積丹尼 Dan Jacobson e69395a761 Update omerc.rst to add vital caveat about the two-point method
It is imperative that users be informed about the vast difference of the two point method, undocumented till today!

See also
https://gis.stackexchange.com/questions/323570/proj-oblique-mercator-specifying-two-points-on-central-line/337169#337169
2024-02-19 09:44:30 +01:00
Kristian Evers 356496f7b6 Merge pull request #4055 from OSGeo/backport-4054-to-master
[Backport master] Update migration.rst
2024-02-17 09:46:31 +01:00
Carl Godkin f258dea390 Update migration.rst
Typo in "reimplemented in PROJ 6" example used "clrs66" in one case instead of "clrk66" so example didn't actually work.

I'd recommend #include <cmath> for the top too to pick up HUGE_VAL, but that isn't vital.

Thanks!
2024-02-17 08:19:09 +00:00
Mike Taves 6e0c182537 Freeze hard-coded prime meridians and note they are no longer updated (#4042)
* Legacy hard-coded prime meridians are no longer updated
* Expand docs for angular units, add another prime meridian example
2024-02-16 09:18:43 +13:00
Even Rouault 7e50b16b02 Merge pull request #4047 from jjimenezshaw/proj-ns-macro
Use NS_PROJ macro instead of osgeo::proj
2024-02-10 12:45:54 +01:00
Javier Jimenez Shaw ad81dd9c55 Use NS_PROJ macro instead of osgeo::proj Closes #4046 2024-02-10 11:18:44 +01:00
Even Rouault 364708dbb0 Merge pull request #4038 from rouault/gridshift_projected
+proj=gridshift: enhance to support grids referenced in projected CRS, and with easting_offset/northing_offset corrections
2024-02-09 13:53:38 +01:00
Even Rouault e36f581012 geodetictiffgrids.rst spec: enhance to support grids referenced in projected CRS, and with easting_offset/northing_offset corrections 2024-02-06 15:34:34 +01:00
Even Rouault b74adbdafa +proj=gridshift: enhance to support grids referenced in projected CRS, and with easting_offset/northing_offset corrections 2024-02-06 15:34:34 +01:00
Even Rouault af8a4edc4e Merge pull request #4034 from rouault/projstringformatter_krovak
PROJString formatter optimizer: simplify pipelines doing [Modified]Krovak (South West) <--> [Modified]Krovak (East North)…
2024-02-06 00:43:45 +01:00
Even Rouault d24bd04309 PROJString formatter optimizer: simplify pipelines doing [Modified]Krovak (South West) <--> [Modified]Krovak (East North) by just doing an axis swap 2024-02-03 16:45:32 +01:00
Even Rouault a3b225fc9e Fix typo in comment 2024-02-03 13:08:32 +01:00
Even Rouault 704767f84f Merge pull request #4021 from rouault/mod_krovak
Add +proj=mod_krovak projection method for Modified Krovak that applies to S-JTSK/05 in the Czech Republic
2024-02-03 00:20:11 +01:00
Kristian Evers 1391fce4e5 Fix example 3 in cct.rst
Closes #4017
2024-02-02 12:15:12 +01:00
Even Rouault 828a4722ca Add +proj=mod_krovak projection method for Modified Krovak that applies to S-JTSK/05 in the Czech Republic
Validated with the test point given in EPSG Guidance Note 7-2

Also validated with CUZK online calculator at https://geoportal.cuzk.cz/(S(g4ipaut0ckzb5lellu153lvf))/Default.aspx?head_tab=sekce-01-gp&mode=TextMeta&text=wcts&menu=19

Unfortunately this calculator does not offer 'elementary'
transformations, and cannot just validate Modified Krovak alone.
The best we can do is to use ETRS89 <--> S-JTSK/05 / Krovak modified,
which involves a Helmert transformation as well for the datum
transformation.

* Validation of reverse modified Krovak:

  Online calculator:
  - Souřadnice/input: -5568990.91 -6050538.71 100
  - Source CRS: S-JTSK/05 + Bpv (-Y-XH /east-north)
  - Destination CRS: ETRS89 (BLh / DEG)
  - Výsledek/result: 50.208297081 16.848326835 143.762

  With PROJ:
  echo -5568990.91 -6050538.71 100 | bin/cs2cs -d 9 EPSG:5516 EPSG:4937 --3d
  50.208297081 16.848326833 143.143233569

  Note the different on longitude is totally neglectable: 0.1 mm, as computed by:

  $ echo 50.208297081 16.848326835 50.208297081 16.848326833 | bin/geod -F "%.4f" -I +ellps=GRS80
  -90d 90d 0.0001

  and that when outputing Krovak modified, the online calculator displays Y/X with
  a precision of 1 cm.

  The difference on Z is significant, but can be explained from the fact that
  the online calculator using Baltic Height for S-JTSK/05 and thus apply a
  Baltic Height<-->ETRS89 geoid that we don't apply here.

* Validation of forward Krovak using same point:

  Online calculator:
  - Souřadnice/input: 50.208297081 16.848326835 143.762
  - Source: ETRS89 (BLh / DEG)
  - Destination: S-JTSK/05 + Bpv (-Y-XH /east-north)
  - Výsledek/result: -5568990.91 -6050538.71 100

  With PROJ:
  $ echo 50.208297081 16.848326835 143.762 | bin/cs2cs -d 2 EPSG:4937 EPSG:5516 --3d
  -5568990.91 -6050538.71 100.62
2024-02-01 23:21:23 +01:00
Even Rouault 50e8dd72bc Merge pull request #4028 from OSGeo/dependabot/github_actions/conda-incubator/setup-miniconda-3
build(deps): bump conda-incubator/setup-miniconda from 2 to 3
2024-02-01 02:10:48 +01:00
Even Rouault b5399f5d65 Merge pull request #4027 from OSGeo/dependabot/github_actions/docker/setup-buildx-action-3
build(deps): bump docker/setup-buildx-action from 2 to 3
2024-02-01 02:10:34 +01:00
Even Rouault b92ffadc18 Merge pull request #4026 from OSGeo/dependabot/github_actions/docker/login-action-3
build(deps): bump docker/login-action from 2 to 3
2024-02-01 02:10:21 +01:00
Even Rouault e47fea99d4 Merge pull request #4025 from OSGeo/dependabot/github_actions/docker/build-push-action-5
build(deps): bump docker/build-push-action from 4 to 5
2024-02-01 02:10:13 +01:00
Even Rouault e0894effd4 Merge pull request #4024 from OSGeo/dependabot/github_actions/actions/stale-9
build(deps): bump actions/stale from 8 to 9
2024-02-01 02:10:01 +01:00
dependabot[bot] cb66c3702c build(deps): bump conda-incubator/setup-miniconda from 2 to 3
Bumps [conda-incubator/setup-miniconda](https://github.com/conda-incubator/setup-miniconda) from 2 to 3.
- [Release notes](https://github.com/conda-incubator/setup-miniconda/releases)
- [Changelog](https://github.com/conda-incubator/setup-miniconda/blob/main/CHANGELOG.md)
- [Commits](https://github.com/conda-incubator/setup-miniconda/compare/v2...v3)

---
updated-dependencies:
- dependency-name: conda-incubator/setup-miniconda
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-31 23:45:56 +00:00
dependabot[bot] 80a4925be4 build(deps): bump docker/setup-buildx-action from 2 to 3
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-31 23:45:52 +00:00
dependabot[bot] 997ef2fce1 build(deps): bump docker/login-action from 2 to 3
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-31 23:45:49 +00:00
dependabot[bot] a9731217ac build(deps): bump docker/build-push-action from 4 to 5
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 5.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-31 23:45:45 +00:00
dependabot[bot] ba2f2a2598 build(deps): bump actions/stale from 8 to 9
Bumps [actions/stale](https://github.com/actions/stale) from 8 to 9.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-31 23:45:40 +00:00
Even Rouault 905c9a6c2d Merge pull request #4023 from mwtoews/update-actions
CI: upgrade versions for various actions/*
2024-02-01 00:45:09 +01:00
Even Rouault c9cbcf97cb Merge pull request #4022 from rouault/ci_permissions
CI: add missing permissions section to .yml files
2024-01-31 23:24:33 +01:00
Mike Taves 3eeb0a22e2 Add dependabot for future github-actions updates 2024-02-01 11:00:27 +13:00
Mike Taves f4d4bc7edf CI: upgrade versions for various actions/* 2024-02-01 10:32:31 +13:00
Even Rouault be7d344571 CI: add missing permissions section to .yml files
OpenSSF Scorecard report complains about the lack of it:
https://securityscorecards.dev/viewer/?uri=github.com/OSGeo/PROJ ('Token-Permissions')
2024-01-31 21:18:54 +01:00
Even Rouault 3cc757fb8a Merge pull request #4020 from rouault/ci_mac_arm64
CI: add a M1 ARM64 MacOS runner
2024-01-31 10:40:45 +01:00
Even Rouault 107c80adaf Merge pull request #4019 from rouault/move_experimental_to_stable
Move content of proj_experimental.h to proj.h
2024-01-31 10:40:35 +01:00
Mike Taves b6ccd389f2 Ensure directory exists for PROJ_DB_CACHE_DIR 2024-01-31 13:40:55 +13:00
Even RouaultandHoward Butler 81b1368981 CI: add a M1 ARM64 MacOS runner
Co-authored-by: Howard Butler <hobu.inc@gmail.com>
2024-01-30 22:55:29 +01:00
Even Rouault a54fe6cdf6 test/gie/builtins.gie: relax a bit tolerance on +proj=vandg test for Mac M1 ARM64 2024-01-30 22:55:23 +01:00
Even Rouault 22d15f60a8 proj_create_conversion_tunisia_mining_grid(): fix mixed-up deprecation / since tags 2024-01-30 22:41:35 +01:00
Even Rouault 4bc8a5a049 Doc: reference C API that used to be proj_experimental.h 2024-01-30 03:09:58 +01:00
Even Rouault c3032fb3b3 Move content of proj_experimental.h to proj.h
Those functions have been used for ages by GDAL 3.X. They are not so much
"experimental" nowadays.

No backward compatibility issue as proj_experimental.h includes proj.h
2024-01-29 21:02:48 +01:00
Even Rouault fee3ebbd24 Merge pull request #4018 from rouault/database_esri
Database (ESRI): use the deprecation table instead of the supersession table for deprecated ESRI CRS (as done with EPSG objects)
2024-01-29 20:15:32 +01:00
Even Rouault e31195ffaf Merge pull request #4014 from rouault/pipeline_error_msg
Pipeline instanciation: better error message when an inverse operation is needed in forward path and not available
2024-01-29 18:50:23 +01:00
Even Rouault 9866bef281 Database (ESRI): do not add an entry in deprecated table for a deprecated CRS that would be obsoleted by a deprecated EPSG CRS 2024-01-29 18:34:47 +01:00
Even Rouault 48ca579724 Database (ESRI): use the deprecation table instead of the supersession table for deprecated ESRI CRS (as done with EPSG objects) 2024-01-29 18:34:38 +01:00
積丹尼 Dan Jacobson 03a4ee47bf pipeline.rst: add example for +inv 2024-01-28 16:17:36 +01:00
積丹尼 Dan Jacobson ac439d5e02 proj: add a hint in error message about using cct when relevant (#4016)
Fixes #4013.
2024-01-28 15:47:49 +01:00
Even Rouault c9c133d847 Merge pull request #4011 from OSGeo/backport-4010-to-master
[Backport master] projections.rst: specify that +a and +b are always in metres
2024-01-27 16:04:51 +01:00
Even Rouault 8aa3f4bdf0 Pipeline instanciation: better error message when an inverse operation is needed in forward path and not available
and fix a copy-paste error where fwd4d was tested instead of inv4d

Before:
```
$ echo 0 0 | bin/cs2cs +proj=isea +to +proj=longlat
pipeline: Pipeline: A forward operation couldn't be constructed
```

Now:
```
$ echo 0 0 | bin/cs2cs +proj=isea +to +proj=longlat
pipeline: Pipeline: Inverse operation for isea is not available
```

Slightly related to https://github.com/OSGeo/gdal/issues/9149
2024-01-27 15:58:41 +01:00
Even Rouault 47f84dc78a proj_get_area_of_use_ex(): remove non relevant sentence from documentation 2024-01-25 20:05:43 +01:00
Even Rouault 5c7bf5332e projections.rst: specify that +a and +b are always in metres 2024-01-24 22:22:18 +00:00
Even Rouault 5920e29983 Merge pull request #4009 from rouault/fix_4008
tpeqd: use numerically stable formula for computing the central angle from (phi_1, lam_1) to (phi_2, lam_2) (fixes #4008)
2024-01-22 19:29:28 +01:00
Even Rouault 7cc20dd627 tpeqd: use numerically stable formula for computing the central angle from (phi_1, lam_1) to (phi_2, lam_2) (fixes #4008) 2024-01-19 19:29:08 +01:00
Even Rouault f377ffa7d6 Merge pull request #4007 from mwtoews/cmake-sqlite3-built-in
CMake: Replace custom FindSqlite3 with FindSQLite3 built-in
2024-01-18 14:20:48 +01:00
Mike Taves 8e3dd24cac CMake: Replace custom FindSqlite3 with FindSQLite3 built-in 2024-01-18 12:02:32 +13:00
Even Rouault ac0b9fc001 Merge pull request #4006 from mwtoews/cmake-fetchcontent-googletest
CMake: use FetchContent to get googletest-1.12.1
2024-01-17 19:38:51 +01:00
Mike Taves 7160e0a052 CMake: use FetchContent to get googletest-1.12.1 2024-01-17 22:50:32 +13:00
Even Rouault 078eaa4db2 scripts/cppcheck.sh: tune for latest cppcheck 2024-01-17 00:47:49 +01:00
Even Rouault d55ee2aea0 Remove unused private members 2024-01-17 00:47:39 +01:00
Even Rouault a18091862a Add 'explicit' keyword for constructor 2024-01-17 00:47:08 +01:00
Even Rouault e8af2479a4 SingleOperation::exportToPROJStringGeneric(): fix wrong test/copy-error (master only) 2024-01-17 00:37:11 +01:00
Even Rouault dc8485e1f8 Merge pull request #4003 from rouault/epsg_11_003
Database: update to EPSG v11.003
2024-01-16 09:00:16 +01:00
Even Rouault 343b4fe9e7 Merge pull request #4005 from dg0yt/patch-1
Use find_dependency(SQLite3)
2024-01-16 09:00:06 +01:00
Kai Pastor efc6c95b69 Use find_dependency(SQLite3)
Amends #3987.
2024-01-16 06:11:28 +01:00
Even Rouault ce816acdb4 Database: update to EPSG v11.003 2024-01-15 21:14:52 +01:00
Even Rouault 86c4e753e5 Merge pull request #4002 from rouault/coverity
Fix Coverity performance inefficiencies warnings
2024-01-15 19:32:50 +01:00
Erixen Cruz 8cfeba743e CMake: link to explicit SQLite3 target (#3987) 2024-01-15 19:32:35 +01:00
Even Rouault 0bf4edea44 Fix Coverity performance inefficiencies warnings 2024-01-14 19:36:16 +01:00
Even Rouault 1a4e78e6aa proj_create_crs_to_crs_from_pj(): simplify code 2024-01-14 19:25:48 +01:00
Mike Taves 95db9aa0ec Increase CMake minimum version from 3.9 to 3.16 (#3997) 2024-01-14 13:11:35 +01:00
Even Rouault a50673d196 Merge pull request #3998 from rouault/codeql
Add CodeQL static analyzer, and fix related warnings
2024-01-11 12:12:42 +01:00
Kristian Evers 35ea077f51 Merge pull request #3999 from jidanni/patch-2
Update eqc.rst
2024-01-11 07:18:56 +01:00
積丹尼 Dan Jacobson 60a1a2366d Update eqc.rst
Grammar.
2024-01-11 10:58:48 +08:00
Even Rouault 812f2339e0 emess(): avoid potential unsafe uses 2024-01-10 12:51:29 +01:00
Even Rouault aae23e4119 DatabaseContext::Private::attachExtraDatabases(): fix false-positive CodeQL cpp/sql-injection 2024-01-10 12:51:29 +01:00
Even Rouault ffc9f62c30 io.cpp: avoid CodeQL cpp/integer-multiplication-cast-to-long false positives 2024-01-10 12:51:28 +01:00
Even Rouault 91471929c4 Avoid CodeQL cpp/tainted-format-string warnings 2024-01-10 12:51:28 +01:00
Even Rouault 82ff0fe045 geod: fix potential use of invalid formatting string being passed to fprintf() on an invalid input file 2024-01-10 12:51:28 +01:00
Even Rouault e3887e020d cs2cs: fix potential use of invalid formatting string being passed to fprintf() on an invalid input file 2024-01-10 12:51:28 +01:00
Even Rouault dfdb4f486e Add .github/workflows/codeql.yml 2024-01-10 12:51:28 +01:00
Even Rouault 53b8bd4bae test/fuzzers/build.sh: actually build curl without libpsl 2024-01-10 12:51:18 +01:00
Even Rouault d9ca25cd75 test/fuzzers/build.sh: add missing -lunistring -lidn2 2024-01-10 12:39:21 +01:00
Even Rouault 5f2288eb1e test/fuzzers/build.sh: add missing -lpsl 2024-01-10 12:33:20 +01:00
Even Rouault e69770bf68 test/fuzzers/build.sh: fix curl build 2024-01-10 12:29:07 +01:00
Javier Jimenez Shaw 5587e5747f Merge pull request #3993 from jjimenezshaw/lost-resouce-links
[doc]: remove unneeded or broken links in resource_files.rst
2024-01-09 17:41:29 +01:00
Javier Jimenez Shaw 41ee7cf6dc [doc]: remove unneeded or broken links in resource_files.rst 2024-01-09 15:49:50 +01:00
Even Rouault ee1b7621f0 Merge pull request #3991 from OSGeo/rouault-patch-3
projjson.rst: point to spatialreference.org
2024-01-09 14:37:42 +01:00
Even Rouault 92628b3436 Merge pull request #3990 from rouault/createOperationsCompoundToGeog_tune
createOperationsCompoundToGeog(): tune selection logic when --grid-check known_available is specified
2024-01-09 14:37:22 +01:00
Even Rouault 8b1a5bde1c projjson.rst: point to spatialreference.org 2024-01-09 01:29:32 +01:00
Even Rouault 9697f59a0e createOperationsCompoundToGeog(): tune selection logic when --grid-check known_available is specified 2024-01-08 17:34:41 +01:00
Even Rouault fac122d8fd Merge pull request #3988 from rouault/epsg_11_002
update to EPSG 11.002,  add a anchor_epoch column to geodetic_datum and vertical_datum tables
2024-01-08 13:41:55 +01:00
Even Rouault 2428e7d4ec Merge pull request #3989 from rouault/coverity_perf_warnings
Fix most Coverity Scan performance warnings
2024-01-08 12:57:48 +01:00
Even Rouault 172d785c29 verticalOffsetByVelocity transformation: use vertical datum anchor epoch 2024-01-08 12:56:11 +01:00
Even Rouault ad4d5ea85a Add a anchor_epoch column to geodetic_datum and vertical_datum tables 2024-01-08 12:56:11 +01:00
Even Rouault 7232d5e5e5 Fix most Coverity Scan performance warnings 2024-01-07 20:52:09 +01:00
Even Rouault 438e30bfa5 Database: update to EPSG 11.002 2024-01-07 15:33:24 +01:00
Even Rouault ba8b2a7fd9 Map ESRI Azimuthal_Equidistant to EPSG:1125 2024-01-07 15:33:24 +01:00
Even Rouault 7ce0c84f65 Conversion::createAzimuthalEquidistant(): map it to EPSG_CODE_METHOD_AZIMUTHAL_EQUIDISTANT 2024-01-07 15:33:23 +01:00
Even Rouault 40bf8dc75e Add EPSG:1125 Azimuthal Equidistant projection 2024-01-07 15:33:23 +01:00
Kristian Evers ef276d39d9 Merge pull request #3986 from kbevers/update-dvr90
Add new DVR90 grids to grid alternatives
2024-01-04 23:57:04 +01:00
Kristian Evers 5498e6838e Update grid_alternatives with new DVR90 grids 2024-01-04 21:29:39 +01:00
Even Rouault c801307298 Merge pull request #3985 from rouault/biquadratic_inverse
+proj=gridshift: do not apply iteration in the reverse path with +interpolation=biquadratic
2024-01-04 21:11:23 +01:00
Kristian Evers eaebbe289a Remove non-EPSG DVR90 transformation from DB
This grid transformation is now available from the EPSG-database and can
now be removed.
2024-01-04 20:19:19 +01:00
Even Rouault c7d41bb876 +proj=gridshift: do not apply iteration in the reverse path with +interpolation=biquadratic
As NOAA NCAT transformation tool does.
Otherwise we may get convergence errors on points that are close to the boundary of
cells or half-cells.
2024-01-03 14:18:14 +01:00
Even Rouault 5ebe855f43 proj.h: add PROJ_ERR_COORD_TRANSFM_NO_CONVERGENCE error code 2024-01-03 14:14:45 +01:00
Even Rouault b302a91ace Merge pull request #3984 from rouault/doxygen_1_10
Doxyfile: avoid warning with Doxygen 1.10
2023-12-31 12:15:26 +01:00
Even Rouault 044f499f70 Doxyfile: avoid warning with Doxygen 1.10 2023-12-30 20:42:27 +01:00
Even Rouault f743ac7f4f Merge pull request #3982 from OSGeo/backport-3981-to-master
[Backport master] Fix `projsync --system-directory` command in install guide
2023-12-21 13:49:25 +01:00
DeflateAwning fe4c2ed7d0 Fix projsync --system-directory command in install guide
Also added a comma
2023-12-20 21:17:55 +00:00
Even Rouault 657c69c693 Merge pull request #3979 from rouault/ccache_warning
cmake/Ccache.cmake: raise cmake_minimum_required() as newer CMake versions warn that support for CMake < 3.5 is going to be dropped at some later point
2023-12-09 00:15:45 +01:00
Even Rouault 389226065b cmake/Ccache.cmake: raise cmake_minimum_required() as newer CMake versions warn that support for CMake < 3.5 is going to be dropped at some later point 2023-12-08 19:19:44 +01:00
Even Rouault f6f763f1fb Merge pull request #3978 from rouault/database_no_kv_CD_above_Ell_ETRS89_v2023b
Database: add entry in grid_alternatives for ChartDatum_above_Ellipsod_EUREF89_v2023b.bin / no_kv_CD_above_Ell_ETRS89_v2023b.tif
2023-12-08 08:54:28 +01:00
Even Rouault f33434ba6c Merge pull request #3974 from gitartpiano/master
if(WIN32) add shell32 and ole32 libraries in lib_proj.cmake
2023-12-08 08:49:32 +01:00
Even Rouault f5303791bb Database: add entry in grid_alternatives for ChartDatum_above_Ellipsoid_EUREF89_v2023b.bin / no_kv_CD_above_Ell_ETRS89_v2023b.tif
The transformation had been added in EPSG 11.001

```
$ echo 61.101 4.484  | PROJ_DATA=data:/home/even/proj/PROJ-data/no_kv PROJ_DEBUG=2 bin/cs2cs EPSG:4258+9672 EPSG:4937
pj_open_lib(proj.ini): call fopen(data/proj.ini) - succeeded
pj_open_lib(proj.db): call fopen(data/proj.db) - succeeded
pj_open_lib(ChartDatum_above_Ellipsoid_EUREF89_v2021b.bin): call fopen(/home/even/proj/PROJ-data/no_kv/ChartDatum_above_Ellipsoid_EUREF89_v2021b.bin) - failed
pj_open_lib(no_kv_CD_above_Ell_ETRS89_v2023b.tif): call fopen(/home/even/proj/PROJ-data/no_kv/no_kv_CD_above_Ell_ETRS89_v2023b.tif) - succeeded
pj_open_lib(no_kv_CD_above_Ell_ETRS89_v2021a.tif): call fopen(/home/even/proj/PROJ-data/no_kv/no_kv_CD_above_Ell_ETRS89_v2021a.tif) - succeeded
pj_open_lib(no_kv_CD_above_Ell_ETRS89_v2023b.tif): call fopen(/home/even/proj/PROJ-data/no_kv/no_kv_CD_above_Ell_ETRS89_v2023b.tif) - succeeded
pj_open_lib(no_kv_CD_above_Ell_ETRS89_v2021a.tif): call fopen(/home/even/proj/PROJ-data/no_kv/no_kv_CD_above_Ell_ETRS89_v2021a.tif) - succeeded
Using coordinate operation Inverse of ETRS89 to CD Norway depth (4)
pj_open_lib(no_kv_CD_above_Ell_ETRS89_v2023b.tif): call fopen(/home/even/proj/PROJ-data/no_kv/no_kv_CD_above_Ell_ETRS89_v2023b.tif) - succeeded
61d6'3.6"N	4d29'2.4"E 44.496
```
2023-12-08 00:29:03 +01:00
Jochem-L decf6afd80 Update horner.rst (#3964)
Update horner.rst with improved description of polynomium coefficient order
2023-12-05 09:57:25 +01:00
Kristian Evers 68487a394c Merge pull request #3975 from OSGeo/busstoptaktik-patch-1
Improve error message in axisswap
2023-12-04 20:05:12 +01:00
Thomas Knudsen 6cd2331874 Improve error message in axisswap
The test for parameters in axisswap actually is a bit convoluted, but
in essence it checks both whether ANY of the 'axis' and 'order'
parameters are given, and whether BOTH are given.

Hence, the error message

"order and axis parameters are mutually exclusive"

is misleading in the case where none of the two is given.
The updated message:

"must provide EITHER 'order' OR 'axis' parameter"

is intended to cover both cases in an informative way
2023-12-04 17:16:30 +01:00
gitartpiano 2ee202f045 if(WIN32) add shell32 and ole32 libraries in lib_proj.cmake
to fix missing symbols at link time for windows target as described in https://github.com/OSGeo/PROJ/issues/2983
2023-12-04 08:24:23 -06:00
Even Rouault 167e99d2b9 Merge pull request #3973 from rouault/epsg_11_001
Database: update to EPSG 11.001, and update PROJ_DATA.VERSION to 1.17
2023-12-02 00:11:07 +01:00
Kristian Evers 0f2922e1bb Update documentation for 9.3.1 release 2023-12-01 20:22:25 +01:00
Even Rouault ffce4a6b08 Database: reference RAC23.mnt --> fr_ign_RAC23.tif, and update PROJ_DATA.VERSION to 1.17 2023-11-30 20:19:34 +01:00
Even Rouault 2b33272531 Database: update to EPSG 11.001 2023-11-30 19:49:55 +01:00
Even Rouault 8b22f81820 Merge pull request #3962 from rouault/cmake_UNITY_BUILD
Make build compatible of -DCMAKE_UNITY_BUILD=ON for faster builds
2023-11-29 19:03:51 +01:00
Even Rouault ce39a398b4 Merge pull request #3972 from jjimenezshaw/no-copy-axisdirection
Remove copy and move constructors from AxisDirection
2023-11-29 18:32:31 +01:00
Javier Jimenez Shaw ac372038f5 remove copy and move constructors from AxisDirection 2023-11-29 16:59:50 +01:00
Even Rouault 7786334ada Merge pull request #3971 from OSGeo/busstoptaktik-patch-1
Repair logging messages in axisswap
2023-11-27 16:45:43 +01:00
Even Rouault 1de33f552f Merge pull request #3969 from rouault/ci_docker_set_output
docker.yml: replace depecated 'echo ::set-output name=KEY::VALUE' with echo 'name=value' >> $GITHUB_OUTPUT
2023-11-27 16:45:32 +01:00
Thomas Knudsen 4704ef816d Repair logging messages in axisswap
With this commit, `axisswap` no longer presents itself as `swapaxis` in the logging messages.
2023-11-27 14:08:55 +01:00
Kristian Evers 89d06fa487 Update NEWS for 9.3.1 2023-11-26 17:49:26 +01:00
Kristian Evers d24521611e Update NEWS for 9.3.1 2023-11-26 16:55:53 +01:00
Even Rouault 6ab266821e Merge pull request #3970 from fedeliallalinea/install-geotiff
Database: added ability to install *.tif if present in data
2023-11-26 16:41:07 +01:00
Kristian Evers bd00bf31b5 Update man-pages from Sphinx-docs 2023-11-26 16:22:00 +01:00
Kristian Evers b3dcb78bef Update man-pages from Sphinx-docs 2023-11-26 16:12:34 +01:00
Kristian Evers 64a7e2ec1a Update version numbers for 9.3.1 release 2023-11-26 16:10:51 +01:00
Marco Genasci afccfb609d Database: added ability to install *.tif if present in data 2023-11-26 08:40:45 +01:00
Even Rouault 2e948326e2 docker.yml: replace depecated 'echo ::set-output name=KEY::VALUE' with echo 'name=value' >> $GITHUB_OUTPUT 2023-11-25 20:25:35 +01:00
Even Rouault 24922a0146 Merge pull request #3968 from OSGeo/backport-3966-to-9.3
[Backport 9.3] DatabaDatabase: update to EPSG 10.098
2023-11-24 15:59:28 +01:00
Even Rouault 21eaf1e305 Merge pull request #3967 from OSGeo/backport-3965-to-9.3
[Backport 9.3] Database: ESRI: fix wrong definition of Geographic 3D CRS that were imported as 2D
2023-11-24 15:10:50 +01:00
Even Rouault 553c96329f DatabaDatabase: update to EPSG 10.098 2023-11-24 12:57:27 +00:00
Even Rouault 495a84cb21 Database: ESRI: fix wrong definition of Geographic 3D CRS that were imported as 2D 2023-11-24 12:57:02 +00:00
Kristian Evers 6fe5e9605b Merge pull request #3966 from rouault/epsg_10_098
DatabaDatabase: update to EPSG 10.098
2023-11-24 13:57:01 +01:00
Kristian Evers 994da9f3f8 Merge pull request #3965 from rouault/fix_esri_geographic3D
Database: ESRI: fix wrong definition of Geographic 3D CRS that were imported as 2D
2023-11-24 13:56:40 +01:00
Even Rouault e964ecf6fa DatabaDatabase: update to EPSG 10.098 2023-11-24 12:48:50 +01:00
Even Rouault 6903a61f85 Database: ESRI: fix wrong definition of Geographic 3D CRS that were imported as 2D 2023-11-24 12:37:39 +01:00
Even Rouault 3edd0f26d0 install.rst: document CMAKE_UNITY_BUILD 2023-11-23 16:10:50 +01:00
Even Rouault d7caaab477 Remove now useless '#define PJ_LIB_' 2023-11-23 14:40:46 +01:00
Even Rouault 92762140d7 Merge pull request #3961 from OSGeo/backport-3960-to-9.3
[Backport 9.3] horner: allow arbitrary input type of coordinate
2023-11-23 04:58:20 +01:00
Even Rouault 850c6abf7e windows.yml: test -DCMAKE_UNITY_BUILD=ON 2023-11-23 03:18:15 +01:00
Even Rouault 8e98497b15 travis/install.sh: test -DCMAKE_UNITY_BUILD=ON 2023-11-23 03:18:15 +01:00
Even Rouault 35ddd24dc6 Various fixes to make cmake -DCMAKE_UNITY_BUILD=ON work 2023-11-23 03:18:14 +01:00
Even Rouault 8a997a76e9 lru_cache.hpp: avoid conflict with osgeo::proj::operation::k 2023-11-23 03:04:29 +01:00
Even Rouault 3c83daa6f0 tests: tune/disable CMAKE_UNITY_BUILD 2023-11-23 02:36:43 +01:00
Even Rouault e5fcda6ede apps/CMakeLists.txt: disable CMAKE_UNITY_BUILD 2023-11-23 02:36:21 +01:00
Even Rouault af74bc1954 horner: allow arbitrary input type of coordinate
Avoids workaround of https://lists.osgeo.org/pipermail/proj/2023-November/011167.html
to be able to deal with geographic coordinates
2023-11-22 13:18:32 +00:00
Even Rouault 25f93fc8ec Merge pull request #3960 from rouault/horner_whatever
horner: allow arbitrary input type of coordinate
2023-11-22 14:04:19 +01:00
Even Rouault b65b88a77a horner: allow arbitrary input type of coordinate
Avoids workaround of https://lists.osgeo.org/pipermail/proj/2023-November/011167.html
to be able to deal with geographic coordinates
2023-11-21 21:21:32 +01:00
Even Rouault 9ac24b04a6 Merge pull request #3958 from OSGeo/backport-3957-to-9.3
[Backport 9.3] Make sure test of 1f9b636b0a is actually run
2023-11-19 23:24:30 +01:00
Even Rouault 548823527b Make sure test of 1f9b636b0a is actually run 2023-11-19 20:36:47 +00:00
Even Rouault f759fe597a Merge pull request #3957 from rouault/testvarious_fix
Make sure test of 1f9b636b0a is actually run
2023-11-19 21:34:27 +01:00
Even Rouault 36bb10c0d4 Merge pull request #3956 from OSGeo/backport-3955-to-9.3
[Backport 9.3] Move static NameSpace::GLOBAL definition in static.cpp to avoid 'static initialization fiasco' (fixes various Coverity warnings)
2023-11-19 21:06:28 +01:00
Even Rouault 4935b6f87e Make sure test of 1f9b636b0a is actually run 2023-11-19 20:19:51 +01:00
Even Rouault 72de8f757c Fix importing '+proj=topocentric ... +type=crs' by using a geocentric CRS as the base CRS
Fixes https://lists.osgeo.org/pipermail/proj/2023-October/011153.html
2023-11-19 20:18:03 +01:00
Even Rouault 5106abdd64 Move static NameSpace::GLOBAL definition in static.cpp to avoid 'static initialization fiasco' (fixes various Coverity warnings) 2023-11-19 19:10:33 +00:00
Even Rouault 72f9084602 Merge pull request #3955 from rouault/coverity_GLOBAL_INIT_ORDER
Move static NameSpace::GLOBAL definition in static.cpp to avoid 'static initialization fiasco' (fixes various Coverity warnings)
2023-11-19 20:10:07 +01:00
Even Rouault d1314c06d8 Move static NameSpace::GLOBAL definition in static.cpp to avoid 'static initialization fiasco' (fixes various Coverity warnings) 2023-11-19 19:47:03 +01:00
Even Rouault c0a118f46d Merge pull request #3954 from rouault/backport_pr_3952
[Backport 9.3] pj_get_suggested_operation(): tune it to give correct result for RGAF09 to RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height transformation
2023-11-17 13:05:10 +01:00
Even Rouault 93a42eb2d9 pj_get_suggested_operation(): tune it to give correct result for RGAF09 to RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height transformation 2023-11-17 11:13:21 +01:00
Even Rouault b124309904 Merge pull request #3952 from rouault/guadeloupe_transformation
pj_get_suggested_operation(): tune it to give correct result for RGAF09 to RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height transformation
2023-11-17 10:41:18 +01:00
Even Rouault 1f9b636b0a pj_get_suggested_operation(): tune it to give correct result for RGAF09 to RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height transformation 2023-11-17 00:05:04 +01:00
Even Rouault d33156974b Merge pull request #3950 from OSGeo/backport-3949-to-9.3
[Backport 9.3] proj_factor: fix when input is a compound CRS of a projected CRS, and…
2023-11-14 19:37:13 +01:00
Even Rouault dc01f9c4ff proj: projection factors: fix when input is a compound CRS of a projected CRS, and a projected CRS whose datum has a non-Greenwich prime meridian 2023-11-13 21:44:17 +00:00
Even Rouault e04c6a6c64 proj_factor: fix when input is a compound CRS of a projected CRS, and a projected CRS whose datum has a non-Greenwich prime meridian 2023-11-13 21:44:17 +00:00
Even Rouault 15389b39c7 Merge pull request #3949 from rouault/proj_factor_fix
proj_factor: fix when input is a compound CRS of a projected CRS, and…
2023-11-13 21:10:23 +01:00
Even Rouault ab34bf583e Merge pull request #3944 from OSGeo/backport-3941-to-9.3
[Backport 9.3] Database: resync ESRI objects with https://github.com/Esri/projectionengine-db-doc at tag v3.2.0
2023-11-11 15:11:18 +01:00
Even Rouault 3e33c27c17 proj: projection factors: fix when input is a compound CRS of a projected CRS, and a projected CRS whose datum has a non-Greenwich prime meridian 2023-11-10 20:27:36 +01:00
Even Rouault 6f9fd55e38 proj_factor: fix when input is a compound CRS of a projected CRS, and a projected CRS whose datum has a non-Greenwich prime meridian 2023-11-10 18:27:07 +01:00
Even Rouault a29c310785 Merge pull request #3943 from OSGeo/backport-3940-to-9.3
[Backport 9.3] createOperations(): fix bad PROJ pipeline when converting between Geog3D with non-metre height to CompoundCRS
2023-11-04 23:11:05 +01:00
Even Rouault aaad5eb851 [Backport 9.3] createOperations(): Fix possible null dereference on invalid WKT input (#3946) 2023-11-04 23:10:54 +01:00
drons e9c0e8c805 createOperations(): Fix possible null dereference on invalid WKT input (#3945) 2023-11-04 22:58:08 +01:00
Even Rouault 93fdba660b Formatting fix [ci skip] 2023-11-04 22:22:29 +01:00
Even Rouault bf9f3470b7 Database: resync ESRI objects with https://github.com/Esri/projection-engine-db-doc at tag v3.2.0 (fixes #3939) 2023-11-03 10:20:42 +00:00
Even Rouault 21244f7db8 Merge pull request #3941 from rouault/database_esri_arcgis_pro_3_2
Database: resync ESRI objects with https://github.com/Esri/projectionengine-db-doc at tag v3.2.0
2023-11-03 10:55:41 +01:00
Even Rouault 3b0008a353 createOperations(): fix bad PROJ pipeline when converting between Geog3D with non-metre height to CompoundCRS (fixes #3938) 2023-11-03 09:55:33 +00:00
Even Rouault 0ab04d4c7d Vertical unit conversion: improve output for ft <--> us-ft 2023-11-03 09:55:33 +00:00
Even Rouault f939fb7f29 PROJString exporter: more unitconvert related simplifications 2023-11-03 09:55:33 +00:00
Even Rouault 3f23e8b6c8 Merge pull request #3940 from rouault/fix_3938
createOperations(): fix bad PROJ pipeline when converting between Geog3D with non-metre height to CompoundCRS
2023-11-03 10:55:05 +01:00
Olli Raisa dc184bdae5 SSL_OPTIONS: set SSL options on Curl library (#3936) 2023-11-02 21:10:55 +01:00
Even Rouault 9e65f53f89 Database: resync ESRI objects with https://github.com/Esri/projection-engine-db-doc at tag v3.2.0 (fixes #3939) 2023-11-02 19:08:30 +01:00
Even Rouault 0a9417f9c0 createOperations(): fix bad PROJ pipeline when converting between Geog3D with non-metre height to CompoundCRS (fixes #3938) 2023-11-02 18:38:31 +01:00
Even Rouault f6765ed2cb Vertical unit conversion: improve output for ft <--> us-ft 2023-11-02 18:31:37 +01:00
Even Rouault d38713d334 PROJString exporter: more unitconvert related simplifications 2023-11-02 18:31:36 +01:00
Even Rouault 19b1a160ef Merge pull request #3934 from OSGeo/backport-3929-to-9.3
[Backport 9.3] createOperations(): fix issue with a obscure case involving CompoundCRS of unknown horizontal datum + boundCRS of vertical
2023-10-30 17:21:34 +01:00
Even Rouault 16c00d783f Merge pull request #3933 from OSGeo/backport-3926-to-9.3
[Backport 9.3] WKT1 parser: in non-strict mode, accept missing UNIT[] in GEOGCS, GEOCCS, PROJCS and VERT_CS elements (fixes #3925)
2023-10-30 17:21:23 +01:00
Even Rouault 44b6fc36d7 createOperations(): fix issue with a obscure case involving CompoundCRS of unknown horizontal datum + boundCRS of vertical (fixes #3927) 2023-10-27 19:50:25 +00:00
Even Rouault 618d905ee6 WKT1 parser: in non-strict mode, accept missing UNIT[] in GEOGCS, GEOCCS, PROJCS and VERT_CS elements (fixes #3925) 2023-10-27 19:49:55 +00:00
Even Rouault 576fbc42fd Merge pull request #3929 from rouault/fix_3927
createOperations(): fix issue with a obscure case involving CompoundCRS of unknown horizontal datum + boundCRS of vertical
2023-10-27 21:49:25 +02:00
Even Rouault a16aca4553 Merge pull request #3926 from rouault/fix_3925
WKT1 parser: in non-strict mode, accept missing UNIT[] in GEOGCS, GEOCCS, PROJCS and VERT_CS elements (fixes #3925)
2023-10-27 21:49:10 +02:00
Even Rouault 224577966b Merge pull request #3931 from OSGeo/backport-3930-to-9.3
[Backport 9.3] Add Pix4D in users.rst - Proprietary licensed software
2023-10-20 16:54:13 +02:00
Javier Jimenez Shaw 35b7aa6073 Add Pix4D in users.rst - Proprietary licensed software 2023-10-20 14:42:08 +00:00
Even Rouault e8711e659f Merge pull request #3930 from jjimenezshaw/pix4d-private-org
Add Pix4D in users.rst - Proprietary licensed software
2023-10-20 16:41:36 +02:00
Javier Jimenez Shaw 933b8465a1 Add Pix4D in users.rst - Proprietary licensed software 2023-10-20 16:25:55 +02:00
Javier Jimenez Shaw 09419f0895 allow LOCAL_CS with 3 axes 2023-10-19 21:41:30 +02:00
Even Rouault 68b42846c1 Merge pull request #3928 from jjimenezshaw/local_cs-3-axes
Allow LOCAL_CS with 3 axes
2023-10-19 21:31:15 +02:00
Even Rouault 33faa04d01 createOperations(): fix issue with a obscure case involving CompoundCRS of unknown horizontal datum + boundCRS of vertical (fixes #3927) 2023-10-19 20:51:17 +02:00
Javier Jimenez Shaw ef508846c1 allow LOCAL_CS with 3 axes 2023-10-19 19:10:28 +02:00
Even Rouault 4626ce6f5b WKT1 parser: in non-strict mode, accept missing UNIT[] in GEOGCS, GEOCCS, PROJCS and VERT_CS elements (fixes #3925) 2023-10-19 15:46:13 +02:00
Even Rouault 055ff78639 Merge pull request #3924 from rouault/topocentric_projstring_import
Fix importing '+proj=topocentric ... +type=crs' by using a geocentric CRS as the base CRS
2023-10-19 14:52:57 +02:00
Even Rouault 451a2a48d3 Fix importing '+proj=topocentric ... +type=crs' by using a geocentric CRS as the base CRS
Fixes https://lists.osgeo.org/pipermail/proj/2023-October/011153.html
2023-10-18 18:40:28 +02:00
Even Rouault 944f622ed8 Merge pull request #3921 from rouault/cs_symbolic_names
Cleanup: use constants for strings of WKT coordinate system types
2023-10-16 12:27:54 +02:00
Even Rouault d0d4d94920 Cleanup: use constants for strings of WKT coordinate system types 2023-10-15 17:54:12 +02:00
Javier Jimenez Shaw 91b1f4d952 Add GCG2016 German geoid model file in sql (#3920)
* Add GCG2016 German geoid model file in sql

* update PROJ_DATA.VERSION to 1.16
2023-10-14 21:16:38 +02:00
Javier Jimenez Shaw 3920d63767 Add GCG2016 German geoid model file in sql (#3920)
* Add GCG2016 German geoid model file in sql

* update PROJ_DATA.VERSION to 1.16
2023-10-14 21:14:12 +02:00
Even Rouault eda031a714 Merge pull request #3919 from OSGeo/backport-3918-to-9.3
[Backport 9.3] GeographicBoundingBox::intersects(): avoid infinite recursion and stack overflow on invalid bounding boxes
2023-10-13 18:40:41 +02:00
Even Rouault a871ac530b GeographicBoundingBox::intersects(): avoid infinite recursion and stack overflow on invalid bounding boxes
Very similar to bugfix of 8409e8e03e
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=60084
2023-10-12 19:33:48 +00:00
Even Rouault 61003c9550 Merge pull request #3918 from rouault/fix_ossfuzz_60084
GeographicBoundingBox::intersects(): avoid infinite recursion and stack overflow on invalid bounding boxes
2023-10-12 21:33:19 +02:00
Even Rouault 0b51b1bd51 GeographicBoundingBox::intersects(): avoid infinite recursion and stack overflow on invalid bounding boxes
Very similar to bugfix of 8409e8e03e
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=60084
2023-10-12 19:18:05 +02:00
Even Rouault aa110d8785 Merge pull request #3917 from OSGeo/backport-3912-to-9.3
[Backport 9.3] Database: update to EPSG 10.096
2023-10-03 15:01:29 +02:00
Even Rouault 584e97a70b Merge pull request #3916 from OSGeo/backport-3911-to-9.3
[Backport 9.3] Test suite: fix to make it pass with ENABLE_TIFF=OFF (fixes #3900)
2023-10-02 10:28:15 +02:00
Even Rouault 2b06a219b9 Merge pull request #3915 from OSGeo/backport-3910-to-9.3
[Backport 9.3] createOperations(): fix GeogCRS 3D with TOWGS84 to geocentric CRS (fixes #3909)
2023-10-02 10:28:02 +02:00
Even Rouault f64db67b02 [Backport 9.3] Doc: give all EPSG potential names for lon_0/lat_0/x_0/y_0 (fixes #3904) (#3914) 2023-10-02 10:27:46 +02:00
Even Rouault c714f1e6e3 Database: update to EPSG 10.096 2023-10-02 08:27:41 +00:00
Even Rouault 2040e685f5 [Backport master] Update faq.rst to mention geod (#3913)
See https://github.com/OSGeo/PROJ/issues/2644
2023-10-02 10:27:29 +02:00
Even Rouault c95bd70001 Merge pull request #3912 from rouault/epsg_10_096
Database: update to EPSG 10.096
2023-10-02 10:27:12 +02:00
Even Rouault 435e752fad CI: add testing for -DENABLE_TIFF=OFF 2023-09-30 13:37:47 +00:00
Even Rouault f0b6dcd4f9 Test suite: fix to make it pass with ENABLE_TIFF=OFF (fixes #3900) 2023-09-30 13:37:47 +00:00
Even Rouault 1b2b98a393 createOperations(): fix GeogCRS 3D with TOWGS84 to geocentric CRS (fixes #3909) 2023-09-30 13:37:19 +00:00
Even Rouault cfdfa3df45 Merge pull request #3911 from rouault/fix_3900
Test suite: fix to make it pass with ENABLE_TIFF=OFF (fixes #3900)
2023-09-30 15:33:23 +02:00
Even Rouault 5c98f2603f Merge pull request #3910 from rouault/fix_3909
createOperations(): fix GeogCRS 3D with TOWGS84 to geocentric CRS (fixes #3909)
2023-09-30 15:33:16 +02:00
Even Rouault 8d8066e015 Doc: give all EPSG potential names for lon_0/lat_0/x_0/y_0 (fixes #3904) (#3905) 2023-09-30 15:32:17 +02:00
積丹尼 Dan Jacobson 7ffc601575 Update faq.rst to mention geod (#3895)
See https://github.com/OSGeo/PROJ/issues/2644
2023-09-30 15:31:51 +02:00
Even Rouault c679e304dc Database: update to EPSG 10.096 2023-09-30 15:30:17 +02:00
Even Rouault 81ac095b2a CI: add testing for -DENABLE_TIFF=OFF 2023-09-28 17:15:34 +02:00
Even Rouault ed942abd7e Test suite: fix to make it pass with ENABLE_TIFF=OFF (fixes #3900) 2023-09-28 17:08:09 +02:00
Even Rouault 641af0e046 Merge pull request #3903 from OSGeo/backport-3901-to-master
[Backport master] Update projections.rst
2023-09-28 16:40:37 +02:00
Even Rouault 202de09be0 Merge pull request #3899 from OSGeo/backport-3897-to-9.3
[Backport 9.3] Add Javier as PSC member [skip ci]
2023-09-28 16:40:31 +02:00
Even Rouault 76d622f3c9 Merge pull request #3898 from OSGeo/backport-3896-to-master
[Backport master] Update cct.rst
2023-09-28 16:40:26 +02:00
Even Rouault 8cd3f02879 Merge pull request #3894 from OSGeo/backport-3893-to-master
[Backport master] helmert.rst: remove outdated :since: and deprecation
2023-09-28 16:40:11 +02:00
Even Rouault 90b02adbae createOperations(): fix GeogCRS 3D with TOWGS84 to geocentric CRS (fixes #3909) 2023-09-28 11:41:35 +02:00
積丹尼 Dan Jacobson 4475caf689 Update projections.rst
S/he means meters.
2023-09-24 11:44:14 +00:00
Even Rouault 5de9fe397e Merge pull request #3901 from jidanni/patch-22
Update projections.rst
2023-09-24 13:43:49 +02:00
積丹尼 Dan Jacobson 92de07cc7f Update projections.rst
S/he means meters.
2023-09-24 05:26:07 -05:00
Javier Jimenez Shaw 3f97f63a94 Add Javier as PSC member [skip ci] 2023-09-20 10:14:19 +00:00
積丹尼 Dan Jacobson 39181110cc Update cct.rst
Grammar.
2023-09-20 10:13:06 +00:00
Kristian Evers 744021af84 Merge pull request #3896 from jidanni/patch-11
Improve grammar in cct.rst
2023-09-20 12:12:24 +02:00
Even Rouault 55b1832a27 Merge pull request #3897 from jjimenezshaw/jjimenezshw-in-psc
Add Javier as PSC member [skip ci]
2023-09-20 11:39:56 +02:00
Javier Jimenez Shaw f92e32a51f Add Javier as PSC member [skip ci] 2023-09-20 11:33:35 +02:00
積丹尼 Dan Jacobson 0c97ca4fb6 Update cct.rst
Grammar.
2023-09-20 04:15:50 -05:00
Even Rouault f57c3ffc3c Fix potential null pointer dereferences (master only, CID 417218 and 417219) 2023-09-17 20:44:39 +02:00
Even Rouault 57e6408ff3 helmert.rst: remove outdated :since: and deprecation
versions 5.0 and 5.2 are ancient. No need to add to the cognitive load of the reader
2023-09-17 15:39:45 +00:00
Even Rouault 1b2d6e5118 Merge pull request #3893 from OSGeo/rouault-patch-3
helmert.rst: remove outdated :since: and deprecation
2023-09-17 17:39:17 +02:00
Even Rouault d4ebd920c1 Merge pull request #3884 from rouault/pointmotionoperation
Add support for transformations involving coordinate epoch changes (PointMotionOperation), mostly for Canadian NAD83(CSRS) case
2023-09-15 11:41:13 +02:00
Even Rouault c4d97b407c helmert.rst: remove outdated :since: and deprecation
versions 5.0 and 5.2 are ancient. No need to add to the cognitive load of the reader
2023-09-14 20:50:19 +02:00
Even Rouault bee4a90322 Implement 'Vertical Offset by velocity grid (NRCan byn)' method 2023-09-14 20:13:25 +02:00
Even Rouault b5d33ab92d Vertical Offset by Grid Interpolation (NRCan byn) operations: reverse the sign of the value of the grid 2023-09-14 19:35:24 +02:00
Even Rouault 0c39032a87 createOperations(): fix 'ITRF2014 to NAD83(CSRS)v7' type of operations, i.e. when the point motion operation is on the end, and also make sure that the time-dependent Helmert transformation receives coordinates in the right epoch 2023-09-14 19:35:24 +02:00
Even Rouault e69c31972e C API: add proj_crs_has_point_motion_operation() 2023-09-14 19:35:24 +02:00
Even Rouault 1b1f3c7457 createOperations(): tune for 'NAD83_CSRS_1997_xxxx_HT2_1997 to NAD83_CSRS_1997_yyyy_CGVD2013_1997' or 'NAD83_CSRS_2002_xxxx_HT2_2002 to NAD83_CSRS_2002_yyyy_CGVD2013_2002' 2023-09-14 19:35:24 +02:00
Even Rouault 0b48c6d9ee createOperations(): fix NAD83_CSRS_1997_MTMxx_HT2_1997 to NAD83_CSRS_2010_UTMyy_CGVD2013_2010 2023-09-14 19:35:24 +02:00
Even Rouault b50b522bb7 createOperations(): pass coordinate epochs internally in a cleaner way 2023-09-14 19:35:23 +02:00
Even Rouault 0ba3c09b6a createOperations(): compoundToCompound: tune behaviour when one of the vertical CRS has a geoid model 2023-09-14 19:35:23 +02:00
Even Rouault d1b58d9a94 CoordinateOperationFactory::Private::createOperationsWithDatumPivot(): use candidateSrcGeod and candidateDstGeod of same type in priority 2023-09-14 19:35:23 +02:00
Even Rouault 502c99d321 Implement 'Geographic3D Offset by velocity grid (NRCan byn)' transformation method (e.g for NAD83(CSRS)v7 to NAD83(CSRS)v3) 2023-09-14 19:35:23 +02:00
Even Rouault f6bcc680f7 Merge pull request #3892 from OSGeo/backport-3888-to-9.3
[Backport 9.3] proj.db opening: allow opening with a URI (typically for memvfs) (fixes #3887)
2023-09-14 10:37:24 +02:00
Even Rouault cac2dd1309 Merge pull request #3891 from OSGeo/backport-3889-to-9.3
[Backport 9.3] setargv.obj is not available on uwp
2023-09-14 10:37:12 +02:00
Even Rouault c7588b02cd proj.db opening: allow opening with a URI (typically for memvfs) (fixes #3887) 2023-09-13 21:29:34 +00:00
Even Rouault 5c680a53ab Merge pull request #3888 from rouault/fix_3887
proj.db opening: allow opening with a URI (typically for memvfs) (fixes #3887)
2023-09-13 21:48:17 +02:00
Leander Schulten ef0d659014 setargv.obj is not available on uwp 2023-09-13 18:05:51 +00:00
Even Rouault 53e67739ff Merge pull request #3886 from OSGeo/backport-3878-to-9.3
[Backport 9.3] cs2cs: fix handling of input coordinates in grad (fixes #3800)
2023-09-13 19:24:21 +02:00
Even Rouault 992edc5846 Merge pull request #3885 from OSGeo/backport-3877-to-9.3
[Backport 9.3] Doc: projections.rst: document Order of applications of parameters (fixes #3875)
2023-09-13 19:24:10 +02:00
Even Rouault bc4aa41e0d Merge pull request #3889 from autoantwort/uwp
setargv.obj is not available on uwp
2023-09-13 19:24:00 +02:00
Leander Schulten baa4c61c1d setargv.obj is not available on uwp 2023-09-10 16:16:32 +02:00
Even Rouault 2297392e62 proj.db opening: allow opening with a URI (typically for memvfs) (fixes #3887) 2023-09-08 11:50:56 +02:00
Even Rouault 303df3071f GeographicCRS::_isEquivalentTo(): follow-up fix for #3879 to avoid behaviour breakage in GDAL 2023-09-07 11:13:19 +02:00
Even Rouault 140b9914e8 GeographicCRS::_isEquivalentTo(): follow-up fix for #3879 to avoid behaviour breakage in GDAL 2023-09-07 11:13:02 +02:00
Even Rouault 4c1621747c Fix GIGS 5102.2 (fixes #3800) 2023-09-06 22:36:00 +00:00
Even Rouault 274e16027b cs2cs: fix handling of input coordinates in grad (fixes #3800) 2023-09-06 22:36:00 +00:00
Even Rouault 85ec28f5ab Doc: projections.rst: document Order of applications of parameters (fixes #3875) 2023-09-06 22:35:32 +00:00
Even Rouault 4d31e759f6 Doc: add source_file extension (borrowed from GDAL, credits to @dbaston) 2023-09-06 22:35:32 +00:00
Even Rouault 93868c1a08 Merge pull request #3883 from OSGeo/backport-3879-to-9.3
[Backport 9.3] isEquivalentTo(): make a datum name 'unknown' equivalent to another one
2023-09-07 00:33:14 +02:00
Even Rouault fd5caa1879 Merge pull request #3882 from OSGeo/backport-3880-to-9.3
[Backport 9.3] Ellipsoid::_isEquivalentTo(): fix so that an ellipsoid of semi-major …
2023-09-07 00:33:06 +02:00
Even Rouault 9f99f305db Merge pull request #3881 from OSGeo/backport-3876-to-9.3
[Backport 9.3] CoordinateOperationFactory: deal with CompoundToCompound with a horizontal similarity transformation and a ballpark vertical (fixes #3854)
2023-09-07 00:32:59 +02:00
Even Rouault 10bd12999f Merge pull request #3878 from rouault/fix_3800
cs2cs: fix handling of input coordinates in grad (fixes #3800)
2023-09-07 00:32:53 +02:00
Even Rouault 7d2ccc8090 Merge pull request #3877 from rouault/fix_3875
Doc: projections.rst: document Order of applications of parameters (fixes #3875)
2023-09-07 00:32:42 +02:00
Even Rouault 6018751b79 CoordinateOperationFactory: make sure to preserve interpolation CRS when substituting source/target CRS 2023-09-06 14:41:08 +02:00
Even Rouault 9bfb7cbe8d createOperations(): compoundToCompound: tune behaviour with point motion operation 2023-09-06 14:41:07 +02:00
Even Rouault 9ef831843c Database: add a NRCAN authority with CoordinateMetadata records 2023-09-06 14:41:07 +02:00
Even Rouault cd0805e3f4 createOperations(): take into account GEOIDMODEL[] referenced by ID 2023-09-06 14:41:07 +02:00
Even Rouault f4716110cf createFromUserInput(): make it recognize urn:ogc:def:coordinateMetadata:AUTH_NAME::CODE syntax 2023-09-06 14:41:07 +02:00
Even Rouault ded4eccffe WKT/PROJJSON importer: allow to build CoordinateMetadata with CRS like NAD83(CSRS)v7 2023-09-06 14:41:07 +02:00
Even Rouault 4e76830b45 Database: add a 'coordinate_metadata' table and a AuthorityFactory::createCoordinateMetadata() method
Bump database layout version to 1.3
2023-09-06 14:41:07 +02:00
Even Rouault 9983c6ef08 cs2cs: add --s_epoch and --t_epoch 2023-09-06 14:41:07 +02:00
Even Rouault 4ac2cfb25e projinfo: add --s_epoch and --t_epoch 2023-09-06 14:41:07 +02:00
Even Rouault 284d15ef7d Database: add 'CGVD28 height to CGVD2013a(2010) height' with NAD83(CSRS)v7 as interpolation CRS 2023-09-06 14:41:06 +02:00
Even Rouault a9716560f0 projinfo: allow CoordinateMetadata <--> CoordinateMetadata transformations 2023-09-06 14:41:06 +02:00
Even Rouault 26936c1fbb proj_create_operations(): allow CoordinateMetadata <--> CoordinateMetadata transformations 2023-09-06 14:41:06 +02:00
Even Rouault a53a5a107f createOperations(): use point motion operations for change of epoch between CoordinateMetadata 2023-09-06 14:41:06 +02:00
Even Rouault 419cf4d6e1 Use single implementation of getRoundedEpochInDecimalYear() 2023-09-06 14:32:54 +02:00
Even Rouault 627d942558 createFromUserInput(): allow 'EPSG:XXXX @ YYYY' 2023-09-05 22:33:53 +02:00
Even Rouault d683fcf069 proj_crs_promote_to_3D(): make it work on CoordinateMetadata as well 2023-09-05 22:33:53 +02:00
Even Rouault e27c8a2604 Add AuthorityFactory::getPointMotionOperationsFor() and allow a CoordinateMetadata to be built for CRS that are not officially dynamic but have a PointMotionOperation 2023-09-05 22:33:52 +02:00
Even Rouault 2ef8221ba6 Add AuthorityFactory::createGeodeticCRSFromDatum() utility class, adapted/moved from coordinateoperationfactory logic 2023-09-05 22:33:52 +02:00
Even Rouault 3606ddb689 PointMotionOperation: implement constructor, import/export WKT and PROJJSON, and instanciation from database 2023-09-05 22:33:52 +02:00
Even Rouault 882376e2c4 isEquivalentTo(): make a datum name 'unknown' equivalent to another one
Fixes https://lists.osgeo.org/pipermail/proj/2023-September/011126.html
2023-09-05 09:21:28 +00:00
Even Rouault 99cf763666 Merge pull request #3879 from rouault/datum_unknown
isEquivalentTo(): make a datum name 'unknown' equivalent to another one
2023-09-05 10:13:07 +02:00
Even Rouault 069e46384f Ellipsoid::_isEquivalentTo(): fix so that an ellipsoid of semi-major axis A (and non-zero inv flattening) isn't equivalent to a sphere of radius A...
or to another ellipsoid of same semi-major axis but defined from a semi-minor axis and not inverse flattening

Discovered when debugging corner cases of https://github.com/OSGeo/PROJ/pull/3879 ...
2023-09-05 08:11:39 +00:00
Even Rouault b9051b8b74 proj_crs_to_crs(): tune ordering of operations based on areas, and also for operations with unknown accuracy (fixes #3854) 2023-09-05 08:11:16 +00:00
Even Rouault e3c1e923d0 CoordinateOperationFactory: deal with CompoundToCompound with a horizontal similarity transformation and a ballpark vertical (fixes #3854) 2023-09-05 08:11:16 +00:00
Even Rouault bc8cbd8276 Improve debugging code 2023-09-05 08:11:16 +00:00
Even Rouault 58394985c3 Merge pull request #3880 from rouault/fix_ellipsoid_isequivalentto
Ellipsoid::_isEquivalentTo(): fix so that an ellipsoid of semi-major …
2023-09-05 10:11:04 +02:00
Even Rouault d750d686fa Merge pull request #3876 from rouault/fix_3854
CoordinateOperationFactory: deal with CompoundToCompound with a horizontal similarity transformation and a ballpark vertical (fixes #3854)
2023-09-05 10:10:45 +02:00
Even Rouault b10ac5e7b9 Ellipsoid::_isEquivalentTo(): fix so that an ellipsoid of semi-major axis A (and non-zero inv flattening) isn't equivalent to a sphere of radius A...
or to another ellipsoid of same semi-major axis but defined from a semi-minor axis and not inverse flattening

Discovered when debugging corner cases of https://github.com/OSGeo/PROJ/pull/3879 ...
2023-09-03 23:39:28 +02:00
Even Rouault ea1a88513f isEquivalentTo(): make a datum name 'unknown' equivalent to another one
Fixes https://lists.osgeo.org/pipermail/proj/2023-September/011126.html
2023-09-03 23:18:55 +02:00
Even Rouault 87ae438191 Fix GIGS 5102.2 (fixes #3800) 2023-09-03 22:16:00 +02:00
Even Rouault b2435aa4e0 cs2cs: fix handling of input coordinates in grad (fixes #3800) 2023-09-03 22:15:59 +02:00
Even Rouault f39b406b58 Doc: projections.rst: document Order of applications of parameters (fixes #3875) 2023-09-03 21:48:46 +02:00
Even Rouault 94f0795ef7 Doc: add source_file extension (borrowed from GDAL, credits to @dbaston) 2023-09-03 21:48:14 +02:00
積丹尼 Dan Jacobson 707dd9ff80 Always use the cleanest examples.
Move repetitive default into text explanation.

P.S., maybe one day even consider changing the
default +ellps=GRS80 to +ellps=WGS84... but no big deal...
2023-09-03 21:14:20 +02:00
Howard Butlerand積丹尼 Dan Jacobson 7b3b638b6f Doc updates from jidanni (#3858)
* Update nzmg.rst

Here I am taking a guess at which grid this is referring to and thus trying to make it clearer.

* Update transformation.rst

Note: I have only mentioned that the +'s went away.

Apparently the author is using +init files here, and showing only their contents.

However even if the user placed the example snippets seen in the boxes into files in the current directory,
there is no complete working example!

I am saying that earlier in this book, the user was able to run the examples shown.

But now if the user wishes to continue running them, he has to put the +'s back,

or use some special syntax that you haven't shown yet in a complete working example!

* Always use the cleanest examples.

Move repetitive default into text explanation.

P.S., maybe one day even consider changing the
default +ellps=GRS80 to +ellps=WGS84... but no big deal...

* Update docs/source/apps/proj.rst

* Update x_0.rst

These are meters and one cannot just use e.g., +units to change it.

* Remove redundant optional default parameters!

We get the exact same answer without the clutter that doesn't make things any more clearer.

* 50 U.S. isn't grammatical

P.S., perhaps add a reference to where this projection came from.

* Remove parameter that is default anyway

Make example less cluttered.

* Update cart.rst

Simplify via defaults.

* Can remove default parameter.

Shorten string by removing redundancies.

* Update som.rst showing relation of the two lines

Mentioning how the two lines are related.

* Update rhealpix.rst

Got rid of
- default -f setting

Eliminated ellipse emphasis and just used the default.

* Update geoc.rst

Defaults shown clear as day at the bottom of the page already.

* Update topocentric.rst

Wipe off items that aren't the focus of the issue and don't affect outcome here.

* Update unitconvert.rst

Use and explain defaults.
One day this page should mention what the default time etc. units are too.

* Update set.rst

Simplify by removing default parameters.

* Update push.rst

Eliminate default reuse, getting same calculation.

* Update xyzgridshift.rst

Don't repeat defaults.

* Update vertoffset.rst

GRS80 already implied and documented.

* Update hgridshift.rst

Reduce chance of too wide example going off the screen!

* Update geogoffset.rst

Add '+' to match rest of book.

* Update differences.rst

Add actual EOF notation.

* Update helmert.rst

Reduce horizontal scrolling, at least on desktop.

Also one day maybe add '+' before each... or maybe not.

* Update defmodel.rst

Example causes scrolling horizontally, even on desktop.

* Update bertin1953.rst

Remove src.

* Update cass.rst

- Less horizontal scrolling, which was seen even on desktop.
- Zapped default meter parameter.

* Update s2.rst

Clean off testing residue.

Perhaps one day also hyperlink
"Quadrilateralized Spherical Cube"
page.

* Update tmerc.rst

Trimming defaults reduces horizontal scrolling.

* Update y_0.rst

These are meters and one cannot just use e.g., +units to change it.

* Update unitconvert.rst

Mention defaults.
I only listed the ones I know.
The rest I didn't list.

---------

Co-authored-by: 積丹尼 Dan Jacobson <jidanni@jidanni.org>
2023-09-03 21:14:20 +02:00
Even Rouault 8b4fa7dbb9 Merge pull request #3764 from jidanni/patch-2
Always use the cleanest examples.
2023-09-03 21:03:56 +02:00
Howard Butlerand積丹尼 Dan Jacobson d700e42ada Doc updates from jidanni (#3858)
* Update nzmg.rst

Here I am taking a guess at which grid this is referring to and thus trying to make it clearer.

* Update transformation.rst

Note: I have only mentioned that the +'s went away.

Apparently the author is using +init files here, and showing only their contents.

However even if the user placed the example snippets seen in the boxes into files in the current directory,
there is no complete working example!

I am saying that earlier in this book, the user was able to run the examples shown.

But now if the user wishes to continue running them, he has to put the +'s back,

or use some special syntax that you haven't shown yet in a complete working example!

* Always use the cleanest examples.

Move repetitive default into text explanation.

P.S., maybe one day even consider changing the
default +ellps=GRS80 to +ellps=WGS84... but no big deal...

* Update docs/source/apps/proj.rst

* Update x_0.rst

These are meters and one cannot just use e.g., +units to change it.

* Remove redundant optional default parameters!

We get the exact same answer without the clutter that doesn't make things any more clearer.

* 50 U.S. isn't grammatical

P.S., perhaps add a reference to where this projection came from.

* Remove parameter that is default anyway

Make example less cluttered.

* Update cart.rst

Simplify via defaults.

* Can remove default parameter.

Shorten string by removing redundancies.

* Update som.rst showing relation of the two lines

Mentioning how the two lines are related.

* Update rhealpix.rst

Got rid of
- default -f setting

Eliminated ellipse emphasis and just used the default.

* Update geoc.rst

Defaults shown clear as day at the bottom of the page already.

* Update topocentric.rst

Wipe off items that aren't the focus of the issue and don't affect outcome here.

* Update unitconvert.rst

Use and explain defaults.
One day this page should mention what the default time etc. units are too.

* Update set.rst

Simplify by removing default parameters.

* Update push.rst

Eliminate default reuse, getting same calculation.

* Update xyzgridshift.rst

Don't repeat defaults.

* Update vertoffset.rst

GRS80 already implied and documented.

* Update hgridshift.rst

Reduce chance of too wide example going off the screen!

* Update geogoffset.rst

Add '+' to match rest of book.

* Update differences.rst

Add actual EOF notation.

* Update helmert.rst

Reduce horizontal scrolling, at least on desktop.

Also one day maybe add '+' before each... or maybe not.

* Update defmodel.rst

Example causes scrolling horizontally, even on desktop.

* Update bertin1953.rst

Remove src.

* Update cass.rst

- Less horizontal scrolling, which was seen even on desktop.
- Zapped default meter parameter.

* Update s2.rst

Clean off testing residue.

Perhaps one day also hyperlink
"Quadrilateralized Spherical Cube"
page.

* Update tmerc.rst

Trimming defaults reduces horizontal scrolling.

* Update y_0.rst

These are meters and one cannot just use e.g., +units to change it.

* Update unitconvert.rst

Mention defaults.
I only listed the ones I know.
The rest I didn't list.

---------

Co-authored-by: 積丹尼 Dan Jacobson <jidanni@jidanni.org>
2023-09-03 20:58:07 +02:00
Even Rouault 89943df4ad proj_crs_to_crs(): tune ordering of operations based on areas, and also for operations with unknown accuracy (fixes #3854) 2023-09-03 19:37:39 +02:00
Even Rouault ed367b8b74 CoordinateOperationFactory: deal with CompoundToCompound with a horizontal similarity transformation and a ballpark vertical (fixes #3854) 2023-09-03 19:36:54 +02:00
Even Rouault 2e7ebe095d Improve debugging code 2023-09-03 19:35:48 +02:00
Even Rouault e5169f9af1 Merge pull request #3874 from OSGeo/backport-3873-to-9.3
[Backport 9.3] ESRI WKT import: normalize GCS_unknown to unknown and D_unknown to unknown (fixes #3871)
2023-09-03 16:03:33 +02:00
Mike Taves 73e11c543a Update CITATION.cff 2023-09-03 20:55:49 +12:00
Mike Taves c76f17f63c Update CITATION.cff 2023-09-03 20:55:04 +12:00
Even Rouault f3d54fa0be ESRI WKT import: normalize GCS_unknown to unknown and D_unknown to unknown (fixes #3871) 2023-09-02 08:14:05 +00:00
Even Rouault 8a2cf2d9a8 Merge pull request #3873 from rouault/fix_3871
ESRI WKT import: normalize GCS_unknown to unknown and D_unknown to unknown (fixes #3871)
2023-09-02 10:06:43 +02:00
Even Rouault 9b553e227a Merge pull request #3872 from OSGeo/backport-3869-to-9.3
[Backport 9.3] Fix build error with MSVC 2019 in /std:c++20 on NN_NO_CHECK()
2023-09-02 10:06:31 +02:00
Even Rouault 8d52b30588 ESRI WKT import: normalize GCS_unknown to unknown and D_unknown to unknown (fixes #3871) 2023-09-01 19:59:20 +02:00
Even Rouault e372d23d9b windows.yml: test C++20 compilation 2023-09-01 17:32:46 +00:00
Even Rouault a7bdb77d57 NN_NO_CHECK() macro: fix it to work with MSVC 2019 in /std:c++20 mode
(fixes #3868)

For some weird reason, the previous definition of the macro didn't work
when used from lambdas.
2023-09-01 17:32:46 +00:00
Even Rouault 4a14240a60 Merge pull request #3869 from rouault/fix_3868
Fix build error with MSVC 2019 in /std:c++20 on NN_NO_CHECK()
2023-09-01 19:32:16 +02:00
Even Rouault e4a2a492f3 Merge pull request #3870 from OSGeo/backport-3867-to-9.3
[Backport 9.3] ITRF2008: fix wrong sign for 'dry' parameter of EURA and EURA_T
2023-09-01 19:09:23 +02:00
Kristian Evers 5cecc48556 docs: update git branch and date 2023-09-01 14:22:11 +02:00
Even Rouault ea3c7e84eb ITRF2008: fix wrong sign for 'dry' parameter of EURA and EURA_T 2023-09-01 12:01:47 +00:00
Even Rouault c9e7856c3d Merge pull request #3867 from rouault/fix_ITRF2008_EURA
ITRF2008: fix wrong sign for 'dry' parameter of EURA and EURA_T
2023-09-01 13:56:59 +02:00
Even Rouault 8490a5d680 windows.yml: test C++20 compilation 2023-09-01 12:17:10 +02:00
Even Rouault a6b8135d58 NN_NO_CHECK() macro: fix it to work with MSVC 2019 in /std:c++20 mode
(fixes #3868)

For some weird reason, the previous definition of the macro didn't work
when used from lambdas.
2023-09-01 12:17:10 +02:00
Kristian Evers c540bd2f2f Bump version numbers in preparation for 9.4.0 release 2023-09-01 12:11:40 +02:00
Kristian Evers c530dad029 Update website for 9.3.0 release 2023-09-01 12:01:09 +02:00
Kristian Evers 0f7751b2a9 Update website for 9.3.0 release 2023-09-01 12:00:48 +02:00
Even Rouault 6e98ed7cad ITRF2008: fix wrong sign for 'dry' parameter of EURA and EURA_T 2023-08-31 22:29:07 +02:00
Even Rouault 08f394ea30 Merge pull request #3866 from OSGeo/backport-3864-to-9.3
[Backport 9.3] JSON export: avoid non-significant decimal digits in version field (fixes #3863)
2023-08-29 17:10:25 +02:00
Even Rouault 847423fe42 JSON import: reduce number of significant decimal digits when parsing id.version field (fixes #3863, reworks previous commit) 2023-08-28 15:23:24 +00:00
Even Rouault 19cda6a061 JSON export: avoid non-significant decimal digits in version field (fixes #3863) 2023-08-28 15:23:24 +00:00
Even Rouault ec93f34660 Merge pull request #3864 from rouault/fix_3863
JSON export: avoid non-significant decimal digits in version field (fixes #3863)
2023-08-28 17:21:55 +02:00
Even Rouault 83878d6ed5 JSON import: reduce number of significant decimal digits when parsing id.version field (fixes #3863, reworks previous commit) 2023-08-28 14:57:35 +02:00
Even Rouault 0220add53f JSON export: avoid non-significant decimal digits in version field (fixes #3863) 2023-08-28 12:38:30 +02:00
Kristian Evers 4f0376ba6b Update NEWS for 9.3.0 2023-08-27 20:42:00 +02:00
Kristian Evers a86add9a03 Update man-pages from Sphinx-docs 2023-08-27 20:16:49 +02:00
Kristian Evers 615ea826a4 Update man-pages from Sphinx-docs 2023-08-27 20:13:46 +02:00
Kristian Evers db78a84304 Merge pull request #3861 from jjimenezshaw/fix-doc-docker-ubuntu-22.04
Fix doc docker ubuntu 22.04
2023-08-27 18:46:07 +02:00
Javier Jimenez Shaw 2cec0e4ee7 Doc docker: remove conflictive dependency awscli 2023-08-27 14:09:23 +02:00
Javier Jimenez Shaw c8da8d2ab0 Doc docker: limit sphinxcontrib-spelling version. Breaking changes in v8 2023-08-27 12:48:23 +02:00
Kristian Evers 423100c720 Merge pull request #3860 from jjimenezshaw/doc-paper-site-calibration
Mention derived projected in operations_computation
2023-08-26 21:35:28 +02:00
Kristian Evers b940d6d869 Merge pull request #3859 from jjimenezshaw/docker-ubuntu-22.04
Docker: update base image to ubuntu:22.04
2023-08-26 21:34:45 +02:00
Javier Jimenez Shaw 3a7a86b9a0 Mention derived projected in operations_computation 2023-08-26 13:40:30 +02:00
Javier Jimenez Shaw a0b49bc823 Docker: update base image to ubuntu:22.04 [ci skip] 2023-08-26 12:49:31 +02:00
積丹尼 Dan Jacobson 994f5c7075 Update y_0.rst (#3797)
These are meters and one cannot just use e.g., +units to change it.
2023-08-24 15:51:57 -05:00
Even Rouault b132ad6879 Merge pull request #3857 from rouault/fix_warning_cs2cs_emulation_setup
Fix false-positive compiler warning
2023-08-24 14:29:44 +02:00
Even Rouault 8b36c193fd Fix false-positive compiler warning
Fixes the following false-positive warning of gcc (Ubuntu 11.4.0-1ubuntu1~22.04)
11.4.0 in -m32 mode:
```
/home/even/proj/proj/src/4D_api.cpp: In function 'int cs2cs_emulation_setup(PJ*)':
/home/even/proj/proj/src/4D_api.cpp:949:64: warning: '%s' directive output between 9 and 2147483645 bytes may cause result to exceed 'INT_MAX' [-Wformat-truncation=]
  949 |                  "break_cs2cs_recursion     proj=helmert exact %s "
      |
```
2023-08-24 12:17:10 +02:00
Even Rouault 5d9df6442c Merge pull request #3852 from rouault/HT2_grids
Database: grid_alternatives: reference new HT2 Canadian grids ...
2023-08-19 15:11:01 +02:00
Even Rouault d2a3436630 Database: grid_alternatives: reference new HT2 Canadian grids added per https://github.com/OSGeo/PROJ-data/pull/106 2023-08-18 19:18:42 +02:00
Even Rouault 8b0029e6db Merge pull request #3851 from rouault/wkt1_esri_8353
WKT1 ESRI import/export: fix GCS name for EPSG:8353 S-JTSK_[JTSK03]_Krovak_East_North
2023-08-17 18:14:28 +02:00
Even Rouault 57a1eabe99 WKT1 ESRI import/export: fix GCS name for EPSG:8353 S-JTSK_[JTSK03]_Krovak_East_North 2023-08-17 17:12:58 +02:00
Even Rouault c5c7e64b8a Merge pull request #3849 from rouault/fix_3848
bonne: fix inverse map projection computations when lat_1 < 0 (fixes #3848)
2023-08-11 13:56:52 +02:00
Even Rouault 28e6194bfd bonne: fix inverse map projection computations when lat_1 < 0 (fixes #3848)
The fixes are directly following hints of Snyder's "Map projections: A
working manual"
2023-08-11 11:09:57 +02:00
Even Rouault 0372c81511 Merge pull request #3847 from rouault/epsg_10_094
Database: update to EPSG 10.094
2023-08-11 01:58:42 +02:00
Even Rouault a654e42074 Merge pull request #3846 from rouault/proj_alter_id_fix
proj_alter_id(): make it replace an existing ID instead of appending a new one
2023-08-10 00:46:05 +02:00
Even Rouault d5c5cf4112 Database: update to EPSG 10.094 2023-08-08 13:01:47 +02:00
Javier Jimenez Shaw 1a0a28d2da Use NS_PROJ namespace (fixes #3842, master only) (#3843) 2023-08-08 12:56:57 +02:00
Even Rouault 9da8ae5197 Merge pull request #3841 from snowman2/guess
BUG: Handle prefix whitespace when guessing WKT dialiect
2023-08-08 12:55:42 +02:00
Even Rouault a47da33335 proj_alter_id(): make it replace an existing ID instead of appending a new one 2023-08-08 12:40:41 +02:00
Alan Snow d2794d70ee BUG: Handle prefix whitespace when guessing WKT dialiect 2023-07-27 15:53:33 -05:00
Javier Jimenez Shaw fde3d58e4a Add option in proj CLI to use a CRS (#3825)
To easily apply proj on the projection of a projected CRS, this PR adds the option `-C`.
It follows the same logic as in function proj_factors, that is to compute the projection from the CRS to the geographic underlying CRS.

Example of usage:

```
echo -110.16666 31 | proj -C EPSG:26948 -V 
#Transverse Mercator
#	Cyl, Sph&Ell
#	approx
# +proj=tmerc +lat_0=31 +lon_0=-110.166666666667 +k=0.9999 +x_0=213360 +y_0=0
# +ellps=GRS80
#Final Earth figure: ellipsoid
#  Major axis (a): 6378137.000
#  1/flattening: 298.257222
#  squared eccentricity: 0.006694380023
Longitude: 110d9'59.976"W [ -110.16666 ]
Latitude:  31dN [ 31 ]
Easting (x):   213360.64
Northing (y):  0.00
Meridian scale (h) : 0.99990000  ( -0.01 % error )
Parallel scale (k) : 0.99990000  ( -0.01 % error )
Areal scale (s):     0.99980001  ( -0.02 % error )
Angular distortion (w): 0.000
Meridian/Parallel angle: 90.00000
Convergence : 0d0'0.012" [ 0.00000343 ]
Max-min (Tissot axis a-b) scale error: 0.99990 0.99990
```
2023-07-26 09:20:27 +02:00
Even Rouault 9052f4c2ea Merge pull request #3838 from rouault/ossfuzz_fix
Ossfuzz fixes
2023-07-25 19:46:14 +02:00
Even Rouault 25f7722aaf Merge pull request #3835 from rouault/fix_3832
PROJ_DEBUG: make ON an alias of 2, and OFF of 1 (fixes #3832)
2023-07-25 19:46:01 +02:00
Even Rouault c8f28e402b CoordinateOperation::targetCoordinateEpoch(): use std::move() to avoid copy (CID 406913) 2023-07-24 16:14:21 +02:00
Even Rouault 7c80355921 ConcatenatedOperation::fixStepsDirection(): fix logic error (Coverity CID 416067) 2023-07-24 16:13:29 +02:00
Even Rouault 25367b686b Merge pull request #3834 from rouault/workaround_mapserver_6915
Avoid C++ exceptions to be thrown (and caught) when parsing strings like '+proj=longlat +datum=WGS84 +type=crs'
2023-07-20 20:44:45 +02:00
Even Rouault ef78412c31 PROJ_DEBUG: make ON an alias of 2, and OFF of 1 (fixes #3832)
and emits a stderr message when the value specified isn't understood
2023-07-20 11:23:20 +02:00
Even Rouault 1b14212a3c pj_hgrid_apply_internal(): use pj_log() infrastructure 2023-07-20 01:39:52 +02:00
Even Rouault c5b3d6b350 Avoid C++ exceptions to be thrown (and caught) when parsing strings like '+proj=longlat +datum=WGS84 +type=crs'
This makes it more friendly with debuggers under Windows, and should
help workarounding https://github.com/MapServer/MapServer/issues/6915
(note however that the issue in that ticket is more a 'system level'
issue than a PROJ bug)
2023-07-20 01:15:11 +02:00
Even Rouault 6d10acffad Merge pull request #3831 from rouault/fix_geoapi_links
Doc: fix links to geoapi
2023-07-19 19:35:57 +02:00
Even Rouault fcd26062ae Merge pull request #3826 from rouault/fix_3824
proj_factors(): make it work with projected CRS with non-metre unit and/or northing/easting axis order (fixes #3824)
2023-07-19 19:35:50 +02:00
Even Rouault de1183e5c1 Doc: fix links to geoapi 2023-07-19 00:06:23 +02:00
Even Rouault 681d389098 Merge pull request #3830 from rouault/fix_3828
Projected CRS identification: fix crash when the base CRS is a non-geographic geodetic CRS (fixes #3828)
2023-07-18 22:52:56 +02:00
Even Rouault b436980840 Projected CRS identification: fix crash when the base CRS is a non-geographic geodetic CRS (fixes #3828) 2023-07-18 12:29:14 +02:00
Even Rouault f5d206ced4 Merge pull request #3827 from rouault/epsg_10_093
Database: update to EPSG 10.093
2023-07-18 12:10:55 +02:00
Even Rouault 0af13b885f Database: update to EPSG 10.093 2023-07-17 22:31:34 +02:00
Even Rouault 3aa97a6966 proj_factors(): make it work with projected CRS with non-metre unit and/or northing/easting axis order (fixes #3824) 2023-07-17 22:12:42 +02:00
Even Rouault c5b74f1513 Merge pull request #3820 from rouault/fix_3819
Various fixes related to #3819
2023-07-17 20:06:04 +02:00
Even Rouault fad9ad9979 exportToPROJString(): when a NADCON operation is included in a vertical transformation, do not include axis swap 2023-07-15 18:43:44 +02:00
Even Rouault f1d29da551 fixStepsDirection(): enable to define a concatenated operationg ending with a NADCOND (3D) transformation (use case of refs #3819) 2023-07-15 18:43:44 +02:00
Even Rouault 2e52000c5a factory.cpp: include authority name in exception 2023-07-15 18:43:44 +02:00
Even Rouault 28e35de900 Add a way to skip inconsistently defined operations in createFromCoordinateReferenceSystemCodes() and createFromCRSCodesWithIntermediates() 2023-07-15 18:43:44 +02:00
Even Rouault 9ecb3a47bb fixStepsDirection(): pass database context 2023-07-15 18:43:44 +02:00
Even Rouault 8b562afb4f ConcatenatedOperation::fixStepsDirection(): fix detection of geocentric CRS which wrongly detected geographic 3D CRS too 2023-07-15 18:43:43 +02:00
Even Rouault f440bfd11a Merge pull request #3821 from rouault/unused-but-set-variable-wkt
Fix -Wunused-but-set-variable with recent clang in bison generated parsers
2023-07-12 15:07:20 +02:00
Even Rouault 0f2a2278b8 Fix -Wunused-but-set-variable with recent clang in bison generated parsers 2023-07-12 00:34:57 +02:00
Even Rouault ed8f029494 Merge pull request #3817 from AlexBass05/add-polish-geoid2021
Add Polish geoid model PL-geoid2021
2023-07-11 13:11:29 +02:00
Mike Taves 9ff293a5ab ReadTheDocs: add htmlzip to offline formats; remove ePub (#3810) 2023-07-10 12:37:02 +12:00
Even Rouault 9c29825974 Merge pull request #3816 from rouault/iau_EPSG_1026_Mercator
Implements proposal001 from Planetary DWG from OGC
2023-07-06 16:03:33 +02:00
Even Rouault a4ae86ae93 Merge pull request #3812 from rouault/epsg_10_091
Update to EPSG 10.091 and Equidistant Conic: add mapping to new EPSG:1119 method
2023-07-06 15:57:06 +02:00
Even Rouault e53107d884 proj_db_table_defs.sql: add EPSG_1026_Mercator (Spherical) 2023-07-06 15:24:34 +02:00
Alexander Nehrbass d2f5941613 Add Polish geoid model PL-geoid2021 2023-07-06 15:00:46 +02:00
Kristian Evers 073c25f52a Merge pull request #3813 from OSGeo/busstoptaktik-patch-1
Deformation: Make code and comments compatible
2023-07-06 08:33:51 +02:00
Mike Taves 50e8a55c22 plot.py: rewrite using shapely>=2 (#3811) 2023-07-06 10:04:21 +12:00
Even Rouault 64d6d5f3a5 Equidistant Conic: add mapping to new EPSG:1119 method 2023-07-05 21:05:57 +02:00
Thomas Knudsen a5b648782b Deformation: Make code and comments compatible
The expression in the head comment describing the transformation had a switched sign, compared to the code in [lines 278-289](https://github.com/OSGeo/PROJ/blob/effac63ae5360e737790defa5bdc3d070d19a49b/src/transformations/deformation.cpp#L278-L289).

Also, the description of file formats, while still relevant, needed an update to mention the possibility of representing all three components of the deformation model as a GTG file
2023-07-05 20:43:22 +02:00
Even Rouault 345d92c192 Database: update to EPSG v10.091 2023-07-05 19:08:45 +02:00
Kristian Evers effac63ae5 Merge pull request #3802 from kbevers/stale-action
Add stale GitHub action, as replacement for old stale GitHub integration
2023-06-30 09:58:35 +02:00
Kristian Evers 8d77d17a7d Merge pull request #3804 from OSGeo/backport-3803-to-master
[Backport master] Update news.rst
2023-06-30 09:04:16 +02:00
Kristian EversandMike Taves 35402eaa11 Update .github/workflows/stale.yml
Co-authored-by: Mike Taves <mwtoews@gmail.com>
2023-06-30 09:03:25 +02:00
Kristian Evers 1e69a8be36 Merge pull request #3803 from jidanni/patch-33
Update news.rst
2023-06-29 20:53:14 +00:00
Kristian Evers da767ab699 Add stale GitHub action, as replacement for old stale GitHub integration
Previously we had the "stale bot" which posted reminders in inactive
issues and PR's. The stale bot used now removed functionality of GitHub
and it hasn't worked for about a year. This commit introduces the same
functionality based on GitHub Actions. The action setup is grabbed from
the QGIS project and adapted to the PROJ project.

With the stale action in place, PR's and issues are marked "stale" after
60 days of inactivity. If 7 more days passes without any activity the
issue or PR is closed.
2023-06-29 09:51:23 +02:00
Jean-Christophe Malapert 6cbedee694 Add new projection : Mercator (Spherical) 2023-06-26 16:00:45 +02:00
Jean-Christophe Malapert d1f955f622 Update build_db_from_iau.py
Update IAU script according to https://github.com/opengeospatial/Planetary-DWG/blob/main/draft_crs_definitions/proposal001.adoc from issue opengeospatial/Planetary-DWG#5
2023-06-26 14:35:30 +02:00
Even Rouault 2504995b86 omerc.rst: fix example (fixes #3794) 2023-06-25 16:39:36 +02:00
Even Rouault 8ddd640337 Merge pull request #3760 from rouault/proj_ini_defaults
proj.ini: set default values of parameter to be consistent, and some …
2023-06-25 16:29:03 +02:00
Even Rouault fbe4a45d8e Merge pull request #3750 from rouault/fix_3749
omerc: catch invalid value of gamma (when specified without alpha)
2023-06-25 16:28:51 +02:00
Even Rouault df8e98a220 Merge pull request #3762 from rouault/ad660a83982ec1cf85320f19036efbc16c9f00a1_fix
Fix proj-config.cmake to not try including proj4-targets.cmake in INSTALL_LEGACY_CMAKE_FILES=OFF mode
2023-06-23 23:59:57 +02:00
Even Rouault c0cc3ab4cc Fix proj-config.cmake to not try including proj4-targets.cmake in INSTALL_LEGACY_CMAKE_FILES=OFF mode
This is a follow-up to ad660a8398
2023-06-23 23:02:06 +02:00
積丹尼 Dan Jacobson 17cfd85ecc Always use the cleanest examples.
Move repetitive default into text explanation.

P.S., maybe one day even consider changing the
default +ellps=GRS80 to +ellps=WGS84... but no big deal...
2023-06-23 21:11:30 +08:00
Even Rouault ad8aff89f6 Merge pull request #3758 from jidanni/patch-9
Update ellipsoids.rst to mention default
2023-06-23 13:09:01 +02:00
積丹尼 Dan Jacobson 8dbd4039bd omerc.rst: add comparison with spherical tmerc (#3752) 2023-06-23 13:08:36 +02:00
Even Rouault 6f6bb6d2ea metadata.sql: update PROJ_DATA.VERSION to 1.15 2023-06-23 13:00:34 +02:00
Even Rouault a9467fb4b7 Merge pull request #3748 from rouault/fix_ossfuzz_57328
GeographicBoundingBox::intersection(): avoid infinite recursion and stack overflow on invalid bounding boxes
2023-06-23 12:59:56 +02:00
Mike Taves 641749e872 Docs: refactor Python code for sphinx configuration and extensions (#3761) 2023-06-23 22:58:18 +12:00
Even Rouault 3f43e13920 Merge pull request #3763 from jjimenezshaw/argentinian-geoid
Add Argentinian geoid model filename to grid_alternatives.sql
2023-06-23 12:51:35 +02:00
Javier Jimenez Shaw d5b7883d03 add GEOIDE-Ar16.gri in grid_alternatives.sql as ar_ign_GEOIDE-Ar16.tif 2023-06-23 10:08:18 +02:00
Even Rouault 8409e8e03e GeographicBoundingBox::intersection(): avoid infinite recursion and stack overflow on invalid bounding boxes
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57328
2023-06-21 22:56:32 +02:00
Even Rouault 8d1e09d5f6 CMake: build fuzzers in standalone mode as part of BUILD_TESTING 2023-06-21 22:56:32 +02:00
積丹尼 Dan Jacobson 69dea10cd6 Update proj.rst example to modern usage (#3754) 2023-06-19 22:33:20 +02:00
Even Rouault e5779db6e3 proj.ini: set default values of parameter to be consistent, and some missing documentation 2023-06-19 22:23:30 +02:00
Even Rouault 683c716899 Merge pull request #3759 from OSGeo/backport-3757-to-master
[Backport master] Remove testing residue
2023-06-19 14:44:49 +02:00
Even Rouault e8432e4696 Merge pull request #3757 from jidanni/patch-8
Remove testing residue
2023-06-19 12:44:00 +00:00
積丹尼 Dan Jacobson 9f022156ca Update ellipsoids.rst to mention default
Declare default.
2023-06-19 20:26:14 +08:00
積丹尼 Dan Jacobson 02e12b45ed Simplify eqc.rst example (#3755) 2023-06-19 14:22:27 +02:00
Even Rouault 09542eca5e omerc: catch invalid value of gamma (when specified without alpha)
Fixes #3749

From the maths of the computation of alpha from gamma, there is a
limitation where the maximum (absolute) value of gamma should be roughly
less than 90° - |lat_0|

New error message:
```
$ bin/proj -I +proj=omerc +lat_0=10  +lonc=10 +gamma=81
proj_create: Error 1027 (Invalid value for an argument): omerc: Invalid value for gamma: given lat_0 value, |gamma| should be <= 80.031869°
Rel. 9.3.0, September 1st, 2023
<proj>:
projection initialization failure
cause: Invalid value for an argument
program abnormally terminated
```
2023-06-17 15:10:07 +02:00
Even Rouault 7e10ddc628 Merge pull request #3747 from rouault/fix_3746
CMake: remove useless cross-compiling related checks (fixes #3746)
2023-06-14 20:02:12 +02:00
Even Rouault 6167e76e13 CMake: remove useless cross-compiling related checks (fixes #3746) 2023-06-13 16:47:31 +02:00
Mike Taves 9d1a1a9ca1 CMake: add /disabled_workflows/ to CPACK_SOURCE_IGNORE_FILES [ci skip] 2023-06-01 20:25:58 +12:00
Kristian Evers 3df0c00439 Update website for 9.2.1 release 2023-06-01 09:41:47 +02:00
Even Rouault 1600a3a843 Merge pull request #3743 from mwtoews/doc-build-cleanup
Doc/CI: Transition to ReadTheDocs, clean-up previous methods
2023-05-31 19:44:52 +02:00
Even Rouault 970a0f7cbb Merge pull request #3744 from mwtoews/travis-ci-doc-build
CI: Clean-up Travis CI scripts and files related to publishing docs
2023-05-31 19:40:41 +02:00
Even Rouault cffe10ef3c Merge pull request #3741 from rouault/mercator_spherical
Implement EPSG:1026 Mercator (Spherical) method
2023-05-31 19:40:06 +02:00
Mike Taves 357f5f24b6 Doc/CI: Transition to ReadTheDocs, clean-up previous methods
- Remove HTML references to PDF documentation
- Update HOWTO-RELEASE with new steps
- Clean-up GitHub doc workflow
2023-05-29 09:00:11 +12:00
Mike Taves 8502ca7653 CI: Clean-up Travis CI scripts and files related to publishing docs 2023-05-29 08:58:34 +12:00
Even Rouault 2ba6637317 Map EPSG:1026 Mercator (Spherical) method to +proj=merc +R_C 2023-05-25 14:54:17 +02:00
Even Rouault d069819884 Add +R_C as an ellipsoid spherification parameter to use the radius of the conformal sphere 2023-05-25 14:53:53 +02:00
Kristian Evers 4c3b426405 Update NEWS for 9.2.1 release 2023-05-24 21:20:08 +02:00
Even Rouault a107fa25e1 Merge pull request #3738 from kbevers/dk_sdfi_grids
Add Danish grid files to grid_alternatives
2023-05-24 13:18:04 +02:00
Even Rouault 252e8a2158 Merge pull request #3736 from rouault/fix_3732
tinshift: raise maximum size of JSON file to 100 MB (fixes #3732)
2023-05-23 15:54:13 +02:00
Kristian Evers be2e26efdb Add Danish grid files to grid_alternatives 2023-05-23 12:37:16 +02:00
Even Rouault 91748f84b6 tinshift: raise maximum size of JSON file to 100 MB (fixes #3732)
Loading a 60 MB JSON file takes ~ 3 seconds on a release build, and
consumes ~ 1.3 GB RAM according to Valgrind
2023-05-16 19:01:55 +02:00
Even Rouault f4a63f43af Merge pull request #3730 from rouault/only_best_error_set
proj_trans(): set PROJ_ERR_COORD_TRANSFM_NO_OPERATION error when failing in ONLY_BEST=YES mode
2023-05-16 11:13:43 +02:00
Even Rouault 90a9f3f970 Merge pull request #3729 from rouault/crs_to_crs_geocentric_crs
cs2cs / proj_create_crs_to_crs(): fix regression with geocentric CRS
2023-05-16 11:13:35 +02:00
Even Rouault 852f3c4ce3 Merge pull request #3731 from rouault/epsg_10_088
Database: update to EPSG 10.088
2023-05-16 11:13:15 +02:00
Even Rouault f5a4a3a6ac Add support for EPSG:1102 'Lambert Conic Conformal (1SP variant B)' method, and import related EPSG records 2023-05-14 16:11:54 +02:00
Even Rouault e6e3a2faff Database: update to EPSG 10.088
The import script has been modified to avoid import errors on the
following Danish CRS:
- Skipping EPSG:10258 GS reconstruction east-orientated as we do not handle yet projection method EPSG:1102 / Lambert Conic Conformal (1SP variant B)
- Skipping EPSG:10262 GSB reconstruction east-orientated as we do not handle yet projection method EPSG:1102 / Lambert Conic Conformal (1SP variant B)
- Skipping EPSG:10266 KK reconstruction east-orientated as we do not handle yet projection method EPSG:1102 / Lambert Conic Conformal (1SP variant B)
2023-05-13 19:06:28 +02:00
Even Rouault c19cc0838e proj_trans(): set PROJ_ERR_COORD_TRANSFM_NO_OPERATION error when failing in ONLY_BEST=YES mode 2023-05-13 18:03:53 +02:00
Even Rouault fc456d9f23 Doc: proj_create_crs_to_crs_from_pj(): formatting fix 2023-05-13 13:10:58 +02:00
Even Rouault 190bfb245a cs2cs / proj_create_crs_to_crs(): fix regression with geocentric CRS
Related to use case of https://github.com/OSGeo/gdal/issues/7753

When a transformation involved a datum shift with a grid and a
geocentric CRS as source/target, since PROJ 9.2.0 and the changes for
the only_best mode, even in just warning mode, if the grid of the "best"
transformation was missing, then the transformation would completely
fail, whereas with earlier versions it would fallback to a ballpark
transformation. So restore that mode, and actually enhance the operation
selection logic, by allowing to select operations based on their area of
validity even if the input coordinate are geocentric (in which case a
conversion of them to geographic is done).
2023-05-13 01:19:58 +02:00
Even Rouault 9d3737bd59 Merge pull request #3727 from rouault/fix_3725
CRS instanciation from PROJ.4 string: set 'Unknown based on XXXX ellipsoid' datum name...
2023-05-12 18:15:42 +02:00
Even Rouault 964d4da3da CRS instanciation from PROJ.4 string: set 'Unknown based on XXXX ellipsoid' datum name...
...when instanciating from known +a,+rf

and change WGS84 -> WGS 84 and GRS80 -> GRS 1980 to use EPSG names
when building from +ellps=WGS84/GRS80 (fixes #3725)

Now we get
```
$ bin/projinfo  "+proj=geos +lon_0=0 +h=35786400 +ellps=WGS84 +units=m +sweep=y +no_defs +type=crs"
PROJ.4 string:
+proj=geos +lon_0=0 +h=35786400 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs +type=crs

WKT2:2019 string:
PROJCRS["unknown",
    BASEGEOGCRS["unknown",
        DATUM["Unknown based on WGS 84 ellipsoid",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1],
                ID["EPSG",7030]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8901]]],
    CONVERSION["unknown",
        METHOD["Geostationary Satellite (Sweep Y)"],
        PARAMETER["Longitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Satellite Height",35786400,
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]],
        PARAMETER["False easting",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]]]

$ bin/projinfo  "+proj=geos +lon_0=0 +h=35786400 +a=6378137.0 +rf=298.257223563 +units=m +sweep=y +no_defs +type=crs"
PROJ.4 string:
+proj=geos +lon_0=0 +h=35786400 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs +type=crs

WKT2:2019 string:
PROJCRS["unknown",
    BASEGEOGCRS["unknown",
        DATUM["Unknown based on WGS 84 ellipsoid",
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1,
                    ID["EPSG",9001]]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8901]]],
    CONVERSION["unknown",
        METHOD["Geostationary Satellite (Sweep Y)"],
        PARAMETER["Longitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Satellite Height",35786400,
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]],
        PARAMETER["False easting",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]]]
```
2023-05-11 12:14:51 +02:00
Even Rouault cfed44da80 Merge pull request #3724 from rouault/fix_test_gdalwarp_lib_135
Fix unreleased regression related to 78d563c97f, that caused GDAL's test_gdalwarp_lib_135 test to fail
2023-05-11 11:36:42 +02:00
Even Rouault e1b006e20c Fix unreleased regression related to 78d563c97f, that caused GDAL's test_gdalwarp_lib_135 test to fail 2023-05-10 19:51:23 +02:00
Even Rouault 03fac0e716 Merge pull request #3720 from rouault/esri_polar_stereographic
ESRI WKT: improve roundtrip of name and definition for UPS WGS84 CRS
2023-05-09 14:35:16 +02:00
Even Rouault ab15a811b5 Merge pull request #3721 from rouault/epsg_10_087
Database: update to EPSG 10.087
2023-05-09 01:10:01 +02:00
Even Rouault d04cd211a5 Database: update to EPSG 10.087 2023-05-07 23:08:38 +02:00
Even Rouault aab4742353 WKT ESRI: recognize Polar_Stereographic_Variant_A method name which is used in the official ESRI formulation of EPSG:5041 and EPSG:5042 2023-05-07 22:53:02 +02:00
Even Rouault 720e728b95 Import from ESRI WKT: remove special case of renaming UPS_North / UPS_South which appears to be undesirable 2023-05-07 22:42:55 +02:00
Even Rouault 20cd53c643 Merge pull request #3718 from rouault/document_wintri_validity_domain
Add code comment about likely domain of validity for wintri in +over mode
2023-05-02 19:14:15 +02:00
Mike Taves 2954fdb470 CI: use PROJ_DB_CACHE_DIR (#3717) 2023-05-02 19:14:00 +02:00
Even Rouault 55a22c9977 Add code comment about likely domain of validity for wintri in +over mode
Capitalizes on investigation done in
https://lists.osgeo.org/pipermail/gdal-dev/2023-April/057164.html
2023-04-30 15:47:23 +02:00
Even Rouault 653a94b4ba Merge pull request #3715 from rouault/epsg_10_086
Database: update to EPSG 10.086
2023-04-30 14:02:33 +02:00
Even Rouault 408cb116e3 Database: update to EPSG 10.086 2023-04-29 19:10:31 +02:00
Even Rouault 748c943774 Merge pull request #3712 from mwtoews/vcpkg-2023.04.15
CI: upgrade vcpkg tag used for AppVeyor; use --triplet option
2023-04-29 11:35:38 +02:00
Even Rouault fb505f4bc2 Merge pull request #3711 from mwtoews/proj-db-cache-dir
CMake: add PROJ_DB_CACHE_DIR
2023-04-29 11:33:36 +02:00
Mike Taves b1a83e514f resolve MSVC warnings C4800 2023-04-27 12:43:03 +12:00
Mike Taves 4d5923edb1 CI: upgrade vcpkg tag used for AppVeyor; use --triplet option 2023-04-27 11:56:56 +12:00
Mike Taves 4d56195e15 CMake: add PROJ_DB_CACHE_DIR 2023-04-27 09:46:33 +12:00
Even Rouault 700721eeaf Merge pull request #3707 from rouault/fix_crs_to_crs_warn_only_best
proj_create_crs_to_crs(): restore behaviour of PROJ 9.1
2023-04-19 22:00:24 +02:00
Even Rouault 977ce13070 Merge pull request #3705 from rouault/fix_3593
Add C++ API to transform coordinate and a C++ quickstart
2023-04-19 22:00:16 +02:00
Even Rouault 78d563c97f proj_create_crs_to_crs(): restore behaviour of PROJ 9.1
Fixes https://lists.osgeo.org/pipermail/proj/2023-April/011003.html
that is ``cs2cs EPSG:4326+5773 EPSG:4326+5782`` without grids available.

Fixes situations where getting operations in PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE
mode returns one single gridded operations where the grid isn't available or
a ballpark operation.
We retry in PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID
mode to get a potential ballpark operation.

Follow-up to similar fix of https://github.com/OSGeo/PROJ/pull/3614
2023-04-12 19:25:49 +02:00
Even Rouault b214363f78 DatabaseContext::lookForGridInfo(): deal with special 'null' grid 2023-04-12 18:53:31 +02:00
Even Rouault 4ed5050e3e createOperationsVertToVert(): assign an extent 2023-04-12 18:15:43 +02:00
Even Rouault 66dbb7f58b Doc: add a C++ quickstart (fixes #3593) 2023-04-09 23:12:19 +02:00
Even Rouault 54ad4d839b Add build support for the examples/ programs (disabled by default, unless -D BUILD_EXAMPLES=ON is set) 2023-04-09 23:12:19 +02:00
Even Rouault ed4e798b7c CMakeLists.txt: distribute examples 2023-04-09 23:12:19 +02:00
Even Rouault f7c90ff243 pj_obs_api_mini_demo.c: remove header comments non-essential IMHO for the beginner and reflecting more historical evolution 2023-04-09 23:12:18 +02:00
Even Rouault 827130b754 Doc: remove empty page 2023-04-09 22:34:51 +02:00
Even Rouault fb682763e1 C++ API: add a CoordinateTransformer class, and CoordinateOperation::coordinateTransformer() (refs #3593) 2023-04-09 22:34:51 +02:00
Even Rouault 04615b8dbe Fix code format 2023-04-09 20:23:03 +02:00
Even Rouault b6a0cfa3ae Merge pull request #3645 from AndrewAnnex/add_mercator_to_build_db_from_iau.py
Adds Pseudo Mercator to build_db_from_iau.py
2023-04-07 20:02:48 +02:00
Even Rouault da96db32a2 Database: refresh IAU CRS with addition of Pseudo Mercator ones 2023-04-07 18:08:18 +02:00
Even Rouault b147211021 Merge pull request #3697 from rouault/fix_3696
CMake: avoid imbalanced cmake_policy push/pop if TIFF or CURL dependency cannot be found (fixes #3696)
2023-04-06 22:08:11 +02:00
Even Rouault f39d49a649 Merge pull request #3700 from kannes/patch-1
Fix typo "geograpic" -> "geographic" in logging/error output
2023-04-05 11:32:33 +02:00
Hannes 79e0911e1d Fix typo "geograpic" -> "geographic" in logging/error output 2023-04-05 11:14:47 +02:00
Even Rouault efe1863bf8 Merge pull request #3695 from rouault/fix_3689
PROJJSON: fix import/export of integer parameter value, and deal with…
2023-04-04 11:27:33 +02:00
Even Rouault 52285e9a1d Merge pull request #3694 from rouault/nc_new_grids
Database: register grids for New Caledonia (added per https://github.com/OSGeo/PROJ-data/pull/99) and tune createOperations()
2023-04-04 11:27:22 +02:00
Even Rouault f5fb59b792 CMake: avoid imbalanced cmake_policy push/pop if TIFF or CURL dependency cannot be found (fixes #3696) 2023-04-04 11:24:01 +02:00
Even Rouault 9f577f35a3 PROJJSON: fix import/export of integer parameter value, and deal with interpolation CRS parameters in conversions (fixes #3689) 2023-04-02 16:41:48 +02:00
Even Rouault a1cc07aa2c createOperations(): tune to get better results in some cases, typically RGNC91-93 to RGNC15 2023-04-01 23:41:54 +02:00
Even Rouault dcbf5a0fad Database: register grids for New Caledonia (added per https://github.com/OSGeo/PROJ-data/pull/99) 2023-04-01 20:59:22 +02:00
Even Rouault bed19dec2e Merge pull request #3692 from rouault/epsg_10_085
Database: update to EPSG 10.085
2023-04-01 20:48:26 +02:00
Even Rouault 163274c512 Database: update to EPSG 10.085 2023-04-01 18:51:39 +02:00
Even Rouault 285b4dcebe Merge pull request #3685 from rouault/engineering_crs_comparisons
EngineeringCRS: make proj_create_engineering_crs() set a datum name, …
2023-04-01 17:37:35 +02:00
Even Rouault 8806a9239d Merge pull request #3686 from rouault/register_HeTa2010
Database: register Hessen HeTA2010 grid (cf OSGeo/PROJ-data#98)
2023-04-01 17:37:20 +02:00
Even Rouault 2b43975eb8 Database: register Hessen HeTA2010 grid (cf OSGeo/PROJ-data#98) 2023-03-28 21:46:16 +02:00
Even Rouault 324954b648 EngineeringCRS: make proj_create_engineering_crs() set a datum name, and relax isEquivalentTo() comparisons to deal with case of https://github.com/r-spatial/sf/issues/2049#issuecomment-1486600723 2023-03-28 13:34:05 +02:00
Even Rouault bafe3a9190 Merge pull request #3678 from rouault/fix_gdal_7505
Database: add alias for old ESRI datum/CRS names of EPSG:8353 S_JTSK_JTSK03_Krovak_East_North
2023-03-24 14:55:42 +01:00
Even Rouault 7558e51526 Merge pull request #3674 from rouault/doc_search_fix
Doc: fix search functionnality
2023-03-24 01:28:51 +01:00
Even Rouault d8608e094c Database: add alias for old ESRI datum/CRS names of EPSG:8353 S_JTSK_JTSK03_Krovak_East_North
Fixes https://github.com/OSGeo/gdal/issues/7505
2023-03-24 01:27:21 +01:00
Even Rouault fd1b61e71c Doc: fix search functionnality 2023-03-22 20:13:43 +01:00
Even Rouault ec3415df96 Merge pull request #3673 from rouault/filter_concat_op
Coord. operation factory: count identified concatenated operations as a single step
2023-03-22 20:03:40 +01:00
Even Rouault aa111e7307 Merge pull request #3672 from rouault/concatenated_accuracy
WKT/PROJJSON: import/export accuracy of ConcatenatedOperation
2023-03-22 20:03:31 +01:00
Even Rouault 84ae96c0da Merge pull request #3668 from rouault/hydroid_height
vgridshift/gridshift: accept hydroid_height as valid band description
2023-03-22 20:03:19 +01:00
Even Rouault 1e39be3253 Coord. operation factory: count identified concatenated operations as a single step 2023-03-22 13:52:03 +01:00
Even Rouault 05a497d7ed WKT/PROJJSON: import/export accuracy of ConcatenatedOperation
Bump PROJJSON spec to v0.7
2023-03-22 13:39:41 +01:00
Even Rouault f5fc71e987 vgridshift/gridshift: accept hydroid_height as valid band description 2023-03-17 13:32:11 +01:00
Even Rouault c31146bee2 Merge pull request #3665 from rouault/ghcr_proj_docs
Use ghcr.io/osgeo/proj-docs as Docker hub is sunsetting free organizations (refs OSGeo/gdal#7447)
2023-03-16 21:19:26 +01:00
Even Rouault 7ec375946d Use ghcr.io/osgeo/proj-docs as Docker hub is sunsetting free organizations (refs OSGeo/gdal#7447) 2023-03-15 23:28:47 +01:00
Even Rouault c0a3b1d86a [Lint] projinfo: use const reference for for argument (CID 396530) 2023-03-12 19:26:46 +01:00
Even Rouault 4975df9000 .github/workflows/backport.yml: update with a BACKPORT_TOKEN from my (Even Rouault) account that has write permissions 2023-03-11 15:49:01 +01:00
Even Rouault ae45f2bac6 Merge pull request #3661 from rouault/fix_slow_proj_trans
[Performance regression fix] Fix slowness on proj_trans() on WGS 84 <--> NAD83 conversions
2023-03-11 12:59:57 +01:00
Even Rouault d9503987db [Performance regression fix] Fix slowness on proj_trans() on WGS 84 <--> NAD83 conversions
Fix performance regression of 9.2.0 due to
proj_coordoperation_is_instantiable() being potentially called at each
point transformation and being a slow operation, due to calling
exportToPROJString()
2023-03-10 21:30:46 +01:00
Even Rouault cf8ff02250 Merge pull request #3658 from mwtoews/upgrade-other-ci
CI: update other actions, use apt-get for scripts
2023-03-09 18:20:29 +01:00
Even Rouault 09a1077acc Merge pull request #3656 from rouault/fix_3654
PROJ string CRS parser: make sure that PROJ arguments of the rotated …
2023-03-09 18:19:36 +01:00
Mike Taves 963dfe93c3 CI: update other actions, use apt-get for scripts 2023-03-09 15:51:03 +13:00
Mike Taves 9f089df2b6 CI: update ubuntu images, actions/checkout, actions/cache, unique job IDs (#3649) 2023-03-09 12:20:43 +13:00
Even Rouault 0bd89d6617 PROJ string CRS parser: make sure that PROJ arguments of the rotated string are kept in the WKT representation (fixes #3654) 2023-03-08 22:08:28 +01:00
Even Rouault aab966a70c Merge pull request #3652 from rouault/fix_3651
proj_create_operations(): fix documentation related to 3D transformations (fixes #3651)
2023-03-08 21:21:13 +01:00
Even Rouault eba976b257 proj_create_operations(): fix documentation related to 3D transformations (fixes #3651)
The behaviour was changed per 3e7984f3b2
in 9.1.0
2023-03-08 12:45:17 +01:00
Even Rouault 25ca424211 Merge pull request #3648 from mwtoews/upgrade-csa
Update clang static analyzer CI and docs for ubuntu-22.04
2023-03-07 15:04:51 +01:00
Even Rouault c22d1e0eb1 Merge pull request #3646 from rouault/epsg_10_084
Database: update to EPSG 10.084
2023-03-07 15:04:40 +01:00
Even Rouault 13b6221293 pj_open_lib_internal(): rework to avoid false positive warnings of Coverity Scan / CSA about nullptr dereference 2023-03-07 12:13:35 +01:00
Mike Taves f8216267fe Update clang static analyzer CI and docs for ubuntu-22.04 2023-03-07 23:15:39 +13:00
Even Rouault 012792dd1c Database: update to EPSG 10.084 2023-03-07 10:52:25 +01:00
Even Rouault 6e027ed254 Merge pull request #3643 from rouault/epsg_10_083
Database: update to EPSG 10.083
2023-03-07 10:42:25 +01:00
Andrew Annex 99267d1de3 Adds Pseudo Mercator to build_db_from_iau.py
Note there is some inconsistency with hyphenation of "Pseudo-Mercator"
so this may need a double check, but I believe what I have is consistent
with EPSG:3857 WKT2:2019 representation.
2023-03-05 16:16:56 -08:00
Even Rouault a4caae4662 Merge pull request #3642 from rouault/fix_3639
Fix build errors with Cygwin (fixes #3639)
2023-03-06 00:13:45 +01:00
Even Rouault 5329f80b32 Fix build errors with Cygwin (fixes #3639) 2023-03-05 18:08:13 +01:00
Even Rouault 7ecb817ae3 Database: update to EPSG 10.083 2023-03-05 18:07:33 +01:00
Even Rouault bccfd804f8 testvarious: do not output program name / versoin number 2023-03-05 18:05:03 +01:00
Even Rouault c6d07712f6 Merge pull request #3640 from VTCAKAVSMoACE/patch-1
Fuzzer: indicate discarded inputs
2023-03-05 15:07:18 +01:00
Kristian Evers 3e6f080ecd Bump version numbers in anticipation of 9.3.0 release 2023-03-01 11:20:25 +01:00
Kristian Evers 0dac3480d4 Update website for 9.2.0 release 2023-03-01 10:51:13 +01:00
Addison Crump 1a8e9032ff Fuzzer: indicate discarded inputs 2023-02-28 19:05:40 +01:00
Even Rouault 2131c714eb Merge pull request #3636 from rouault/nad83_3d_as_wkt1_esri
WKT_ESRI export: do not export NAD83 3D as NAD83(HARN)
2023-02-23 20:03:10 +01:00
Even Rouault 407cb7b4fe Merge pull request #3635 from rouault/fix_3629
Database: add explicit casts to make sure all arms of columns selected by views have the same type affinity
2023-02-23 19:34:41 +01:00
Even Rouault de9842796f WKT_ESRI export: do not export NAD83 3D as NAD83(HARN) 2023-02-23 18:37:54 +01:00
Even Rouault d76b48e700 Database: add explicit casts to make sure all arms of columns selected by views have the same type affinity
This fixes the performance regression noticed with SQLite 3.41.0 both on
the microbenchmark of https://sqlite.org/forum/forumpost/bcc4375032 as
well with ``proj_test_cpp_api``

Fixes #3629
2023-02-23 17:20:05 +01:00
Even Rouault b302ae7dc1 Merge pull request #3633 from rouault/fix_3632
JSON/WKT: avoid precision issues on non-Intel architectures on coordinate epochs (fixes #3632)
2023-02-23 17:04:29 +01:00
Even Rouault fa8f46ce95 test: proj_create_crs_to_crs_from_pj_force_over(): avoid use of uninitialized memory 2023-02-23 14:56:59 +01:00
Even Rouault 7b0af478fb test/unit/test_io.cpp: change tests to avoid fp issues on some architectures (fixes #3632) 2023-02-22 20:11:24 +01:00
Even Rouault 8aafc3da3d JSON/WKT: avoid precision issues on non-Intel architectures on coordinate epochs (fixes #3632) 2023-02-22 18:30:30 +01:00
Even Rouault 9e359fbac4 Merge pull request #3630 from rouault/NEWS_fix
NEWS: move bug fix mention from 9.1.1 to 9.2.0
2023-02-22 16:16:04 +01:00
Even Rouault 698a3a558c NEWS: move bug fix mention from 9.1.1 to 9.2.0 2023-02-22 15:52:46 +01:00
Kristian Evers 8e7a55d37e Bump PROJ-data version in docs 2023-02-22 14:48:19 +01:00
Kristian Evers 7b334ef21a Update CITATION's for 2023 and 9.2.0 2023-02-22 14:48:19 +01:00
Kristian Evers d1eab48f4e Update man-pages from Sphinx-docs 2023-02-22 14:48:19 +01:00
Kristian Evers df35be6b4a Update man-pages from Sphinx-docs 2023-02-22 14:48:19 +01:00
Kristian Evers c0480770b1 Update NEWS for 9.2.0 release 2023-02-22 14:48:19 +01:00
Kristian Evers 06eb36f662 Use correct release version (9.1.1) in NEWS 2023-02-22 14:48:19 +01:00
Kristian Evers de7924f1ef Update NEWS for 9.1.1 release 2023-02-22 14:48:19 +01:00
Even Rouault 3ab636a255 isea.cpp: add comment about inverse 2023-02-22 12:48:21 +01:00
Kristian Evers 7e0c4ccf30 Merge pull request #3627 from twpayne/go-bindings
bindings: Use github.com/twpayne/go-proj for Go bindings
2023-02-22 10:41:03 +01:00
Tom Payne c20199204e bindings: Use github.com/twpayne/go-proj for Go bindings
github.com/everystreet/go-proj seems to be no longer maintained, and
github.com/twpayne/go-proj provides much more functionality.
2023-02-21 17:08:13 +01:00
Even Rouault c74c9573bd Merge pull request #3625 from rouault/fix_2152
Inverse eck4: add checks for projection domain (fixes #2152)
2023-02-21 13:29:24 +01:00
Even Rouault df54730441 Merge pull request #3626 from rouault/spheroid_inf
WKT1 parser: support inf as inverse flattening value (fixes Toblerity/Fiona@1208)
2023-02-21 13:29:14 +01:00
Even Rouault 087993ee6e WKT1 parser: support inf as inverse flattening value (fixes Toblerity/Fiona@1208)
Some WKT in the wild use "inf" in Shapefile .prj. Cf SPHEROID["unnamed",6370997,"inf"]
in https://zenodo.org/record/3878979#.Y_P4g4CZNH4,
https://zenodo.org/record/5831940#.Y_P4i4CZNH5
or https://grasswiki.osgeo.org/wiki/Marine_Science
2023-02-21 00:07:17 +01:00
Even Rouault f6e8478e61 Fix clang-tidy -checks=performance-inefficient-string-concatenation in library and apps codee 2023-02-19 13:10:49 +01:00
Even Rouault 22b84838ec .github/workflows/mac/before_install.sh: add pkg-config 2023-02-19 13:10:26 +01:00
Even Rouault c6c7f02915 Inverse eck4: add checks for projection domain (fixes #2152) 2023-02-18 19:53:02 +01:00
Even Rouault 4198920b10 eck4.cpp: improve code readability. No computation changes 2023-02-18 19:53:02 +01:00
Even Rouault b9198df550 .github/workflows/mac/before_install.sh: add pkg-config 2023-02-18 19:53:02 +01:00
Even Rouault 23a8eccf9e Merge pull request #3624 from rouault/fix_3623
createOperations(): avoid very poor performance / 'Too deep recursion in createOperations()' on a geographic CRS whose datum name is the alias of an official one (fixes #3623)
2023-02-16 21:24:02 +01:00
Even Rouault 40f96fb6e4 createOperations(): improve datum equivalence checking by passing databaseContext argument (refs #3623) 2023-02-16 16:01:31 +01:00
Even Rouault 62d5718c5d createOperations(): avoid very poor performance / 'Too deep recursion in createOperations()' on a geographic CRS whose datum name is the alias of an official one (fixes #3623)
Fixes regression introduced per https://github.com/OSGeo/PROJ/commit/29e9f73f9a2db5352baea7c4af08941680d102b8
2023-02-16 15:15:06 +01:00
Even Rouault 9a5042545d pj_get_suggested_operation(): avoid string comparisons by precomputing a boolean 2023-02-14 15:31:33 +01:00
Even Rouault 59c9812481 Merge pull request #3621 from rouault/pj_get_suggested_operation_tune
pj_get_suggested_operation(): tune for GDA94 <--> WGS84 and GDA2020 <…-> WGS84
2023-02-14 12:23:33 +01:00
Even Rouault e1f0b75fbb pj_get_suggested_operation(): tune for GDA94 <--> WGS84 and GDA2020 <--> WGS84
Before this change, the
au_icsm_GDA94_GDA2020_conformal_and_distortion.tif was considered as the
best operation for GDA94 <--> WGS84 and GDA2020 <--> WGS84. This change
makes the null transformation be the prefered one instead.
Applying the GDA94 <--> GDA2020 grid was highly questionable GDA2020 <--> WGS84.
Not completely sure for GDA94 <--> WGS84 though...

Relates to https://github.com/qgis/QGIS/issues/51792
2023-02-12 01:06:44 +01:00
Even Rouault c855964929 Merge pull request #3620 from rouault/fix_proj_pj_info
proj_pj_info(): make it behave like before ONLY_BEST addition (fixes #3619)
2023-02-11 13:24:23 +01:00
Even Rouault aa1a6beeb0 proj_pj_info(): make it behave like before ONLY_BEST addition (fixes #3619) 2023-02-11 03:36:50 +01:00
Even Rouault 049e8d46ae Merge pull request #3618 from rouault/fix_gdal_7210
WKT1 parser: only emit warning when encountering invalid UNKNOWN WKT1 axis direction (fixes #7210)
2023-02-10 20:24:07 +01:00
David Hoese 1be6e21a92 Add explicit NaN handling to proj_trans and gie (#3603) (fixes #3596) 2023-02-10 20:23:53 +01:00
Even Rouault da766b983a WKT1 parser: only emit warning when encountering invalid UNKNOWN WKT1 axis direction (fixes #7210) 2023-02-10 00:03:55 +01:00
Even Rouault 7704c3e1d5 Merge pull request #3615 from jjimenezshaw/missing-parenthesis
Doc: typo - missing parenthesis
2023-02-07 20:10:55 +01:00
Even Rouault 88d34d115f Merge pull request #3614 from rouault/fix_3613
proj_create_crs_to_crs(): restore behaviour of PROJ 9.1 (fixes #3613)
2023-02-07 20:10:33 +01:00
Javier Jimenez Shaw ba04ab7ad9 Doc: typo - missing parenthesis 2023-02-07 13:54:54 +01:00
Even Rouault 7ab4f6d54c proj_create_crs_to_crs(): restore behaviour of PROJ 9.1 (fixes #3613)
Fixes situations where getting operations in PROJ_GRID_AVAILABILITY_KNOWN_AVAILABLE
mode returns only gridded operations where the grids aren't available or
ballpark operations.
We retry in PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID
mode to get potential other transformations using CRS intermediates.
2023-02-07 13:09:42 +01:00
Kristian Evers 9b60d79c42 Merge pull request #3611 from heidivanparys/osgeo4w_installation
Update link to OSGeo4W Installer
2023-02-06 17:46:19 +01:00
Heidi Vanparys f169c49f16 Update link to OSGeo4W Installer 2023-02-06 17:00:01 +01:00
Even Rouault 667d6ae812 Merge pull request #3610 from AlexBass05/add-slovenia-geoid-model
Add Slovenian geoid model SLO-VRP2016/Koper
2023-02-06 15:28:17 +01:00
Even Rouault 421e4877fe Merge pull request #3609 from rouault/epsg_10_082
Database: update to EPSG 10.082
2023-02-06 13:07:40 +01:00
Even Rouault 0f2ac149a7 Merge pull request #3608 from rouault/fix_3607
proj_trans(): restore behaviour of PROJ 9.1 with transforming points …
2023-02-06 13:07:19 +01:00
Alexander Nehrbass fc5924452b Add Slovenian geoid model SLO-VRP2016/Koper 2023-02-06 11:39:36 +01:00
Even Rouault a7482d3775 Database: update to EPSG 10.082 2023-02-06 02:16:43 +01:00
Even Rouault 659572e544 proj_trans(): restore behaviour of PROJ 9.1 with transforming points in northern USA states from NAD27 to WGS 84 when no grid is available
Fixes #3607 and regression of d11c9d5
2023-02-05 15:00:37 +01:00
Even Rouault 976f8f943c Merge pull request #3606 from rouault/rtd_skip
.readthedocs.yaml: do not do builds only if the only changes are in docs/ or .readthedocs.yaml
2023-02-05 13:44:55 +01:00
Even Rouault 7bda88ce18 .readthedocs.yaml: do not do builds only if the only changes are in docs/ or .readthedocs.yaml
A substantial part of the API documentation comes from Doxygen &
Breathe, and thus depends on changes in src/
2023-02-04 16:20:14 +01:00
Even Rouault e5df93f820 Merge pull request #3604 from rouault/double_hyphen_merge
Doc: Prevent double hypen (--) to be replaced by Unicode long dash character
2023-02-04 14:47:36 +01:00
Even Rouault 8cd7be4802 Merge pull request #3601 from rouault/fix_source_crs
projinfo: fix long option name --source-crs (fixes #3600)
2023-02-04 14:47:24 +01:00
Even Rouault f5aa9c9868 Doc: Prevent double hypen (--) to be replaced by Unicode long dash character 2023-02-03 18:41:17 +01:00
Even Rouault 8c9cafc14f projinfo: fix long option name --source-crs (fixes #3600)
spotted by @santidhammo
2023-02-02 22:05:43 +01:00
Javier Jimenez Shaw 29eaa0de9b implement normalizeForVisualization for BoundCRS (#3598) 2023-02-02 21:15:20 +01:00
Even Rouault c3c276b06d Merge pull request #3595 from rouault/fix_3594
pj_get_suggested_operation(): handle longitudes outside of [-180,180]…
2023-01-27 13:21:30 +01:00
Even Rouault 32b04ef99e pj_get_suggested_operation(): handle longitudes outside of [-180,180] for coordinate operation selection (fixes #3594) 2023-01-26 19:25:44 +01:00
Even Rouault f7e8883958 Merge pull request #3590 from rouault/reformat_whole
Whole code-base reformatting
2023-01-26 17:19:13 +01:00
Mike Taves 73d7254d16 README.md: update Travis CI badge [ci skip] 2023-01-26 22:09:23 +13:00
Mike Taves a7801c204a ReadTheDocs: fix branch ref [ci skip] 2023-01-25 23:04:29 +13:00
Mike Taves cee637777b ReadTheDocs: update output directory for artefacts (#3591)
* use more apt, less conda
* show doxygen version
2023-01-25 13:50:41 +13:00
Even Rouault ddbd1089d2 Use explicitly clang-format-15 2023-01-24 15:27:56 +01:00
Even Rouault 46c5097f17 Add aa818d6772 to .git-blame-ignore-revs 2023-01-24 14:51:46 +01:00
Even Rouault reformatting bot aa818d6772 Reformat with clang-format 15 2023-01-24 14:51:21 +01:00
Even Rouault fa7574c6ac Update to clang-format 15 2023-01-24 14:50:51 +01:00
Mike Taves f6107a546f .readthedocs.yaml: improve skipping pattern [ci skip] 2023-01-25 01:23:00 +13:00
Even Rouault cb4e7850f4 README.md: remove appveyor badge [ci skip] 2023-01-24 12:57:08 +01:00
Even Rouault 330f9fa353 test/benchmark/CMakeLists.txt: hopefully fix Conda Windows build failure related to 'warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc' 2023-01-24 11:10:55 +01:00
Even Rouault 2356d9ab58 Add .git-blame-ignore-revs 2023-01-23 20:54:29 +01:00
Even Rouault reformatting bot f090353792 Whole code base reformatting 2023-01-23 20:53:58 +01:00
Even Rouault ae5b08e883 Doc: add a dev_practices.rst page 2023-01-23 20:15:25 +01:00
Even Rouault f017ffc7f0 Add a .pre-commit-config.yaml pre-commit configuration file 2023-01-23 20:02:59 +01:00
Even Rouault 878df58d60 Merge pull request #3515 from oleg-alexandrov/patch-7
Add example for how to use proj_create().
2023-01-23 19:14:17 +01:00
Even Rouault 045f497e00 Merge pull request #3578 from rouault/similarity_transformation
Implement EPSG:9621 'Similarity transformation' and import related tranformations from EPSG
2023-01-23 19:13:24 +01:00
Even Rouault d413b65528 Merge pull request #3579 from rouault/affine_cs
Implement AffineCS and handle it in WKT/PROJJSON
2023-01-23 16:42:39 +01:00
Even Rouault 8726c99d46 Merge pull request #3587 from rouault/no_wgs84_for_epsg_6316
createBoundCRSToWGS84IfPossible(): do not report +towgs84 for a CRS with multiple extents, such as EPSG:6316 (refs #3246)
2023-01-23 16:42:29 +01:00
Even Rouault b83a006a7b Merge pull request #3588 from rouault/proj_get_domain_count
C API: add proj_get_domain_count(), proj_get_area_of_use_ex() and proj_get_scope_ex()
2023-01-23 16:42:11 +01:00
Even Rouault 36226d56a9 C API: add proj_get_domain_count(), proj_get_area_of_use_ex() and proj_get_scope_ex()
Up to now, the C API only handled one single domain/usage par object,
but there are objets in the database that have several ones.

refs #3246
2023-01-23 14:29:37 +01:00
Even Rouault a3d45b7c16 createBoundCRSToWGS84IfPossible(): do not report +towgs84 for a CRS with multiple extents, such as EPSG:6316 (refs #3246) 2023-01-23 14:10:12 +01:00
Even Rouault 0622cf1c62 createBoundCRSToWGS84IfPossible(): factor code. No functional change 2023-01-23 13:20:52 +01:00
Even Rouault 4b50aac202 Implement AffineCS and handle it in WKT/PROJJSON 2023-01-21 21:29:37 +01:00
Even Rouault 8f9b77def9 typo fixes 2023-01-21 18:02:10 +01:00
Even Rouault e174cc2888 Implement EPSG:9621 'Similarity transformation' and import related transformations from EPSG
This is used for a number of projectedCRS -> projectedCRS coordinate
transformations.
2023-01-21 18:00:40 +01:00
Even Rouault e59ea65118 Merge pull request #3577 from rouault/wkt_enum_case_insensitive
WKT import: make axis direction and range meaning enumeration case insensitive as mandated by spec
2023-01-21 15:22:14 +01:00
Even Rouault c11a0baf51 WKT import: make axis direction and range meaning enumeration case insensitive as mandated by spec 2023-01-21 14:19:23 +01:00
Even Rouault 72a88d7cb4 test/unit/test_io.cpp: test importing invalid WKT/JSON with datum anchor, axisminval, axismaxval, rangemeaning 2023-01-21 13:47:10 +01:00
Even Rouault a1c7ae3e19 Merge pull request #3573 from rouault/fix_3571
Update WKT import to support WKT2 corrigendum
2023-01-21 13:21:58 +01:00
Even Rouault 88c3998c97 Merge pull request #3575 from rouault/database_esri_arcgis_pro_3_1
Database: resync ESRI objects with https://github.com/Esri/projection-engine-db-doc at tag v3.1.0
2023-01-21 13:16:24 +01:00
Even Rouault 29fa84237e Merge pull request #3574 from rouault/epsg_10_081
Database: update to EPSG 10.081
2023-01-21 13:13:45 +01:00
Even Rouault e82e52539c Merge pull request #3576 from OSGeo/busstoptaktik-patch-1
Remove dead prototype for pj_qsfn
2023-01-21 12:15:14 +01:00
Thomas Knudsen 2a4096c81c Remove dead prototype for pj_qsfn
pj_qsfn now takes its eccentricity parameters, `e` and `1+e*e`, directly as
function parameters. The old version, taking a pointer to `PJ` was left
in `proj_internal.h`. While not doing any harm there, there's also no
compelling reason to keep it.
2023-01-21 10:56:11 +01:00
Even Rouault a44d84de52 projjson.rst: remove mention of current version which is redundant with history paragraph 2023-01-20 16:07:50 +01:00
Even Rouault c4eae468d6 projjson.rst: remove mention about COORDINATEMETADATA not being implemented 2023-01-20 16:05:09 +01:00
Even Rouault 2ca2ce4c05 Database: resync ESRI objects with https://github.com/Esri/projection-engine-db-doc at tag v3.1.0 2023-01-19 19:49:52 +01:00
Even Rouault 59fef20b67 Add support for minimumValue, maximumValue, rangeMeaning properties in CoordinateSystemAxis, in WKT and PROJJSON (refs #3571) 2023-01-19 18:50:49 +01:00
Even Rouault 52a63a0268 Add support for DatumEpoch property in GeodeticReferenceFrame and VerticalReferenceFrame, in WKT and PROJJSON (refs #3571) 2023-01-19 18:50:49 +01:00
Even Rouault 23483df0dd Database: update to EPSG 10.081 2023-01-19 18:34:28 +01:00
Even Rouault 7a5278c944 Merge pull request #3570 from rouault/fix_3567
Actually fix proj_normalize_for_visualization() on a transformation got with FORCE_OVER=YES (fixes #3567)
2023-01-19 11:21:17 +01:00
Even Rouault e54d4b961d Merge pull request #3569 from rouault/fix_3568
createFromUserInput(): make http://www.opengis.net/def/crs/IAU/2015/XXXX work (fixes #3568)
2023-01-19 11:21:07 +01:00
Even Rouault 86b01b2703 proj_create_from_wkt(): make it work on COORDINATEMETADATA[] 2023-01-19 00:23:47 +01:00
Even Rouault 2ffc5933a5 Merge pull request #3562 from rouault/coordinateMetadata
Initial support for ISO19111 CoordinateMetadata class
2023-01-19 00:02:47 +01:00
Even Rouault 563ad45ec8 Actually fix proj_normalize_for_visualization() on a transformation got with FORCE_OVER=YES (fixes #3567) 2023-01-18 23:58:27 +01:00
Even Rouault d566d01070 createFromUserInput(): make http://www.opengis.net/def/crs/IAU/2015/XXXX work (fixes #3568) 2023-01-18 23:26:12 +01:00
Even Rouault fea8a4df74 Merge pull request #3566 from rouault/typo_fixes
Typo fixes and other changes to make ./scripts/fix_typos.sh happy
2023-01-18 23:00:52 +01:00
Even Rouault 790f0fcac9 Typo fixes and other changes to make ./scripts/fix_typos.sh happy 2023-01-17 23:42:36 +01:00
Even Rouault c41e7a6452 Merge pull request #3559 from rouault/tmg
Add correctly named createTunisiaMiningGrid() / proj_create_conversion_tunisia_mining_grid()…
2023-01-16 22:20:21 +01:00
Even Rouault 33f1914697 CoordinateMetadata: require epoch for dynamic CRS, forbid it for static CRS 2023-01-14 21:44:45 +01:00
Even Rouault 28e5849b97 Add CRS::isDynamic() 2023-01-14 21:37:53 +01:00
Even Rouault 5fecb30574 install.sh: validate PROJJSON CoordinateMetadata 2023-01-14 21:10:19 +01:00
Even Rouault 76959be8fb createOperations(): support one of source/target to be a CoordinateMetadata
but not both.

Note also that the core of createOperations() does not take into account
the source/target coordinate epoch in its logic to infer pipelines. It
just keep those values in its metadata, so that PJ* objects constructed
from them can later override the PJ_COORD.xyzt.t component.

So basically this is currently useful only for transformations between a
dynamic CRS and a static CRS (or the reverse).
2023-01-14 20:18:22 +01:00
Even Rouault 6ad88abbde createFromUserInput(): accept 'CRS_name@decimal_year' syntax to instanciate a CoordinateMetadata 2023-01-14 20:18:22 +01:00
Even Rouault a62cd93ae0 C API: add PJ_TYPE_COORDINATE_METADATA, proj_coordinate_metadata_get_epoch(), support if in proj_create() and proj_get_source_crs() 2023-01-14 20:18:22 +01:00
Even Rouault 540effbc2f JSON/WKT import: test invalid CoordinateMetadata 2023-01-14 20:18:22 +01:00
Even Rouault d434551c9d CoordinateMetadata: add C++ class, WKT and PROJJSON support 2023-01-14 20:18:22 +01:00
Even Rouault eb75c3b20e Add correctly named createTunisiaMiningGrid() / proj_create_conversion_tunisia_mining_grid() and deprecate the wrongly named methods (fixes #3543) 2023-01-14 20:18:08 +01:00
Even Rouault b7a8643566 Merge pull request #3563 from rouault/conda_disable_patches
CI Conda: remove patches from upstream proj.4 feedstock as it is applied in PROJ master
2023-01-14 20:17:28 +01:00
Even Rouault 9fb24ab284 .github/workflows/conda.yml: partial revert of 6dbee23fa9 to only do Conda builds on push, not pull request 2023-01-14 20:17:07 +01:00
Even Rouault 8e11cbc22d CI Conda: remove patches from upstream proj.4 feedstock as it is applied in PROJ master 2023-01-14 19:36:42 +01:00
Even Rouault 42266f8175 Merge pull request #3496 from seanm/Wcast-qual
Wcast-qual
2023-01-13 18:40:38 +01:00
Even Rouault 7490bf7414 formatting fix 2023-01-13 18:22:09 +01:00
Howard ButlerandMike Taves 6dbee23fa9 Implement ReadTheDocs (#3538)
Co-authored-by: Mike Taves <mwtoews@gmail.com>
2023-01-13 10:12:50 +13:00
Even Rouault 6d6b09b0ee Merge pull request #3550 from rouault/relax_ellipsoid_check
Check about consistent celestial body: relax tolerance for Mars use cases…
2023-01-12 19:53:40 +01:00
Even Rouault b9bad5a255 Merge pull request #3535 from rouault/fix_3533
proj_create_crs_to_crs_from_pj(): add a ONLY_BEST=YES option (fixes #3533)
2023-01-12 19:52:12 +01:00
Even Rouault 9020ae28ff proj.ini: do not set 'only_best_default' at all; and when set to on/off, disable related warnings 2023-01-12 18:58:32 +01:00
Even Rouault 97157e3014 best_only: move warning at the PJ* level 2023-01-12 18:58:32 +01:00
Even Rouault 9724764d96 Fix related to force_over 2023-01-12 18:58:32 +01:00
Even Rouault b1db3f64af cs2cs: add example demonstrating --only-best usefulness 2023-01-12 18:58:32 +01:00
Even Rouault 62d2291651 resource_files.rst: use literalinclude for proj.ini 2023-01-12 15:17:08 +01:00
Even RouaultandKristian Evers 4fb15a24c0 Update docs/source/apps/cs2cs.rst
Co-authored-by: Kristian Evers <kristianevers@gmail.com>
2023-01-12 15:12:06 +01:00
Even Rouault 6422f0c903 Merge pull request #3552 from visr/patch-1
fix projsync --list-files CSV header
2023-01-12 14:22:34 +01:00
Martijn Visser 5aecba77a8 fix projsync --list-files CSV header 2023-01-12 11:38:06 -01:00
Oleg Alexandrov dd34f45aed Add to quickstart.rst an example of using proj_create
This is a proposed example for the proj_create() function. This function has its own secularities, which can't be inferred from the example illustrating proj_create_crs_to_crs(). It is shown how to populate the longitude and latitude, how to convert to radians, transform to projected units, then transform back, and how to convert back to degrees.

The code was compiled and tested. It is suggested to verify it compiles and prints what is expected.

Add a comment about how to convert to degrees

quickstart: Move example from .rst to .c file and include in .rst

Include the correct example in quickstart.rst

Wipe extra spaces

Rm more extra spaces

Trying a fix for the dedent thing

Minor indent

Rename proj_create_example.c to crs_to_geodetic.c to address proposed use case

Update doc example to use proj_crs_get_geodetic_crs()

Put back to a single paragraph

Undo some changes

More tuning

Add the actual example

Wipe a newline
2023-01-11 19:41:20 -08:00
Even Rouault 956e5b2e21 Check about consistent celestial body: relax tolerance for Mars use cases and add a PROJ_IGNORE_CELESTIAL_BODY=YES environment variable 2023-01-12 00:49:46 +01:00
Even Rouault ec0ce09ef3 Add PROJ_ONLY_BEST_DEFAULT environment variable, and 'only_best_default' proj.ini setting 2023-01-11 12:15:34 +01:00
Even Rouault 30b2e97719 Add link to PROJ doc when ONLY_BEST warning/error triggers, and correctly propagate errorIfBestTransformationNotAvailable to alternate operations 2023-01-11 11:52:53 +01:00
Even Rouault 27b2fa42fd proj_clone(): avoid emitting errors on tranformations where some are not instanciable 2023-01-10 23:37:28 +01:00
Even Rouault d11c9d5766 proj_create_crs_to_crs(): emit a debug message if the best transformation cannot be used / cs2cs: add a --only-best=no switch 2023-01-10 23:37:28 +01:00
Even Rouault c637eff74c Merge pull request #3544 from hobu/alan-psc-addition
add Alan to PSC roster
2023-01-10 23:24:54 +01:00
Even Rouault 6b4ce1e444 Merge pull request #3545 from ethantkoenig/master
Fix deallocation bug in `proj_info()`
2023-01-10 23:24:35 +01:00
Even Rouault fdd9901917 proj_create_crs_to_crs_from_pj(): add a ONLY_BEST=YES option (fixes #3533)
Also add a --only-best switch to cs2cs

ONLY_BEST=YES/NO: (PROJ >= 9.2)
Can be set to YES to cause PROJ to error out if the best
transformation, known of PROJ, and usable by PROJ if all grids known and
usable by PROJ were accessible, cannot be used. Best transformation should
be understood as the transformation returned by
:cpp:func:`proj_get_suggested_operation` if all known grids were
accessible (either locally or through network).
2023-01-10 19:53:47 +01:00
Javier Jimenez Shaw 115f6854c5 [minor] add orcid link for Javier in CITATION.cff (#3547) 2023-01-11 07:24:05 +13:00
Ethan Koenig 24d22fe36c Fix deallocation bug in proj_info 2023-01-09 18:30:02 -08:00
Howard Butler bb9e477923 add Alan to PSC roster 2023-01-09 08:27:21 -06:00
Even Rouault 08e123182f install.rst: improve instructions regarding proj-data (fixes #3539) 2023-01-05 03:03:23 +01:00
Charles Karney 83a0bf005b Merge pull request #3528 from cffk/geod-2.1
Synchronize with 2.1 for geographiclib-c for geodesic support

Nothing much to cause concern with the PR.  Plus it simplifies matters for maintainers of proj.4-feedstock.
2023-01-04 15:12:46 -05:00
Even Rouault b23965ed19 Fix build with -DPROJ_INTERNAL_CPP_NAMESPACE 2023-01-03 12:53:21 +01:00
Sean McBride 84d80a8f81 Improved and simplified pj_strtod implementation 2023-01-02 18:36:10 -05:00
Sean McBride 20101df562 Removed unnecessary const keyword
Also move declaration and assignment together.
2023-01-02 18:04:56 -05:00
Sean McBride 0a1492fa57 Suppress some clang -Wconst-qual warnings with const_cast
It's rather impossible to implement strtod() without having to cast away the const.
2023-01-02 18:04:56 -05:00
Sean McBride bd9e0acc66 Make pj_datums global private, change pj_get_datums_ref() to return const 2023-01-02 18:04:56 -05:00
Sean McBride 1d92a64243 Removed unnecessary and incorrect const specifier with strtod
This allows simply removing several casting away of const.

Also introduce another variable instead of reusing the one that's no longer const. They were never refering to the same thing anything, and this new one does need to be const.
2023-01-02 18:04:56 -05:00
Sean McBride d8a4583ff7 Made a private function take a const pointer
This allows simply removing a casting away of const.
2023-01-02 18:04:56 -05:00
Even Rouault 17b5e48a5e Merge pull request #3534 from rouault/doc_clickable_program
Doc: make 'program' an alias of 'ref'
2023-01-02 23:56:55 +01:00
Even Rouault 25d2b9364a Doc: add separate title for invproj and invgeod, otherwise links to invproj/invgeod would have the proj/geod labels 2023-01-02 22:40:44 +01:00
Even Rouault 4b85651760 Doc: make 'program' an alias of 'ref' 2023-01-02 18:44:34 +01:00
Even Rouault 9d1ddecdf8 Merge pull request #3532 from rouault/projected_crs_identify_trust_less_id
ProjectedCRS::identify(): relax trust in id/authority in definition to identify
2023-01-02 17:40:37 +01:00
Even Rouault 7fe057ba8f ProjectedCRS::identify(): relax trust in id/authority in definition to identify
Fixes use case of https://lists.osgeo.org/pipermail/qgis-user/2023-January/052299.html
with likely buggy definition:
```
PROJCS["ETRS_1989_UTM_Zone_32N_6Stellen",GEOGCS["GCS_ETRS_1989",DATUM["D_ETRS_1989",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",9.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0],AUTHORITY["ESRI",102328]]
```
that should rather be identified to EPSG:25832 ('ETRS_1989_UTM_Zone_32N')
rather than ESRI:102328 ('PE_PCS_ETRS_1989_UTM_32N_7STELLEN')
2023-01-02 13:02:22 +01:00
Even Rouault fa19b97134 set_ellipsoid(): avoid floating point division by zero with f=2 2023-01-01 23:34:45 +01:00
Even Rouault a2f169b0ad Merge pull request #3527 from rouault/cppcheck_fixes
Avoid cppcheck master warnings
2023-01-01 14:49:52 +01:00
Charles Karney fec14d6566 Synchronize with 2.1 for geographiclib-c for geodesic support
Changes are
   - Minor improvement in the logic for the geodesic inverse problem.
   - Relax overly strict convergence test for inverse problem.
   - Allow for buggy remquo in geodsigntest.c.

First two deal with performance issues uncovered by high-precision
testing with MPFR and will have hardly any (= no?) impact when using
ordinary doubles.

Attention @xylar: The buggy remquo fix is an aid for the integration of

  conda-forge/proj.4-feedstock

and will allow the current

  0001-disable-geodsigntest.patch

to be replace by a one-line change.

Also note:

polyval renamed to polyvalx to avoid potential conflict with function of
the same name but slightly different semantics in src/mlfn.cpp.  (Both are
static functions, so there wouldn't in fact be a conflict.)

Invocation of geod_init in src/init.cpp now uses PIN->f directly instead
of computing the flattening from PIN->es.
2022-12-31 08:59:37 -05:00
Charles Karney b7c2761d1d Merge pull request #3522 from cffk/gnom-ell
Implement the ellipsoidal gnomonic projection

Let's proceed with this -- no obvious red flags.  Too bad we didn't hear back from ESRI about how it implemented the ellipsoidal gnomonic projection.
2022-12-31 08:23:53 -05:00
Even Rouault 2a84cb2562 cea/laea: do not export +R_A on a spherical ellipsoid (fixes recent master commit) 2022-12-31 12:22:00 +01:00
Even Rouault e0c9b74bfe Add comments about why we assign in 2 steps 2022-12-31 11:34:53 +01:00
Even Rouault f89747d7a4 Avoid cppcheck master warnings 2022-12-30 23:16:36 +01:00
Even Rouault 3df105d2cb Merge pull request #3523 from rouault/cleanup_aeqd_s_forward
aeqd_s_forward(): cleanup code and improve performance in polar case
2022-12-30 22:36:02 +01:00
Even Rouault 209b3fc0ac Merge pull request #3526 from rouault/laea_spherical
WKT <--> PROJ: correctly map 'Lambert Azimuthal Equal Area (Spherical)' to '+proj=laea +R_A'
2022-12-30 22:35:49 +01:00
Even Rouault 07ad5fc849 WKT <--> PROJ: correctly map 'Lambert Azimuthal Equal Area (Spherical)' to '+proj=laea +R_A'
and 'Lambert Cylindrical Equal Area (Spherical)' to '+proj=cea +R_A'

as documented in EPSG guidance note 7.2: "if the figure of the earth used
is an ellipsoid rather than a sphere then R should be calculated as the
radius of the authalic sphere"
2022-12-28 23:50:02 +01:00
Charles Karney 23ffb4ba17 Merge pull request #3524 from cffk/merid-update-fix
In mlfn.cpp, invoke pj_enfn with P->n to avoid recomputating n
2022-12-23 05:44:35 -05:00
Charles Karney 3c9959fb30 Invoke geod_init with already computed P->f. 2022-12-22 15:38:59 -05:00
Charles Karney 7eb237530d In mlfn.cpp, invoke pj_enfn with P->n to avoid recomputating n 2022-12-22 15:25:55 -05:00
Charles Karney 7062a7aed0 Various improvements suggested by @rouault. 2022-12-22 09:06:27 -05:00
Even Rouault 761831d251 aeqd_s_forward(): cleanup code and improve performance in polar case
The speed improvement is due to saving the computation of coslam which
is not needed (cf
https://github.com/OSGeo/PROJ/pull/3522/files#r1054985128)

Performance in polar case:

before:
```
$ bin/bench_proj_trans --pipeline "+proj=aeqd +R=6378137 +lat_0=90" 0 1.57
0 1.57 -> 0 -5079.08139462075
Duration: 243 ms
Throughput: 20.58 million coordinates/s
```

after:
```
$ bin/bench_proj_trans --pipeline "+proj=aeqd +R=6378137 +lat_0=90" 0 1.57
0 1.57 -> 0 -5079.08139462075
Duration: 163 ms
Throughput: 30.67 million coordinates/s
```
2022-12-22 02:22:58 +01:00
Charles Karney 0f156724a3 Squelch complaint about uninitialized variables in gnom.cpp. 2022-12-21 10:05:12 -05:00
Charles Karney 895059b4bf Implement the ellipsoidal gnomonic projection
This implements the ellipsoidal gnomonic projection given in
Karney (2013).  It is the limit of a doubly azimuthal projection, a
projection where the azimuths from 2 points are preserved, as the two
points merge into the center point.  Geodesics project to approximately
straight lines (these are exactly straight if the geodesic includes the
center point).

This change will potentially break some user code because the previous
implementation of the projection silently converted an ellipsoid into a
sphere with the same equatorial radius.  Now, it'll be treated as an
ellipsoid.  The previous (inconsistent!) behavior can be recovered by
setting the flattening to zero with "+f=0".

The boundary test in test_c_api.cpp needed to be updated because it
relied on this inconsistent treatment of the ellipsoid parameters.  The
change is explained in the file.

All the gnomonic tests in builtins.gie were supplemented by ellipsoidal
versions (with flattening = 1/200).

The documentation was updated to reflect this addition and the gnomonic
projection is listed as azimuthal (instead of, incorrectly, as
pseudocylindrical) and the defined area has been changed from "global"
to "within a quarter circumference of the center point".

Because the azimuthal equidistance projection uses the same geodesic
machinery as the new gnomonic projection, I'm simplified some of the
code in aeqd.cpp to parallel gnom.cpp; in particular, aeqd no longer
does the scaling/unscaling by P->a and the shifting/unshifting by
P->lam0.
2022-12-21 09:44:30 -05:00
Even Rouault 5d24b13184 Merge pull request #3520 from cffk/fix-radian-doc
Fix silly documentation issue (quoted value of pi/2 triggers error)
2022-12-20 15:58:22 +01:00
Charles Karney 59af10390b Fix silly documentation issue (quoted value of pi/2 triggers error)
The documentation included instances of "Example: +lat_1=1.5708r".
However if the poor user tries this setting, the result is "|lat_1|
should be < 90d".  This fix uses 1.570796r instead -- this is a
legitimate rounded value of pi/2 and, since it is less than pi/2, it
satisfies the requirement that it be less that 90d.  The examples with
the lon_0 are changed for consistency (even though the old value doesn't
trigger an error).
2022-12-20 09:06:36 -05:00
Thomas Knudsen 600492e5fa Merge pull request #3517 from OSGeo/busstoptaktik-patch-1
Correct a slightly wrong comment in mlfn.cpp
2022-12-18 18:04:41 +01:00
Thomas Knudsen da1aa075eb Correct a slightly wrong comment in mlfn.cpp
The description of the clenshaw(...)-function used *i* as iterator, rather than *k*, as it should.
2022-12-18 17:20:25 +01:00
Charles Karney 69c8aa4b37 Merge pull request #3516 from cffk/merid-update
Improved series for the meridian length and its inverse
2022-12-17 12:00:12 -05:00
Even Rouault 252c7b618d Merge pull request #3510 from rouault/nadcon5
Add support for NADCON5 grids and transformation method
2022-12-17 16:00:20 +01:00
Charles Karney f2eba2e008 Improved series for the meridian length and its inverse
Replace the series for the meridian length in the functions

  pj_enfn
  pj_mlfn
  pj_inv_mlfn

in mlfn.cpp with improved versions.  The old version of pj_mlfn used
Snyder's Eq. (3-21) extended from 3rd to 4th order in e^2 and
pj_inv_mlfn inverted this by an iterative method.

The new version uses 6th order expansions in the third flattening, n,
for both pj_mlfn and pj_inv_mlfn.  Expansions in n have a smaller
truncation error that the corresponding expansion in e^2.  Increasing
the order to 6th (from 4th) means that the routines give full double
precision accuracy for |f| <= 1/150.  Because the meridian length is
used in several projections, it's important that it be accurate as
possible.  For example, now the azimuthal equidistant projection is
equally accurate in the polar (uses pj_mlfn) and oblique (uses the
geodesic routines) aspects.

The increased accuracy tripped one of the tests: an instance of the
projection +proj=utm +approx.  The fix is to use the non-approx results
for the expected values.

Presumably this change results in pj_mlfn being a little slower while
pj_inv_mlfn is considerably faster (since there's no iteration
involved).  Incidentally the new method for pj_inv_mlfn uses Snyder's
recommended series Eq. (3-23) extended from 4th to 6th order (Snyder
writes n as e_1).

More discussion of the series used here is given in my recent paper

  On auxiliary latitudes, https://arxiv.org/abs/2212.05818
2022-12-16 18:27:42 -05:00
Oleg Alexandrov 1c1b3a34f1 Mention the proj_create function
Following the PROJ doc is like jumping through many hoops, or if you wish, many reprojections across documents are needed for something coherent to emerge. This addition adds a blurb mentioning the proj_create() function, which is really one of the two workhorses of this library, together with proj_create_crs_to_crs.
2022-12-16 21:18:46 +01:00
Oleg Alexandrov 97d9a8e01c Add link to "quick start" (#3511) 2022-12-16 20:27:52 +01:00
Even Rouault 75d6e58093 Merge pull request #3512 from rouault/projjson_schema_fixes
Projjson schema fixes related to dynamic CRS
2022-12-16 20:16:02 +01:00
Even Rouault 2bca5cd8b7 Add validation of dynamic geographic and vertical CRS against projjson schema 2022-12-16 18:59:05 +01:00
Even Rouault 8f0c1fd7e3 schemas/v0.6/projjson.schema.json: fix wrong inheritance that cause validation issues when using a DynamicGeodeticReferenceFrame or DynamicVerticalReferenceFrame 2022-12-16 18:46:54 +01:00
Even Rouault 7559fb3966 schemas/v0.5/projjson.schema.json: fix wrong inheritance that cause validation issues when using a DynamicGeodeticReferenceFrame or DynamicVerticalReferenceFrame 2022-12-16 18:41:10 +01:00
Even Rouault e732237948 pj_get_suggested_operation(): tune so that NADCON5 grid is used for NAD27->NAD83 on CONUS 2022-12-16 03:59:57 +01:00
Even Rouault 4ca9950ed5 gridshift: cache grid values when interpolating repeatedly in the same grid cell 2022-12-16 03:59:57 +01:00
Even Rouault c159d421d2 bench_proj_trans: add options to add random noise 2022-12-14 18:52:35 +01:00
Even Rouault 9c3f30fdd4 pj_get_suggested_operation(): make sure to use NADCON5 grids rather than HPGN ones for NAD83 to NAD83(HARN) 2022-12-14 18:52:35 +01:00
Even Rouault f29145ca18 gridshift: use GenericShiftGrid::valuesAt() 2022-12-14 18:52:35 +01:00
Even Rouault 69cfda92c2 Add a GenericShiftGrid::valuesAt() method for faster value retrieval 2022-12-14 18:52:35 +01:00
Even Rouault ce95d2eea4 Database: add concatenated operations for NADCON5 transformations 2022-12-14 14:47:12 +01:00
Even Rouault 526178d6f5 metadata.sql: bump PROJ_DATA.VERSION to 1.13 2022-12-14 14:47:11 +01:00
Even Rouault b55fd3cf7a Add NADCON5 transformation method support and database entries 2022-12-14 14:47:11 +01:00
Even Rouault b15909e9f5 gridshift: add a +no_z_transform flag 2022-12-14 14:47:10 +01:00
Even Rouault 7888f3bb4b GTiff grid reading: speed-up retrieving data in last accessed tile 2022-12-14 14:47:10 +01:00
Even Rouault fa97a9c87d Add a +proj=gridshift (general grid shift) method to be used for NADCON5 grids
The transformation may apply horizontal geodetic offsetting and/or vertical
(ellipsoidal or orthometric height) offsetting, depending on the type of the
grid(s).

This is a generalization of the :ref:`hgridshift` and :ref:`vgridshift` methods,
that may be used in particular for US NADCON5 grids that contain both horizontal
geodetic and ellipsoidal height offsets.

Both bilinear and biquadratic interpolations are supported.
2022-12-14 14:47:09 +01:00
Even Rouault b55c267db9 Merge pull request #3490 from rouault/epsg_10_077
Database: update to EPSG 10.078
2022-12-13 21:41:39 +01:00
Javier Jimenez Shaw 28a5c7b477 CI: check also in /private/tmp in case macos-12 is used (#3505) 2022-12-13 20:58:11 +01:00
Even Rouault c0a37c9e97 Database: update to EPSG v10.078 2022-12-13 20:24:31 +01:00
Even Rouault abf1904072 Merge pull request #3503 from rouault/4d_by_ref
Speed-up: pass PJ_COORD by reference for fwd4d and inv4d callbacks
2022-12-12 14:25:24 +01:00
Kristian Evers 74acbbf531 Merge pull request #3458 from jjimenezshaw/links-crs-explorer
Add links to crs-explorer in documentation
2022-12-12 11:33:00 +01:00
Javier Jimenez Shaw 4ea63248e8 change crs-explorer links to crs-explorer.proj.org 2022-12-11 22:58:32 +01:00
Even Rouault 1204754ab8 Merge pull request #3502 from rouault/faster_proj_trans
proj_trans(): fix performance regression
2022-12-11 15:14:21 +01:00
Even Rouault c2a51649e4 Improve a bit performance of +proj=axisswap +order=2,1 2022-12-11 03:59:02 +01:00
Even Rouault c1ed706989 Pass PJ_COORD by reference for fwd4d and inv4d callbacks 2022-12-11 03:09:25 +01:00
Even Rouault 75d15c1b96 Make pj_fwd4d() and pj_inv4d() pass arguments by reference, nd use them directly in pipeline_forward/inverse_4d() 2022-12-11 02:39:15 +01:00
Even Rouault 39d1f22461 proj_trans(): fix performance regression
The dynamic_cast<> introduced in 718e074a06 (was
also backported in 9.1.1) can be a performance killer for pipelines that
are not very computational heavy.

Before this fix:

```
$ bin/bench_proj_trans --pipeline "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=merc" 2 49
2 49 -> 222638.981586547 6242595.99979511
Duration: 877 ms
Throughput: 5.70 million coordinates/s

$ bin/bench_proj_trans --pipeline "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad" 2 49
2 49 -> 0.0349065850398866 0.855211333477221
Duration: 276 ms
Throughput: 18.12 million coordinates/s
```

After this fix:
```
$ bin/bench_proj_trans --pipeline "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=merc" 2 49
2 49 -> 222638.981586547 6242595.99979511
Duration: 739 ms
Throughput: 6.77 million coordinates/s

$ bin/bench_proj_trans --pipeline "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad" 2 49
2 49 -> 0.0349065850398866 0.855211333477221
Duration: 146 ms
Throughput: 34.25 million coordinates/s
```
2022-12-11 02:01:18 +01:00
Trent Hare 94be2c69c2 Database: updates the DOI syntax for IAU codes (#3500)
This updates the DOI syntax for IAU codes fixes #3498
2022-12-08 14:47:47 +01:00
Even Rouault 8ccfea685f Merge pull request #3499 from hernando/fix-alter-cs-linear-unit
Bugfix in CRS::alterCSLinearUnit for DerivedProjectedCRS
2022-12-08 14:46:57 +01:00
Even Rouault 9c99d7b613 Merge pull request #3501 from phidrho/patch-4
fix wrong email contact
2022-12-08 12:50:47 +01:00
Vedran Stojnović 5cb411e634 fix wrong email contact 2022-12-08 11:19:34 +01:00
Mike Taves 725dacfa28 Add .mailmap 2022-12-08 22:35:37 +13:00
Juan Hernando 2d82ad0801 Bugfix in CRS::alterCSLinearUnit for DerivedProjectedCRS
The implementation was calling alterUnit on the CS of the base
projected CRS, but this CS could be different than that of the
derived projected CRS being modified (e.g. the axes could be
swapped).

The fix consist on altering the unit of the derived projected
CRS, but only if the CS can be cast to Cartesian. It's doesn't
look like other CS types need to be considered.
2022-12-07 15:50:12 +01:00
Even Rouault 5e8ce5c1f8 Merge pull request #3497 from rouault/fix_pyproj_1192
DatabaseContext::lookForGridInfo(): add PROJ networking state in cache information (fixes pyproj4/pyproj#1192)
2022-12-06 02:11:10 +01:00
Even Rouault 225df1ee59 DatabaseContext::lookForGridInfo(): add PROJ networking state in cache information (fixes pyproj4/pyproj#1192) 2022-12-05 23:47:43 +01:00
Even Rouault 07ef017f38 Merge pull request #3495 from rouault/fix_ossfuzz_53961
GeographicBoundingBox::Private::intersects(): avoid infinite recursion on degenerate bounding box
2022-12-03 18:21:58 +01:00
Even Rouault 9b8c8d7976 Merge pull request #3494 from rsbivand/unknown_unit
add test for Undefined Cartesian SRS with unknown unit
2022-12-03 18:21:47 +01:00
Even Rouault c3c9068b54 GeographicBoundingBox::Private::intersects(): avoid infinite recursion on degenerate bounding box
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53961
2022-12-03 11:36:56 +01:00
Even Rouault 461d33eacc formatting fixes 2022-12-03 11:09:28 +01:00
Even Rouault ae1dbfca2c Merge pull request #3489 from seanm/misc-warnings2
Misc warnings2
2022-12-03 10:42:03 +01:00
Roger Bivand 6665c05e4b add test for Undefined Cartesian SRS with unknown unit 2022-12-03 10:31:54 +01:00
Even Rouault c1fd0076bb Merge pull request #3493 from OSGeo/backport-3492-to-master
[Backport master] datatypes.rst: replace references to PROJ.4 by PROJ
2022-12-03 09:33:24 +01:00
Even Rouault 31e256902f Merge pull request #3492 from OSGeo/rouault-patch-2
datatypes.rst: replace references to PROJ.4 by PROJ
2022-12-02 23:10:45 +00:00
Even Rouault 026e5f23fb Merge pull request #3491 from rouault/local_cs_import_fix
WKT import: when importing LOCAL_CS["foo"], generates a non-empty name for the datum
2022-12-02 16:42:22 +01:00
Even Rouault 8bafafbb74 WKT import: when importing LOCAL_CS["foo"], generates a non-empty name for the datum
Otherwise, the WKT2 output as a engineering CRS will be technically
invalid, as the BNF of WKT2 requires a non-empty double-quoted string.

Fixes https://github.com/r-spatial/sf/issues/2049#issuecomment-1333884055
2022-12-01 16:13:24 +01:00
Kristian Evers 30d0d9dcdc docs: update news and download links 2022-12-01 10:51:19 +01:00
Even Rouault 216544d7e3 Database: update to EPSG 10.077
Note that I've done a hack when importing EPSG:4326. This release of
EPSG has changed its extent from EPSG:1262 whose description is
'World.' to EPSG:2830 whose description is 'World:
Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola,
Anguilla, Antarctica, Antigua and Barbuda, Argentina, Armenia, Aruba,
Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados,
Belgium, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire,
Saint Eustasius and Saba, Bosnia and Herzegovina, Botswana, Bouvet
Island, Brazil, British Indian Ocean Territory, British Virgin Islands,
Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon,
Canada, Cape Verde, Cayman Islands, Central African Republic, Chad,
Chile, China, Christmas Island, Cocos (Keeling) Islands, Comoros, Congo,
Cook Islands, Costa Rica, Côte d''Ivoire (Ivory Coast), Croatia, Cuba,
Curacao, Cyprus, Czechia, Denmark, Djibouti, Dominica, Dominican
Republic, East Timor, Ecuador, Egypt, El Salvador, Equatorial Guinea,
Eritrea, Estonia, Eswatini (Swaziland), Ethiopia, Falkland Islands
(Malvinas), Faroe Islands, Fiji, Finland, France, French Guiana, French
Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany,
Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam,
Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and
McDonald Islands, Holy See (Vatican City State), Honduras, China - Hong
Kong, Hungary, Iceland, India, Indonesia, Islamic Republic of Iran,
Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya,
Kiribati, Democratic People''s Republic of Korea (North Korea), Republic
of Korea (South Korea), Kosovo, Kuwait, Kyrgyzstan, Lao People''s
Democratic Republic (Laos), Latvia, Lebanon, Lesotho, Liberia, Libyan
Arab Jamahiriya, Liechtenstein, Lithuania, Luxembourg, China - Macao,
Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands,
Martinique, Mauritania, Mauritius, Mayotte, Mexico, Federated States of
Micronesia, Monaco, Mongolia, Montenegro, Montserrat, Morocco,
Mozambique, Myanmar (Burma), Namibia, Nauru, Nepal, Netherlands, New
Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island,
North Macedonia, Northern Mariana Islands, Norway, Oman, Pakistan,
Palau, Panama, Papua New Guinea (PNG), Paraguay, Peru, Philippines,
Pitcairn, Poland, Portugal, Puerto Rico, Qatar, Reunion, Romania,
Russian Federation, Rwanda, St Barthelemy, St Kitts and Nevis, St
Helena, Ascension and Tristan da Cunha, St Lucia, St Martin, St Pierre
and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao
Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra
Leone, Singapore, Slovakia (Slovak Republic), Slovenia, St Maarten,
Solomon Islands, Somalia, South Africa, South Georgia and the South
Sandwich Islands, South Sudan, Spain, Sri Lanka, Sudan, Suriname,
Svalbard and Jan Mayen, Sweden, Switzerland, Syrian Arab Republic,
Taiwan, Tajikistan, United Republic of Tanzania, Thailand, The
Democratic Republic of the Congo (Zaire), Togo, Tokelau, Tonga, Trinidad
and Tobago, Tunisia, Türkiye (Turkey), Turkmenistan, Turks and Caicos
Islands, Tuvalu, Uganda, Ukraine, United Arab Emirates (UAE), United
Kingdom (UK), United States (USA), United States Minor Outlying Islands,
Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, US Virgin Islands,
Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe.'

This super lengthy description is what used to be used for EPSG:4979
(but EPSG:4979 has now switched to the shorter EPSG:1262)

Given the widespread use of EPSG:4326, it would be super annoying that
our WKT2 output has the super long extent name. Hence on import from the
database, we hot-patch the extent of EPSG:4326 to be the shorter
EPSG:1262.
2022-11-29 15:44:38 +01:00
Sean McBride f46a1a9c96 Eliminate pj_int32 in favour of C++11 int32_t 2022-11-27 22:00:54 -05:00
Sean McBride 1fce9eb2fa Fixed a clang -Wmissing-variable-declarations warning 2022-11-27 22:00:54 -05:00
Sean McBride df7be99a77 Fixed all clang -Wmissing-noreturn warnings 2022-11-27 22:00:54 -05:00
Sean McBride 986d6630a3 Removed conditional use of C++11 = delete
Now that C++11 is requried, this should be safe to use unconditionally.
2022-11-27 22:00:54 -05:00
Sean McBride a9dae6fd8e Fixed all clang -Wimplicit-fallthrough warnings
Used the existing PROJ_FALLTHROUGH macro in more places.

Changed the PROJ_FALLTHROUGH macro to work in more cases, including standard C++17.

Changed the PROJ_FALLTHROUGH macro to require a trailing semi-colon, as this works better with auto-formatting tools like clang-format.

Copied the macro definition to proj_internal.h since some source files were not including the header were it was already defined.
2022-11-27 22:00:48 -05:00
Sean McBride c32b9d03be Fixed several -Wreserved-identifier warnings
Renamed to not start with underscore or include double underscore.
2022-11-26 17:52:24 -05:00
Sean McBride 26ec682f30 Fixed last -Wextra-semi-stmt warning by removing the opt_eof_handler macro
The opt_eof_handler macro expanded such that no trailing semi-colon was needed.  Reformulating the macro to require one does not seem possible. Instead, as there was only one user of the macro, just got rid of it.
2022-11-26 17:52:24 -05:00
Sean McBride de282ca00c Removed trivial extra semi-colons to fix most -Wextra-semi-stmt warnings 2022-11-26 17:52:24 -05:00
Even Rouault f9df4d7181 Merge pull request #3487 from rouault/fix_3484
createFromUserInput(): make approximate matching by name more restrictive…
2022-11-25 23:47:21 +01:00
Even Rouault 87a36fcc8b Merge pull request #3486 from rouault/bench_proj_trans
Add bench_proj_trans benchmarking utility
2022-11-25 23:47:06 +01:00
Even Rouault 8ede717b1a Merge pull request #3488 from jjimenezshaw/pj-type-derived-projected-crs
add PJ_TYPE_DERIVED_PROJECTED_CRS
2022-11-25 17:36:21 +01:00
Even Rouault b2b59b365d Add bench_proj_trans benchmarking utility 2022-11-25 12:01:15 +01:00
Even Rouault 15a7cbeb12 createFromUserInput(): make approximate matching by name more restrictive to avoid false positives (fixes #3484) 2022-11-24 16:45:53 +01:00
Javier Jimenez Shaw 7965100d47 add PJ_TYPE_DERIVED_PROJECTED_CRS 2022-11-23 22:55:34 +01:00
Even Rouault 0821b0da05 Merge pull request #3485 from jidanni/patch-2
Update latlon.rst
2022-11-23 11:54:59 +01:00
積丹尼 Dan Jacobson 367b1fd7ee Update latlon.rst
Say how to list the parameters.
2022-11-23 18:52:14 +08:00
Even Rouault 15c89f4a18 Merge pull request #3482 from jjimenezshaw/complete-derivedprojected-methods
Implement  alterGeodeticCRS and stripVerticalComponent for DerivedProjected
2022-11-19 20:33:15 +01:00
Javier Jimenez Shaw 5f66a942a5 add implementation for stripVerticalComponent for DerivedProjected 2022-11-19 17:02:29 +01:00
Javier Jimenez Shaw f048b288f3 add implementation for alterGeodeticCRS for DerivedProjected 2022-11-19 17:02:29 +01:00
Even Rouault e53f19a6f7 Update proj_symbol_rename.h 2022-11-19 12:41:54 +01:00
Even Rouault 190cb92936 Merge pull request #3474 from rouault/doc_topic2_r5
Doc: update references to OGC Topic 2 spec to its r5 revision
2022-11-19 12:11:47 +01:00
Even Rouault e9520b3d73 Merge pull request #3473 from rouault/fix_3464
omerc: mention in doc that +lon_0 is ignored, align name of +lat_0 and…
2022-11-19 12:11:38 +01:00
Even Rouault 5418555dbe Merge pull request #3472 from rouault/doc_cs2cs_fix_3470_3471
cs2cs.rst: add note regarding grids beeing needed (fixes #3470, #3471)
2022-11-19 12:11:29 +01:00
Javier Jimenez Shaw b4ead8c939 Implement normalizeForVisualization for DerivedProjected (#3477) 2022-11-19 02:29:22 +01:00
Mike Taves 99a26934bf DOC: add TOC to PDF contents, use 1-column index to prevent overprinting (#3475) 2022-11-18 12:43:06 +13:00
Even Rouault 146377f898 cs2cs.rst: add note regarding grids beeing needed (fixes #3470, #3471) 2022-11-17 22:30:52 +01:00
Even Rouault 9e8e9ae0c4 Doc: update references to OGC Topic 2 spec to its r5 revision 2022-11-17 22:28:45 +01:00
Even Rouault 9b2aff6836 omerc: mention in doc that +lon_0 is ignored, align name of +lat_0 and +lonc with EPSG names, and emit a trace when +lon_0 is used (fixes #3464) 2022-11-17 22:04:45 +01:00
Even Rouault 1d5b1571ad Merge pull request #3454 from rouault/source_crs_in_json_abridged
PROJJSON: bump to 0.6 with an additional optional source_crs property…
2022-11-17 19:56:44 +01:00
Even Rouault 65f60f6e27 Merge pull request #3459 from trofi/gcc-13-fix
PROJ: add missing <cstdint> includes
2022-11-15 18:38:01 +01:00
Kristian Evers 4762020db5 Merge pull request #3466 from kbevers/doc-rounding
Doc: Clarify meaning of -d flag in CLI apps
2022-11-15 15:09:20 +01:00
積丹尼 Dan Jacobson fe1983955b Doc: Clarify meaning of -d flag in CLI apps
Eliminate all worries that it might have meant truncation!

Co-authored-by: 積丹尼 Dan Jacobson <jidanni@jidanni.org>
2022-11-15 12:56:51 +01:00
Sergei Trofimovich b0b8937c56 PROJ: add missing <cstdint> includes
Without the change build fails on upcomig `gcc-13` as:

    In file included from /build/PROJ/src/iso19111/operation/conversion.cpp:58:
    src/proj_json_streaming_writer.hpp:42:14:
      error: 'int64_t' in namespace 'std' does not name a type
       42 | typedef std::int64_t GIntBig;
          |              ^~~~~~~

gcc-13 cleaned it's header dependencies and that exposes these failures.
2022-11-14 08:48:33 +00:00
Javier Jimenez Shaw 0a9f23bc49 add links to crs-explorer in faq.rst and projinfo.rst 2022-11-13 23:45:39 +01:00
Even Rouault a33621e94f Merge pull request #3453 from rouault/fix_3451
cs2cs: better validate value of -W option (fixes #3451)
2022-11-11 19:28:13 +01:00
Even Rouault 51e84eba8e PROJJSON: bump to 0.6 with an additional optional source_crs property in abridged_transformation (refs #3428) 2022-11-11 19:18:31 +01:00
Even Rouault 473e7fb870 cs2cs: better validate value of -W option (fixes #3451) 2022-11-11 15:01:19 +01:00
Even Rouault fa14f9bcee Merge pull request #3450 from jidanni/patch-1
Update cs2cs.rst
2022-11-11 14:34:27 +01:00
積丹尼 Dan Jacobson fafc18f764 Update cs2cs.rst
-W9 = -W3 and -W10 = crash

==== cs2cs -W7 ...

43d05'18.7380000"E	79d04'11.1590000"S 0.000

==== cs2cs -W8 ...

43d05'18.73800000"E	79d04'11.15900000"S 0.000

==== cs2cs -W9 ...

43d5'18.738"E	79d4'11.159"S 0.000

==== cs2cs -W10 ...

Rel. 9.1.0, September 1st, 2022
<cs2cs>:
invalid option: -0
program abnormally terminated
2022-11-11 20:41:59 +08:00
Even Rouault 35e4207a9d Merge pull request #3448 from rouault/fix_3444_followup
Fix 2 issues with DatabaseContext::lookForGridInfo()
2022-11-10 13:12:40 +01:00
Even Rouault 82bac72ceb DatabaseContext::lookForGridInfo(): fix setting .url member when a file is not in grid_alternatives, not local, but found on CDN (fixes #3444) 2022-11-10 02:08:18 +01:00
Even Rouault db46489aee DatabaseContext::lookForGridInfo(): fix caching of fullFilename (fixes #3444) 2022-11-10 01:23:26 +01:00
Even Rouault 524cda7156 Merge pull request #3446 from rouault/fix_3444
Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (fixes #3444)
2022-11-09 22:38:39 +01:00
Even Rouault 9a030cf9c7 Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (fixes #3444) 2022-11-09 14:29:01 +01:00
Even Rouault ae3180303d Merge pull request #3443 from rouault/cppcheck_fixes
Fix issues reported by latest cppcheck master version
2022-11-09 10:32:09 +01:00
Even Rouault bacdf4621e Merge pull request #3442 from rouault/at_bev_AT_GIS_GRID_2021_09_28
Database: register at_bev_AT_GIS_GRID_2021_09_28 grid
2022-11-09 10:31:31 +01:00
Even Rouault d78e5f009e NetworkFile::open(): fix memory leak in unlikely error code path 2022-11-09 02:23:09 +01:00
Even Rouault c5930acd41 Fix issues reported by latest cppcheck master version
Minor things/false positives
2022-11-09 02:02:32 +01:00
Even Rouault 189636a732 Database: register at_bev_AT_GIS_GRID_2021_09_28 grid
Added to PROJ-data per https://github.com/OSGeo/PROJ-data/pull/88
2022-11-08 16:38:17 +01:00
Even Rouault d59af174d7 code formatting fixes 2022-11-08 16:37:52 +01:00
Even Rouault c1b63aa7b6 Merge pull request #3441 from rouault/fix_rtodms
rtodms(): fix potential buffer overflow not dealt with with PR #3431 (master only)
2022-11-08 10:50:39 +01:00
Even Rouault 72784f05b0 rtodms(): fix potential buffer overflow not dealt with with PR #3431 (master only) 2022-11-07 23:50:01 +01:00
Even Rouault 1116e0c25e Merge pull request #3433 from rouault/fix_3432
cass: fix forward computation of easting (fixes #3432), …
2022-11-07 22:07:17 +01:00
Even Rouault 5b9303dd5d Remove remaining sprintf() uses, and deprecate proj_rtodms() by newly added proj_rtodms2() (#3431)
Fixes #3243
2022-11-07 22:07:03 +01:00
Even Rouault e3eee3b8d4 Merge pull request #3435 from jidanni/patch-2
Update ocea.rst
2022-11-06 15:36:32 +01:00
Even Rouault 70a89042d5 Merge pull request #3434 from jidanni/patch-1
Update helmert.rst
2022-11-06 15:36:10 +01:00
積丹尼 Dan Jacobson b66400afbd Update ocea.rst
Grammar.
2022-11-06 22:14:04 +08:00
積丹尼 Dan Jacobson c04c6288d3 Update helmert.rst
Grammar.
2022-11-06 22:11:27 +08:00
Even Rouault 9284d36fed cass: use iterative generic inversion to make GIGS 5108 roundtripping tests succeed
I've modified the inverse method to use the generic
inversion method to improve its accuracy, which make it possible to
enable the 5108.gie tests that were previously failing on the 1000
iterations roundtripping.
2022-11-04 22:59:57 +01:00
Even Rouault 5983eadcc7 pj_generic_inverse_2d(): make deltaXYTolerance a parameter 2022-11-04 22:58:44 +01:00
Even Rouault 78d89828a0 cass: fix forward computation of easting (fixes #3432)
The error on the sign after "nu * A * (1. - A2 * T * (C1 ...") dates
back to PROJ origins. All other independent implementations (Apache SIS
cf
https://github.com/apache/sis/blob/a04bd4b29816c91fc4dfc66135b8de5e962933a0/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/CassiniSoldner.java,
CSMAP cf
https://github.com/normanb/CS-Map/blob/1d8f2db7f13194a99dc218d4cd91754c64a2a774/Source/CS_csini.c)
use the same formulas as EPSG guidance note which is consistent with
Snyder's Map projections - A working manual). So align on them, so that
everyone is consistent (and hopefully right).
2022-11-04 22:57:21 +01:00
Even Rouault 45869986a0 Merge pull request #3430 from seanm/Wreserved-id-macro
Various -Wreserved-id-macro warning fixes
2022-11-03 18:58:53 +01:00
Sean McBride f3930da598 Renamed _IN_GEOD_SET to GEOD_IN_GEOD_SET to fix -Wreserved-id-macro warnings 2022-11-03 08:44:40 -04:00
Sean McBride 61d5dec136 Renamed PJ_LIB__ to PJ_LIB_ to fix -Wreserved-id-macro warnings 2022-11-03 08:44:36 -04:00
Sean McBride 6f2c467f5a Renamed PJ_DATUMS__ to PJ_DATUMS_ to fix -Wreserved-id-macro warnings 2022-11-03 08:43:33 -04:00
Even Rouault 08f691c617 Merge pull request #3425 from seanm/std_mutex
Replaced platform-specific mutex implementations with std::recursive_…
2022-11-03 11:40:09 +01:00
Even Rouault db4df40b16 Merge pull request #3424 from seanm/misc-warnings
Misc warnings
2022-11-03 11:34:22 +01:00
Sean McBride 88d91f709c Replaced platform-specific mutex implementations with std::recursive_mutex
Simplified various CMake files too, though they still need to look for pthread support because there is a call to pthread_atfork() in the codebase.

Also got rid of mutex.hpp and its workaround for old __MINGW32__ that did not support std:mutex.

Aside from being a general simplification, this fixes a clang -Wreserved-id-macro warning by no longer ever needing to #define _GNU_SOURCE.
2022-11-02 20:27:33 -04:00
Even Rouault da542adce9 Merge pull request #3427 from rouault/vandg_over
vandg projection: handle +over to extend the validity domain outside of |lon|>180deg
2022-11-02 20:20:32 +01:00
Sean McBride fecca6f2a1 WIP: fixed -Wunused-macro warning
The UWP define is only used on Windows, so move its definition into the existing nearby #ifdef _WIN32 check.

WIP because I don't have Windows to check if this works...
2022-11-02 14:13:47 -04:00
Sean McBride c3180cab52 Fixed clang -Wdocumentation-deprecated-sync warning
The warning was:

c_api.cpp:292:5: warning: declaration is marked with '@deprecated' command but does not have a deprecation attribute [-Wdocumentation-deprecated-sync]

Just removed the @deprecated doxygen keyword since C++14's `[[deprecated]]` keyword is too new to use currently.
2022-11-02 14:13:07 -04:00
Sean McBride bd87ed59cc Fixed some -Wreserved-id-macro warnings
Since _USE_MATH_DEFINES is only for Windows, only define it for Windows.  It's also needed for MinGW.

Since _GNU_SOURCE is only for GNU, and was already conditionalized to not be defined on Windows, also don't define it on Apple.
2022-11-02 14:10:32 -04:00
Sean McBride f837178fa9 Fixed clang -Wheader-hygiene warning
The warning was:

test_primitives.hpp:40:30: warning: using namespace directive in global context in header [-Wheader-hygiene]
2022-11-02 14:10:32 -04:00
Sean McBride c7fa5e00a4 Removed an old warning suppression to fix the only -Wunreachable-code-return warning
projections/isea.cpp:486:12: warning: 'return' will never be executed [-Wunreachable-code-return]
    return 0;       /* suppresses a warning */
           ^

This suppression was added by c5c96ad223 a decade ago. At this point, more compilers probably warn about reaching that impossible line than falsely thinking the function is missing a return value.
2022-11-02 14:10:32 -04:00
Sean McBride a231a6781f Fixed clang -Wformat-pedantic warning
Added explicit cast.
2022-11-02 14:10:32 -04:00
Sean McBride 62fcc27652 Fixed clang -Wunused-macros warnings
The compiler seems correct, these are indeed usused.
2022-11-02 14:10:27 -04:00
Even Rouault 0e050eea2a vandg projection: handle +over to extend the validity domain outside of |lon|>180deg 2022-11-02 12:06:46 +01:00
Even Rouault dd1ce7d589 Merge pull request #3422 from rouault/doxy195_warnings
Doxyfile: remove warnings with Doxygen 1.9.5
2022-11-02 11:30:33 +01:00
Sean McBride 6cb2dafdcd Fixed Clang -Wsuggest-destructor-override warnings
Just added override keyword where it was missing.
2022-11-01 10:59:36 -04:00
Even Rouault 9d440ec939 Merge pull request #3421 from seanm/snprintf
Replaced most uses of sprintf with the safer snprintf
2022-11-01 09:18:49 +01:00
Even Rouault d07d7e5fcb Doxyfile: remove warnings with Doxygen 1.9.5 2022-11-01 09:14:33 +01:00
Even Rouault d7392db46d Merge pull request #3419 from rouault/doxy195
docs/docbuild/Dockerfile: update to Doxygen 1.9.5
2022-10-30 17:26:10 +01:00
Even Rouault d241049bb8 Merge pull request #3417 from OSGeo/backport-3416-to-master
[Backport master] projsync.rst: fix grammar error
2022-10-30 15:14:48 +01:00
Even Rouault e86858de6a docs/docbuild/Dockerfile: update to Doxygen 1.9.5 2022-10-30 15:13:38 +01:00
Even Rouault 975953b4b9 Merge pull request #3416 from OSGeo/rouault-patch-2
projsync.rst: fix grammar error
2022-10-30 14:12:27 +00:00
Even Rouault 9f4b4790d9 Merge pull request #3415 from rouault/fix_ossfuzz_52879
eqdc: avoid floating point division by zero in non-nominal case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52879
2022-10-30 15:12:02 +01:00
Even Rouault 586ef0f5f1 eqdc: avoid floating point division by zero in non-nominal case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52879 2022-10-30 10:01:26 +01:00
Sean McBride 6d40efa907 Replaced most uses of sprintf with the safer snprintf 2022-10-28 16:19:35 -04:00
Even Rouault b655125ae3 Merge pull request #3413 from rouault/add_conversion_geogoffsets
C++ API: add methods to build Geographic/Vertical Offset conversions
2022-10-24 20:12:56 +02:00
Even Rouault 864dd23895 C++ API: add methods to build Geographic/Vertical Offset conversions 2022-10-23 20:31:15 +02:00
Even Rouault cb759f7dfb Merge pull request #3411 from rouault/fix_derived_geogCRS_3D_issues
createOperations(): fix issues when transforming between Geog3D and DerivedGeog3D CRS with Geographic3D offsets method
2022-10-23 11:59:52 +02:00
Even Rouault ebc7c8bdd2 createOperations(): fix issues when transforming between Geog3D and DerivedGeog3D CRS with Geographic3D offsets method
Given test.wkt with:
```
GEOGCRS["CH1903+ with 10m offset on ellipsoidal height",
    BASEGEOGCRS["CH1903+",
        DATUM["CH1903+",
            ELLIPSOID["Bessel 1841",6377397.155,299.1528128,
                LENGTHUNIT["metre",1]],
            ID["EPSG",6150]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8901]]],
    DERIVINGCONVERSION["Offset on ellipsoidal height",
        METHOD["Geographic3D offsets",
            ID["EPSG",9660]],
        PARAMETER["Latitude offset",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8601]],
        PARAMETER["Longitude offset",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8602]],
        PARAMETER["Vertical Offset",10,
            LENGTHUNIT["metre",1],
            ID["EPSG",8603]]],
    CS[ellipsoidal,3],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433,
                ID["EPSG",9122]]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433,
                ID["EPSG",9122]]],
        AXIS["ellipsoidal height (h)",up,
            ORDER[3],
            LENGTHUNIT["metre",1,
                ID["EPSG",9001]]]]
```

```
$ projinfo -s EPSG:4979 -t @test.wkt --spatial-test intersects -o PROJ --hide-ballpark
Candidate operations found: 1
-------------------------------------
Operation No. 1:

unknown id, Inverse of CH1903+ to WGS 84 (1) + Offset on ellipsoidal height, 1 m, Liechtenstein; Switzerland.

PROJ string:
+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m
  +step +proj=cart +ellps=WGS84
  +step +proj=helmert +x=-674.374 +y=-15.056 +z=-405.346
  +step +inv +proj=cart +ellps=bessel
  +step +proj=geogoffset +dlat=0 +dlon=0 +dh=10
  +step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m
  +step +proj=axisswap +order=2,1
```
2022-10-22 21:43:34 +02:00
Even Rouault 4121845b05 Merge pull request #3408 from rouault/fix_3407
VerticalCRS::_isEquivalentTo(): do not consider VerticalCRS and DerivedVerticalCRS as equivalent
2022-10-21 21:24:13 +02:00
Even Rouault 92cc92802e VerticalCRS::_isEquivalentTo(): do not consider VerticalCRS and DerivedVerticalCRS as equivalent
This cause incorrect result when transforming from/to a
DerivedVerticalCRS or a CompoundCRS made of a DerivedVerticalCRS

With that fix:
```
$ echo 46.9524055555556 7.43958333333333 400 | cs2cs -d 12 EPSG:4979 "$(cat test.wkt)"
46.953728423809	7.440534369109 361.014348853429
```

Fixes #3407
2022-10-21 20:44:11 +02:00
Even Rouault 04f08c3a13 Merge pull request #3402 from mwtoews/citation-cff
Add CITATION.cff
2022-10-21 19:51:16 +02:00
Even Rouault afe73a7a82 Merge pull request #3406 from mwtoews/basic-install
Simplify INSTALL to a short document
2022-10-21 19:50:40 +02:00
Mike Taves f400dfe1a3 Simplify INSTALL to a short document 2022-10-20 14:23:39 +13:00
Even Rouault a528bcaa0b Merge pull request #3395 from rouault/fix_3287
cct and cs2cs: make them robust against UTF-8 BOM at beginning of input files (fixes #3287)
2022-10-19 01:20:40 +02:00
Even Rouault 8af84f9d77 Merge pull request #3390 from rouault/data_sql_doc
data/sql: add a README.md and simplified UML diagrams
2022-10-17 21:53:49 +02:00
Mike Taves 24c7996db1 Add CITATION.cff 2022-10-17 21:47:17 +13:00
Even Rouault 1e9d92e31f cifuzz.yml: tune 2022-10-17 00:39:03 +02:00
Even Rouault 2cc71e871d Merge pull request #3357 from rouault/cifuzz
CI: add a CI-Fuzz github action workflows
2022-10-17 00:25:15 +02:00
Even Rouault e0911174c7 Merge pull request #3398 from BuntingLabs/add-users
add startup + OSS to users docs
2022-10-14 18:30:08 +02:00
Brendan Ashworth d21d55e30a add startup + OSS to users docs 2022-10-13 11:53:23 -07:00
Even Rouault 3a81c70cf7 Merge pull request #3396 from OSGeo/backport-3393-to-master
[Backport master] bindings.rst: mention PROJ-JNI
2022-10-13 17:33:39 +02:00
Even Rouault 4a1840f199 Merge pull request #3393 from OSGeo/rouault-patch-1
bindings.rst: mention PROJ-JNI
2022-10-13 15:31:06 +00:00
Even Rouault b745e9f7bb cct and cs2cs: make them robust against UTF-8 BOM at beginning of input files (fixes #3287) 2022-10-13 16:54:49 +02:00
Even Rouault f6a9af4b61 Merge pull request #3392 from OSGeo/backport-3391-to-master
[Backport master] Update users.rst
2022-10-13 14:36:33 +02:00
jbeilin f74edd1436 users.rst: add ENSG-géomatique (#3391) 2022-10-13 12:15:21 +00:00
Even Rouault a11f0c9c78 data/sql: add a README.md and simplified UML diagrams 2022-10-12 22:34:57 +02:00
Even Rouault 47f13f34c6 cs2cs: fix incorrect use of proj_cs_get_axis_count() introduced in 4abde1b9f8 (not in a release) 2022-10-12 17:47:08 +02:00
Even Rouault 9d5d83ca60 defmodel.rst: add link to deformation_model.schema.json 2022-10-12 11:57:50 +02:00
Even Rouault 92fa04e74c Merge pull request #3389 from OSGeo/backport-3388-to-master
[Backport master] Added Avenza Maps to list of proprietary software that uses PROJ
2022-10-11 16:40:58 +02:00
Even Rouault c94b7bfa5d Merge pull request #3388 from AndrewAtAvenza/patch-1
Added Avenza Maps to list of proprietary software that uses PROJ
2022-10-11 14:36:57 +00:00
Even Rouault 919d3e8737 Doc: users.rst: fix 2022-10-11 14:50:41 +02:00
Even Rouault c297e54191 Merge pull request #3374 from rouault/cmake_tiff_curl
CMake: use TIFF:TIFF and CURL::libcurl targets (refs #3316)
2022-10-11 11:57:11 +02:00
Even Rouault e44f3a7dbb Merge pull request #3382 from rouault/doc_user_bindings
Doc: users.rst: link to bindings.rst
2022-10-11 11:56:44 +02:00
Even Rouault a41bc0d641 Merge pull request #3386 from OSGeo/backport-3385-to-master
[Backport master] added gislab at INAF
2022-10-11 11:56:33 +02:00
Even Rouault e1d4daf433 Merge pull request #3385 from afrigeri/patch-1
added gislab at INAF
2022-10-11 09:40:18 +00:00
Even Rouault ac5701142d users.rst: formatting fix 2022-10-10 22:01:14 +02:00
Even Rouault bb438f6d80 Merge pull request #3384 from OSGeo/backport-3383-to-master
[Backport master] Add qfield to users list
2022-10-10 21:58:37 +02:00
Even Rouault 640de099cc Merge pull request #3383 from OSGeo/m-kuhn-patch-1
Add qfield to users list
2022-10-10 19:47:49 +00:00
Even Rouault dec26c1cff CMake: use TIFF:TIFF and CURL::libcurl targets (refs #3316) 2022-10-10 21:40:52 +02:00
Even Rouault 2a09b35ec1 Merge pull request #3381 from OSGeo/backport-3380-to-master
[Backport master] Update users.rst
2022-10-10 20:26:58 +02:00
Even Rouault fe29f619f5 Merge pull request #3380 from Jochem-L/patch-1
Update users.rst
2022-10-10 18:23:41 +00:00
Even Rouault 700c2e9fef Doc: users.rst: link to bindings.rst 2022-10-10 20:23:28 +02:00
Even Rouault 7b10bb4bd7 Merge pull request #3378 from OSGeo/backport-3376-to-master
[Backport master] faq.rst: remove trailing character
2022-10-10 19:23:19 +02:00
Even Rouault 5f5fa817c6 Merge pull request #3376 from OSGeo/rouault-patch-1
faq.rst: remove trailing character
2022-10-10 17:20:46 +00:00
Even Rouault d9cf47db60 Merge pull request #3369 from rouault/doc_users
Doc: add a page about users of PROJ
2022-10-10 17:58:47 +02:00
Even Rouault 5dd91491f3 Doc: add a page about users of PROJ
Equivalent of https://gdal.org/software_using_gdal.html
2022-10-10 17:58:08 +02:00
Even Rouault a0373e762e Merge pull request #3371 from rouault/createFromUserInput_improvement
createFromUserInput(): make it work better when approximate name is provided
2022-10-08 15:17:35 +02:00
Even Rouault f2f05907cb Merge pull request #3367 from rouault/longitude_rotation_fix
projinfo / cs2cs : auto promotion to 3D of CRS specified by name
2022-10-08 15:17:26 +02:00
Even Rouault 6140c5c667 Merge pull request #3370 from OSGeo/backport-3368-to-master
[Backport master] Doc: community: disable for now FOSS4G section
2022-10-07 20:38:45 +02:00
Even Rouault 740edc5309 createFromUserInput(): make it work better when approximate name is provided 2022-10-07 20:37:51 +02:00
Even Rouault b994422ec5 Merge pull request #3368 from OSGeo/rouault-patch-1
Doc: community: disable for now FOSS4G section
2022-10-07 17:53:41 +00:00
Even Rouault 4abde1b9f8 cs2cs: when source (or target) CRS is specified by name, promote it to 3D if there's a known 3D CRS of same name and that the other CRS is 3D 2022-10-07 18:26:59 +02:00
Even Rouault 7c24485ec9 projinfo: when source (or target) CRS is specified by name, promote it to 3D if there's a known 3D CRS of same name and that the other CRS is 3D 2022-10-07 18:26:49 +02:00
Even Rouault 4483de0e22 Avoid error on "projinfo -s 'NTF (Paris) + NGF IGN69 height' -t ETRS89"
which by itself is not super sensical without the --3d flag to ask for
ETRS89 3D.
2022-10-07 17:20:13 +02:00
Even Rouault 06632e138c Merge pull request #3365 from rouault/fix_findsOpsInRegistryWithIntermediate
findsOpsInRegistryWithIntermediate(): make it work when source/target geodetic CRS has no known id
2022-10-07 13:36:53 +02:00
Even Rouault 29e9f73f9a findsOpsInRegistryWithIntermediate(): make it work when source/target geodetic CRS has no known id 2022-10-06 22:16:46 +02:00
Even Rouault bf9d356578 Merge pull request #3351 from rouault/fix_3348
Doc: document +over limitations (fixes #3348)
2022-10-06 20:29:57 +02:00
Even Rouault 32d05c4e6f Merge pull request #3362 from rouault/uninstall
CMake: add a uninstall target
2022-10-06 20:29:44 +02:00
Even Rouault 632eb41053 Merge pull request #3361 from rouault/fix_3360
createOperations(): emulate PROJ < 6 behavior when doing geocentric <--> geographic transformation between datum with unknown transformation (fixes #3360)
2022-10-06 11:41:42 +02:00
Even Rouault d78642608c Doc: document uninstall target 2022-10-05 20:53:37 +02:00
Even Rouault 524696d22f CMake: add a uninstall target 2022-10-05 20:18:00 +02:00
Even Rouault aaf0d2c2be createOperations(): emulate PROJ < 6 behavior when doing geocentric <--> geographic transformation between datum with unknown transformation (fixes #3360) 2022-10-05 19:17:21 +02:00
Even Rouault a75ae933c8 Merge pull request #3359 from rouault/fix_3358
cct: emit meaningful error message when passing a non-coordinate operation (fixes #3358)
2022-10-05 17:34:43 +02:00
Even Rouault 718e074a06 proj_trans(): return error when a non-coordinate operation object is provided (fixes #3358) 2022-10-05 14:21:28 +02:00
Even Rouault 05918e4e12 cct: emit meaningful error message when passing a non-coordinate operation (fixes #3358) 2022-10-05 01:38:45 +02:00
Even Rouault 5f6595856d CI: add a CI-Fuzz github action workflows
CI-Fuzz triggers fast OSS-Fuzz checks on pull requests.
See https://google.github.io/oss-fuzz/getting-started/continuous-integration/ for more details
2022-09-30 18:31:41 +02:00
Even Rouault 46762f8816 Merge pull request #3355 from rouault/fix_3354
Fix issue when transforming from/into a WKT2 Bound VerticalCRS with a  'Geographic3D to GravityRelatedHeight' method (fixes #3354)
2022-09-30 11:54:13 +02:00
Even Rouault 28b1d77624 Doc: document +over limitations (fixes #3348) 2022-09-29 15:46:32 +02:00
Even Rouault 5e22044fcf Fix issue when transforming from/into a WKT2 Bound VerticalCRS with a 'Geographic3D to GravityRelatedHeight' method (fixes #3354) 2022-09-29 15:43:43 +02:00
Even Rouault b0b0c7bcb3 Merge pull request #3350 from rouault/fix_3347
proj_normalize_for_visualization(): take into account FORCE_OVER property from source operation (fixes #3347)
2022-09-27 14:56:02 +02:00
Kristian Evers d30d4ea401 Merge pull request #3338 from sval-dev/genericsom
Support for more generic Space Oblique Mercator (SOM) projection
2022-09-27 14:40:55 +02:00
Even Rouault d0d8aefc99 proj_normalize_for_visualization(): take into account FORCE_OVER property from source operation (fixes #3347) 2022-09-27 11:53:30 +02:00
Sebastian Val aa18b0bf85 Doc: add preliminary documentation of suffix based specification of units (#3346)
Fixes #3345
2022-09-27 11:44:19 +02:00
Sebastian Val c6cc1e10c7 Typo fix 2022-09-27 00:02:34 -07:00
Sebastian Val 7045b70c02 Doc updates 2022-09-26 23:23:00 -07:00
Sebastian Val c5bd9d5357 Typo fix 2022-09-25 17:01:28 -07:00
Sebastian Val c1b5cae00a Updating input from radians to decimal degrees and adding tests and docs to reflect. 2022-09-25 16:55:48 -07:00
Even Rouault 56b3de5f77 Merge pull request #3342 from rouault/fix_3340
WKT import: 3D-promote base CRS of 3D DerivedProjectedCRS (fixes #3340)
2022-09-25 12:59:08 +02:00
Even Rouault 60dc551e62 Merge pull request #3341 from rouault/fix_3311
Build: link geodtest against libm when available (fixes #3311)
2022-09-24 13:16:39 +02:00
Even Rouault d136da0b85 WKT import: 3D-promote base CRS of 3D DerivedProjectedCRS (fixes #3340)
With the fix
```
$ projinfo -s  EPSG:6318+6360 -t @derivedproj3D.wkt --spatial-test intersects -o PROJ -q

+proj=pipeline
  +step +proj=axisswap +order=2,1
  +step +proj=unitconvert +xy_in=deg +z_in=us-ft +xy_out=rad +z_out=m
  +step +proj=vgridshift +grids=us_noaa_g2018u0.tif +multiplier=1
  +step +proj=tmerc +lat_0=41 +lon_0=-73 +k=1 +x_0=0 +y_0=0 +ellps=GRS80
  +step +proj=unitconvert +xy_in=m +xy_out=us-ft +z_in=m +z_out=us-ft
  +step +proj=affine +xoff=5 +yoff=52 +zoff=10
  +step +proj=unitconvert +xy_in=us-ft +xy_out=m +z_in=us-ft +z_out=m
  +step +proj=unitconvert +xy_in=m +z_in=m +xy_out=us-ft +z_out=us-ft
  +step +proj=axisswap +order=2,1
```

where derivedproj3D.wkt is
```
DERIVEDPROJCRS["Custom Site Calibrated 3D CRS",
    BASEPROJCRS["Transverse Mercator centered in area of interest",
        BASEGEOGCRS["NAD83(2011)",
            DATUM["NAD83 (National Spatial Reference System 2011)",
                ELLIPSOID["GRS 1980",6378137,298.257222101,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]]],
        CONVERSION["Transverse Mercator",
            METHOD["Transverse Mercator",
                ID["EPSG",9807]],
            PARAMETER["Latitude of natural origin",41,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8801]],
            PARAMETER["Longitude of natural origin",-73,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8802]],
            PARAMETER["Scale factor at natural origin",1,
                SCALEUNIT["unity",1],
                ID["EPSG",8805]],
            PARAMETER["False easting",0,
                LENGTHUNIT["US survey foot",0.304800609601219],
                ID["EPSG",8806]],
            PARAMETER["False northing",0,
                LENGTHUNIT["US survey foot",0.304800609601219],
                ID["EPSG",8807]]]],
    DERIVINGCONVERSION["Affine transformation as PROJ-based",
        METHOD["PROJ-based operation method: +proj=pipeline  +step +proj=unitconvert +xy_in=m +xy_out=us-ft +z_in=m +z_out=us-ft +step +proj=affine +xoff=5 +yoff=52 +zoff=10 +step +proj=unitconvert +xy_in=us-ft +xy_out=m +z_in=us-ft +z_out=m"]],
    CS[Cartesian,3],
        AXIS["(Y)",north,
            ORDER[1],
            LENGTHUNIT["US survey foot",0.304800609601219,
                ID["EPSG",9003]]],
        AXIS["(X)",east,
            ORDER[2],
            LENGTHUNIT["US survey foot",0.304800609601219,
                ID["EPSG",9003]]],
        AXIS["(Z)",up,
            ORDER[3],
            LENGTHUNIT["US survey foot",0.304800609601219,
                ID["EPSG",9003]]]]
```
2022-09-24 13:12:15 +02:00
Even Rouault 59589196be Build: link geodtest against libm when available (fixes #3311) 2022-09-24 12:24:28 +02:00
Even Rouault a3c8423c6a Merge pull request #3324 from rouault/fix_gdal_5646
CMake: add a INSTALL_LEGACY_CMAKE_FILES option (fixes OSGeo/gdal#5646)
2022-09-23 16:54:01 +02:00
Sebastian Val 93b555e8bb Adding docs updates for SOM projection. 2022-09-22 18:40:48 -07:00
Sebastian Val 3d52fff248 Unifying som.cpp and lsat.cpp. Fixup unit tests for name change from genericsom -> som. 2022-09-22 17:06:52 -07:00
Sebastian Val ce2c626f39 Removing tests that are implemented more portably in builtins.gie 2022-09-22 16:12:09 -07:00
Sebastian Val d00acbfe73 Renaming genericsom -> som 2022-09-22 16:11:20 -07:00
Sebastian Val 65c60c2b7f Unifying genericsom and misrsom 2022-09-22 15:40:09 -07:00
Sebastian Val e0ad66521e Merge branch 'master' of https://github.com/OSGeo/PROJ into genericsom 2022-09-22 12:12:35 -07:00
Sebastian Val 1b143594ff Adding genericsom projection support for non-repeating paths upcoming for Terra spacecraft. 2022-09-22 12:00:30 -07:00
Even Rouault f1766c1ffa Merge pull request #3334 from rouault/fix_3328_extra
createOperations(): tune name and remarks of some vertical transformations
2022-09-22 14:14:24 +02:00
Even Rouault 94cf10802c Merge pull request #3333 from rouault/fix_3328
Fix issue related to transforming to CGVD28 height (EPSG:5713)
2022-09-22 14:14:12 +02:00
Even Rouault ecc13abef3 createOperations(): tune name and remarks of some vertical transformations 2022-09-21 02:01:58 +02:00
Even Rouault 966ea2b25d Tests: test EPSG:4326+5773 to EPSG:4326+5713 (refs #3328) 2022-09-20 15:38:53 +02:00
Even Rouault 435a78e997 PROJ string pipeline optimizer: add optimization for EPSG:4326+5773 to EPSG:4326+5713 transformation (refs #3328) 2022-09-20 15:29:24 +02:00
Even Rouault 67017dbd03 createOperations: add missing +proj=push +v_1 +v_2 / +proj=pop +v_1 +v_2 in some vertical transformations (refs #3328) 2022-09-20 15:28:06 +02:00
Even Rouault 44449575bd Database: alias HT2_1997.byn to ca_nrc_HT2_2010v70.tif (refs #3328) 2022-09-20 15:27:11 +02:00
Even Rouault 28f4486331 Database: create a undeprecated copy of EPSG:9123 grid transformation 'NAD83(CSRS) to CGVD28 height (1)' (fixes #3328) 2022-09-20 15:26:45 +02:00
Kristian Evers 274be71ada Merge pull request #3331 from AlexBass05/fix-tutorial-typos
Fix typos/formatting in tutorials
2022-09-20 14:21:56 +02:00
Alexander Nehrbass 05a36cbb4f Fix typos/formatting in tutorials 2022-09-20 11:42:09 +02:00
Kristian Evers 2d618ac905 Merge pull request #3330 from OSGeo/backport-3329-to-master
[Backport master] Added missing punctuation mark
2022-09-20 09:59:50 +02:00
Kristian Evers 52521676eb Merge pull request #3329 from khurramkhalil/patch-1
Added missing punctuation mark
2022-09-20 07:45:13 +00:00
Even Rouault 52fe0f5b2b cppcheck.sh: update to support v2.10 2022-09-17 18:13:31 +02:00
Even Rouault 04ae8bc9db Merge pull request #3327 from jjimenezshaw/alterCSLinearUnit-bound
Implement alterCSLinearUnit for BoundCRS
2022-09-15 22:56:09 +02:00
Javier Jimenez Shaw 1bc631bce7 implement alterCSLinearUnit for BoundCRS 2022-09-15 21:20:26 +02:00
Even Rouault ad660a8398 CMake: add a INSTALL_LEGACY_CMAKE_FILES option (fixes OSGeo/gdal#5646)
to control whether the PROJ4 legacy target should be exported (refs #3168)

The default is ON, unless PROJ is built as part of a CMake subproject.
2022-09-15 12:40:36 +02:00
Even Rouault cb29e996ec Merge pull request #3325 from jjimenezshaw/alterCSLinearUnit-compound
implement alterCSLinearUnit for CompoundCRS
2022-09-15 08:45:26 +02:00
Javier Jimenez Shaw a48a69e192 implement alterCSLinearUnit for CompoundCRS 2022-09-15 00:29:56 +02:00
Kristian Evers b674a2f0d7 Merge pull request #3304 from kbevers/tutorials
Tutorials for the docs
2022-09-14 18:53:26 +02:00
Kristian EversandThomas Knudsen b2370bfcb7 Add tutorial on geodesic calculations with geod
Originally developed for the EUREF 2019 meeting by Thomas Knudsen.

Co-authored-by: Thomas Knudsen <thokn@sdfe.dk>
2022-09-14 18:14:16 +02:00
9fc569796c Add transformation tutorial to docs
This is a tutorial originally made for the EUREF meeting in 2019.

Co-authored-by: Thomas Knudsen <thokn@sdfe.dk>
Co-authored-by: Even Rouault <even.rouault@spatialys.com>
2022-09-14 18:14:10 +02:00
Even Rouault 75a0a556d9 Merge pull request #3319 from jjimenezshaw/alterCSLinearUnit-derivedProj
Implement alterCSLinearUnit for DerivedProjectedCRS
2022-09-13 14:14:15 +02:00
Javier Jimenez Shaw 2e7501d521 implement alterCSLinearUnit for DerivedProjectedCRS 2022-09-13 12:48:48 +02:00
Javier Jimenez Shaw 137caf78a2 Add method DerivedProjectedCRS::demoteTo2D and implement promoteTo3D (#3317) 2022-09-11 22:39:57 +02:00
Even Rouault 524ceda302 Merge pull request #3313 from rouault/gtg_arcsecond_per_year
GeoTIFF grids: support UNITTYPE=arc-seconds per year for temporal hgridshift
2022-09-08 22:30:27 +02:00
Even Rouault e13331aa69 Merge pull request #3312 from rouault/doc_grid_formats
Docs: update doc of grid-based methods to mention/advertize more GeoTIFF
2022-09-08 22:30:16 +02:00
Even Rouault b4ce9566cb geodetictiffgrids.rst: add a Revisions section 2022-09-06 17:00:28 +02:00
Even Rouault a6b99f949f Docs: update doc of grid-based methods to mention/advertize more GeoTIFF 2022-09-06 15:45:46 +02:00
Even Rouault 33a4e3060e GeoTIFF grids: support UNITTYPE=arc-seconds per year for temporal hgridshift 2022-09-06 11:41:56 +02:00
Kristian Evers 4cc46f72bf docs: remove duplicate target name on download page 2022-09-01 20:42:35 +02:00
Kristian Evers eda7733c00 Update github_version in doc config 2022-09-01 17:09:08 +02:00
Kristian Evers 674617f281 Bump version numbers in preparation for 9.2.0 release 2022-09-01 17:07:24 +02:00
Kristian Evers c9d544a6d2 Update website for 9.1.0 release 2022-09-01 16:41:10 +02:00
Even Rouault de9a08fe6e Merge pull request #3307 from rouault/epsg_10_076
Database: update to EPSG v10.076
2022-09-01 13:32:24 +02:00
Even Rouault e028ab9e32 Database: update to EPSG v10.076 2022-08-31 19:03:48 +02:00
Kristian EversandMike Taves 8bd0a7daab Avoid using upper case project name in doc install dir (#3299)
Closes #3296 

Co-authored-by: Mike Taves <mwtoews@gmail.com>
2022-08-28 11:32:23 +02:00
Even Rouault e851d68944 Merge pull request #3300 from rouault/fix_3297
JSON output: avoid rounding issues with integer values in a double on…
2022-08-27 16:52:08 +02:00
Even Rouault 7f0cb3df51 Merge pull request #3302 from rouault/fix_3295
CMake: fix symbol detection when CFLAGS includes -Werror=something (fixes #3295)
2022-08-27 15:03:42 +02:00
Even Rouault 28fdeefa04 CMake: fix symbol detection when CFLAGS includes -Werror=something (fixes #3295) 2022-08-27 13:02:33 +02:00
Even Rouault e282e9fae8 JSON output: avoid rounding issues with integer values in a double on some architectures (fixes #3297) 2022-08-27 12:41:41 +02:00
703 changed files with 97104 additions and 47206 deletions

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
BasedOnStyle: llvm
IndentWidth: 4
+2
View File
@@ -0,0 +1,2 @@
f090353792c0530a7aa5d02e44ad9b236986757b
aa818d6772887453432ce607410b784ff56308a1
+15 -9
View File
@@ -6,26 +6,32 @@ labels: bug
<!-- Please search existing issues to avoid creating duplicates. -->
#### Example of problem
Demonstrate the problem you have found, either by using PROJ tools like `cs2cs`, `cct` or `projinfo` **or** add a code snippet that highlights the problem using the PROJ C/C++ API.
A "Minimal, Complete and Verifiable Example" will make it much easier for maintainers to help you:
http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports
Demonstrate the problem you have found, either by using PROJ tools like
`cs2cs`, `cct` or `projinfo` **or** add a code snippet that highlights the
problem using the PROJ C/C++ API.
A "Minimal, Complete and Verifiable Example" will make it much easier for
maintainers to help you: <http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports>
```c
# Your code here
```
#### Problem description
[this should explain **why** the current behavior is a problem and why the expected output is a better solution.]
[this should explain **why** the current behavior is a problem and why the
expected output is a better solution.]
#### Expected Output
#### Environment Information
- PROJ version (`proj`)
- Operation System Information
- PROJ version (`proj`)
- Operation System Information
#### Installation method
- conda, apt-get, from source, etc...
- conda, apt-get, from source, etc...
+4 -4
View File
@@ -1,6 +1,6 @@
<!-- Feel free to remove check-list items aren't relevant to your change -->
- [ ] Closes #xxxx
- [ ] Tests added
- [ ] Added clear title that can be used to generate release notes
- [ ] Fully documented, including updating `docs/source/*.rst` for new API
- [ ] Closes #xxxx
- [ ] Tests added
- [ ] Added clear title that can be used to generate release notes
- [ ] Fully documented, including updating `docs/source/*.rst` for new API
+6
View File
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
-18
View File
@@ -1,18 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
- bug
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
+47
View File
@@ -0,0 +1,47 @@
name: Update Stable Tag
on:
push:
branches:
- '**' # Matches all branches, but we later filter on the one matching the STABLE_BRANCH repository variable
permissions:
contents: read
jobs:
update-stable-tag:
runs-on: ubuntu-latest
if: github.repository == 'OSGeo/PROJ'
permissions:
contents: write
steps:
- name: Check branch match
id: check_branch
env:
STABLE_BRANCH: ${{ vars.STABLE_BRANCH }} # Repository variable
run: |
echo "Push detected on branch $GITHUB_REF"
if [[ "${GITHUB_REF#refs/heads/}" != "${STABLE_BRANCH}" ]]; then
echo "This workflow only runs for branch $STABLE_BRANCH. Skipping further steps."
echo "run=false" >> $GITHUB_OUTPUT
else
echo "run=true" >> $GITHUB_OUTPUT
fi
- name: Checkout code
if: steps.check_branch.outputs.run == 'true'
uses: actions/checkout@v5
- name: Tag
if: steps.check_branch.outputs.run == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --global user.email "PROJ-bot@example.com"
git config --global user.name "PROJ-bot"
touch .dummy-file
git add .dummy-file
# Do that so that stable doesn't have the same git sha as the stable branch, so ReadTheDocs triggers a build
git commit -a -m "Add .dummy-file"
git checkout -b stable
git push -f origin stable
+4 -3
View File
@@ -5,14 +5,15 @@ on:
- closed
- labeled
permissions: {}
jobs:
backport:
runs-on: ubuntu-18.04
runs-on: ubuntu-latest
name: Backport
steps:
- name: Backport Bot
id: backport
if: github.event.pull_request.merged && ( ( github.event.action == 'closed' && contains( join( github.event.pull_request.labels.*.name ), 'backport') ) || contains( github.event.label.name, 'backport' ) )
uses: m-kuhn/backport@v1.1.1
uses: m-kuhn/backport@v1.2.7
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
github_token: ${{ secrets.BACKPORT_TOKEN }}
+36
View File
@@ -0,0 +1,36 @@
name: CIFuzz
on:
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'proj4'
dry-run: false
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'proj4'
fuzz-seconds: 600
dry-run: false
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
+35 -6
View File
@@ -1,28 +1,57 @@
name: Clang Linux
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
clang_linux:
runs-on: ubuntu-latest
env:
PROJ_CMAKE_BUILD_OPTIONS: ${{ matrix.PROJ_CMAKE_BUILD_OPTIONS }}
strategy:
fail-fast: false
matrix:
include:
- name: Regular
id: regular
PROJ_CMAKE_BUILD_OPTIONS: ""
- name: EMBED_RESOURCE_FILES
id: EMBED_RESOURCE_FILES
PROJ_CMAKE_BUILD_OPTIONS: "-DEMBED_RESOURCE_FILES=ON"
- name: Without TIFF
id: without_tiff
PROJ_CMAKE_BUILD_OPTIONS: "-DENABLE_TIFF=OFF"
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Cache
uses: actions/cache@v2
uses: actions/cache@v4
id: cache
with:
path: |
${{ github.workspace }}/ccache.tar.gz
key: ${{ runner.os }}-cache-clang-${{ github.run_id }}
restore-keys: ${{ runner.os }}-cache-clang-
key: ${{ runner.os }}-cache-clang-${{ matrix.id }}-${{ github.run_id }}
restore-keys: ${{ runner.os }}-cache-clang-${{ matrix.id }}-
- name: Run
run: docker run -e CI -e TRAVIS_BUILD_DIR="$PWD" -e WORK_DIR="$PWD" -e TRAVIS_OS_NAME=linux -e BUILD_NAME=linux_clang -v $PWD:$PWD ubuntu:20.04 $PWD/.github/workflows/clang_linux/start.sh
run: docker run -e CI -e TRAVIS_BUILD_DIR="$PWD" -e PROJ_CMAKE_BUILD_OPTIONS="$PROJ_CMAKE_BUILD_OPTIONS" -e WORK_DIR="$PWD" -e TRAVIS_OS_NAME=linux -e BUILD_NAME=linux_clang -v $PWD:$PWD ubuntu:20.04 $PWD/.github/workflows/clang_linux/start.sh
+6 -5
View File
@@ -4,26 +4,27 @@ set -e
apt-get update -y
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
autoconf automake libtool make cmake ccache pkg-config python3-pip sqlite3 tar zip \
autoconf automake libtool make cmake ccache pkg-config python3-pip sqlite3 tar zip curl \
clang++-10 jq python3-clang-10 \
libsqlite3-dev \
libtiff-dev libwebp-dev libzstd-dev \
libcurl4-openssl-dev libnghttp2-dev libidn2-dev librtmp-dev libssh-dev \
libpsl-dev libssl-dev libkrb5-dev comerr-dev libldap2-dev libbrotli-dev \
libpsl-dev libssl-dev libkrb5-dev comerr-dev libldap2-dev libbrotli-dev \
nlohmann-json3-dev libgtest-dev
python3 -m pip install --user jsonschema
export PATH=$HOME/.local/bin:$PATH
python3 -m pip config --user set global.progress_bar off
python3 -m pip install --user jsonschema pyyaml pytest
cd "$WORK_DIR"
if test -f "$WORK_DIR/ccache.tar.gz"; then
echo "Restoring ccache..."
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
else
mkdir -p $HOME/.ccache
fi
export PROJ_DB_CACHE_DIR="$HOME/.ccache"
ccache -M 500M
# -fno-use-cxa-atexit is needed to build with -coverage
+12 -3
View File
@@ -1,19 +1,28 @@
name: Clang Static Analyzer
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
clang_static_analyzer:
runs-on: ubuntu-18.04
runs-on: ubuntu-24.04
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Run
run: .github/workflows/clang_static_analyzer/start.sh
@@ -2,22 +2,16 @@
set -e
sudo apt update
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends \
g++ cmake make sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev jq
CLANG_LLVM=clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04
wget -nv https://releases.llvm.org/9.0.0/$CLANG_LLVM.tar.xz
tar xJf $CLANG_LLVM.tar.xz
mv $CLANG_LLVM clang+llvm-9
g++ cmake make sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev jq \
clang-tools libfindbin-libs-perl
NPROC=$(nproc)
echo "NPROC=${NPROC}"
export MAKEFLAGS="-j ${NPROC}"
export PATH=$PWD/clang+llvm-9/bin:$PATH
mkdir csa_build
cd csa_build
@@ -28,7 +22,7 @@ scan-build -o scanbuildoutput -sarif -v -enable-checker alpha.unix.cstring.OutOf
rm -f filtered_scanbuild.txt
files=$(find scanbuildoutput -name "*.sarif")
for f in $files; do
jq '.runs[].results[] | (if .locations[].physicalLocation.fileLocation.uri | (contains("_generated_parser") ) then empty else { "uri": .locations[].physicalLocation.fileLocation.uri, "msg": .message.text, "location": .codeFlows[-1].threadFlows[-1].locations[-1] } end)' < $f > tmp.txt
jq '.runs[].results[] | (if .locations[].physicalLocation.fileLocation.uri | (index("_generated_parser") ) then empty else { "uri": .locations[].physicalLocation.fileLocation.uri, "msg": .message.text, "location": .codeFlows[-1].threadFlows[-1].locations[-1] } end)' < $f > tmp.txt
if [ -s tmp.txt ]; then
echo "Errors from $f: "
cat $f
+73 -13
View File
@@ -1,40 +1,100 @@
name: Code Checks
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
cppcheck_2004:
runs-on: ubuntu-20.04
cppcheck_2204:
runs-on: ubuntu-22.04
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Install Requirements
run: |
sudo apt update
sudo apt install -y --no-install-recommends cppcheck
sudo apt-get update
sudo apt-get install -y --no-install-recommends cppcheck
- name: Run cppcheck test
run: ./scripts/cppcheck.sh
other_checks:
cppcheck_master:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Install Requirements
run: |
sudo apt install python3-pip wget
sudo pip3 install jsonschema
sudo apt update
sudo apt install -y --no-install-recommends git cmake g++ make
- name: Check json files
- name: Build cppcheck
run: |
wget https://raw.githubusercontent.com/rouault/zenodo_json_schema/master/zenodo-json-schema.json
jsonschema -i .zenodo.json zenodo-json-schema.json
git clone https://github.com/danmar/cppcheck
cd cppcheck
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)
sudo make install
cd ../..
- name: Run cppcheck test (on push events)
if: ${{ github.event_name == 'push' }}
run: |
./scripts/cppcheck.sh
- name: Run cppcheck test, but ignore failures (on pull request)
if: ${{ github.event_name == 'pull_request' }}
run: |
# Do not fail the job. This is just used as a tool to monitor how we are regarding recent cppcheck
./scripts/cppcheck.sh || /bin/true
code_quality_checks:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Detect missing includes
run: ./scripts/detect_missing_include.sh
other_checks:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install Requirements
run: |
sudo apt-get install -y --no-install-recommends python3-pip
sudo apt-get remove -y python3-jsonschema
sudo pip3 install --break-system-packages cffconvert
- name: Validate citation file
run: |
cffconvert --validate
cffconvert -f bibtex
cffconvert -f apalike
linting:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
- uses: pre-commit/action@v3.0.1
+104
View File
@@ -0,0 +1,104 @@
name: "CodeQL"
on:
push:
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'c-cpp' ]
# CodeQL supports [ 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' ]
# Use only 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use only 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v5
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
config: |
query-filters:
- exclude:
id: cpp/non-https-url
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ccache cmake g++ sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev
# cache the .ccache directory
# key it on the runner os, build type, deps, and arch
# It's especially important to include arch in the key because we
# may get runtime errors with -mavx2 from objects built on a
# different architecture.
- name: Restore build cache
if: matrix.language == 'c-cpp'
id: restore-cache
uses: actions/cache/restore@v4
with:
path: ${{ github.workspace }}/.ccache
key: ${{ matrix.id }}-${{ steps.get-arch.outputs.arch }}-${{ github.ref_name }}-${{ github.run_id }}
restore-keys: |
${{ matrix.id }}-${{ steps.get-arch.outputs.arch }}-${{ github.ref_name }}
${{ matrix.id }}-${{ steps.get-arch.outputs.arch }}
- name: Configure ccache
if: matrix.language == 'c-cpp'
run: |
echo CCACHE_BASEDIR=${{ github.workspace }} >> ${GITHUB_ENV}
echo CCACHE_DIR=${{ github.workspace }}/.ccache >> ${GITHUB_ENV}
echo CCACHE_MAXSIZE=250M >> ${GITHUB_ENV}
ccache -z
- name: Build
if: matrix.language == 'c-cpp'
run: |
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_CCACHE=YES
make -j$(nproc)
- name: Summarize ccache
if: matrix.language == 'c-cpp'
run: |
ccache -s
- name: Save build cache
if: matrix.language == 'c-cpp'
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.ccache
key: ${{ steps.restore-cache.outputs.cache-primary-key }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
+16 -7
View File
@@ -1,15 +1,20 @@
name: Conda
on:
push:
branches: '*'
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
build:
conda:
name: Conda ${{ matrix.platform }}
if: github.repository == 'OSGeo/PROJ'
@@ -17,16 +22,20 @@ jobs:
strategy:
fail-fast: true
matrix:
platform: ['ubuntu-latest','windows-latest','macos-latest']
# macos-13: Intel
# macos-14: arm64
platform: ['ubuntu-latest','windows-latest','macos-13','macos-14']
env:
PLATFORM: ${{ matrix.platform }}
GHA_CI_PLATFORM: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v5
- uses: conda-incubator/setup-miniconda@v2
- uses: conda-incubator/setup-miniconda@v3
with:
miniforge-version: latest
use-mamba: true
channels: conda-forge
auto-update-conda: true
@@ -42,7 +51,7 @@ jobs:
working-directory: ./proj.4-feedstock
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}-conda-package
path: ./proj.4-feedstock/packages/
+7 -4
View File
@@ -1,4 +1,4 @@
name: coverity-scan
name: Coverity scan
# Controls when the action will run.
on:
@@ -9,13 +9,16 @@ on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
permissions:
contents: read
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build:
runs-on: ubuntu-20.04
coverity:
runs-on: ubuntu-22.04
if: github.repository == 'OSGeo/PROJ'
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v5
- name: Install Libraries
run: |
-118
View File
@@ -1,118 +0,0 @@
name: Docs
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
plots:
name: Plots
runs-on: ubuntu-latest
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install PROJ build dependencies
run: |
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
cmake g++ sqlite3 pkg-config libsqlite3-dev libtiff-dev libcurl4-openssl-dev
- name: Build PROJ
run: |
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=/opt/proj ..
make -j$(nproc)
sudo mkdir -p /opt/proj
sudo make install
cd ..
- name: Install plot dependencies
uses: conda-incubator/setup-miniconda@v2
with:
miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true
environment-file: docs/plot/environment.yml
activate-environment: proj
- name: Plot
working-directory: ./docs/plot
run: |
export PATH=/opt/proj/bin:$PATH
export PROJ_DATA=/opt/proj/share/proj
./plot.py plotdefs.json images/
- uses: actions/upload-artifact@v2
with:
name: Images
path: docs/plot/images
docs:
name: Docs
needs: [plots]
runs-on: ubuntu-latest
strategy:
fail-fast: true
container: osgeo/proj-docs
steps:
- uses: actions/checkout@v2
- name: Print versions
shell: bash -l {0}
run: |
python3 --version
sphinx-build --version
python3 -m pip list --not-required --format=columns
- uses: actions/download-artifact@v2
name: Images
with:
name: Images
path: ./docs/source/operations/projections/images
- name: Lint .rst files
shell: bash -l {0}
run: |
if find . -name '*.rst' | xargs grep -P '\t'; then echo 'Tabs are bad, please use four spaces in .rst files.'; false; fi
working-directory: ./docs
- name: Doxygen
shell: bash -l {0}
run: |
mkdir -p docs/build
doxygen Doxyfile
- name: HTML
shell: bash -l {0}
run: |
make html
working-directory: ./docs
- name: PDF
shell: bash -l {0}
run: |
make latexpdf
working-directory: ./docs
- name: Spelling
shell: bash -l {0}
run: |
make spelling
working-directory: ./docs
- uses: actions/upload-artifact@v2
with:
name: PDF
path: docs/build/latex/proj.pdf
- uses: actions/upload-artifact@v2
with:
name: HTML
path: docs/build/html/*
- uses: actions/upload-artifact@v2
with:
name: Misspelled
path: docs/build/spelling/output.txt
+59
View File
@@ -0,0 +1,59 @@
name: Docs
on:
push:
branches-ignore:
- 'backport**'
- 'dependabot**'
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
docs:
name: Documentation checks
runs-on: ubuntu-latest
strategy:
fail-fast: true
container: ghcr.io/osgeo/proj-docs
steps:
- uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.1.7
- name: Update sphinx-rtd-theme
shell: bash -l {0}
run: |
pip install -U "sphinx-rtd-theme>=3.0.0"
- name: Print versions
shell: bash -l {0}
run: |
python3 --version
sphinx-build --version
python3 -m pip list --not-required --format=columns
- name: Lint .rst files
shell: bash -l {0}
run: |
set -eu
if find . -name '*.rst' | xargs grep -P '\t'; then echo 'Tabs are bad, please use four spaces in .rst files.'; false; fi
if find . -name '*.rst' | xargs grep "\.\.versionadded"; then echo 'Wrong annotation. Should be .. versionadded'; false; fi
if find . -name '*.rst' | xargs grep "\.\.note"; then echo 'Wrong annotation. Should be .. note'; false; fi
if find . -name '*.rst' | xargs grep "\.\.warning"; then echo 'Wrong annotation. Should be .. warning'; false; fi
if find . -name '*.rst' | xargs grep "\.\.codeblock"; then echo 'Wrong annotation. Should be .. codeblock'; false; fi
working-directory: ./docs
- name: Doxygen
shell: bash -l {0}
run: |
make .doxygen_up_to_date
working-directory: ./docs
- name: Spelling
shell: bash -l {0}
run: |
make spelling SPHINXOPTS=-W
working-directory: ./docs
-82
View File
@@ -1,82 +0,0 @@
name: Docker
on: [push, pull_request, workflow_dispatch]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
# adapted from https://raw.githubusercontent.com/stefanprodan/podinfo/master/.github/workflows/release.yml
#
jobs:
containers:
name: ${{ matrix.container }} Container
runs-on: ubuntu-latest
strategy:
matrix:
container: ["proj","proj-docs"]
dockerfile: ["./Dockerfile", "./docs/docbuild/Dockerfile"]
exclude:
- container: "proj"
dockerfile: "./docs/docbuild/Dockerfile"
- container: "proj-docs"
dockerfile: "./Dockerfile"
env:
PUSH_PACKAGES: ${{ github.repository_owner == 'OSGeo' && github.event_name != 'pull_request' }}
CONTAINER: ${{ matrix.container }}
steps:
- uses: actions/checkout@v2
- name: Lint
id: lint
run: |
echo "are we pushing packages" ${{ env.PUSH_PACKAGES }}
echo "event_name" ${{ github.event_name }}
echo "ref" ${{ github.ref }}
- name: Setup Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
with:
version: latest
- if: ${{ env.PUSH_PACKAGES == 'true' }}
name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GHCR_TOKEN }}
- if: ${{ env.PUSH_PACKAGES == 'true' }}
name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Prepare
id: prep
run: |
VERSION=sha-${GITHUB_SHA::8}
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF/refs\/tags\//}
fi
echo ::set-output name=BUILD_DATE::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
echo ::set-output name=VERSION::${VERSION}
- name: Build image
uses: docker/build-push-action@v2
with:
push: ${{ env.PUSH_PACKAGES == 'true' }}
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ${{ matrix.dockerfile }}
platforms: linux/amd64
tags: |
docker.io/osgeo/${{ matrix.container }}:${{ steps.prep.outputs.VERSION }}
docker.io/osgeo/${{ matrix.container }}:latest
ghcr.io/osgeo/${{ matrix.container }}:${{ steps.prep.outputs.VERSION }}
ghcr.io/osgeo/${{ matrix.container }}:latest
labels: |
org.opencontainers.image.title=${{ github.event.repository.name }}
org.opencontainers.image.description=${{ github.event.repository.description }}
org.opencontainers.image.source=${{ github.event.repository.html_url }}
org.opencontainers.image.url=${{ github.event.repository.html_url }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }}
org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }}
+37
View File
@@ -0,0 +1,37 @@
name: Fedora Rawhide
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
fedora_rawhide:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Cache
uses: actions/cache@v4
id: cache
with:
path: |
${{ github.workspace }}/ccache.tar.gz
key: ${{ runner.os }}-cache-fedora_rawhide-${{ github.run_id }}
restore-keys: ${{ runner.os }}-cache-fedora_rawhide-
- name: Run
run: docker run -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD fedora:rawhide $PWD/.github/workflows/fedora_rawhide/start.sh
+55
View File
@@ -0,0 +1,55 @@
#!/bin/bash
set -e
dnf install -y cmake clang ccache ninja-build sqlite-devel libtiff-devel libcurl-devel diffutils wget
cd "$WORK_DIR"
if test -f "$WORK_DIR/ccache.tar.gz"; then
echo "Restoring ccache..."
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
fi
export CCACHE_CPP2=yes
ccache -M 500M
ccache -s
mkdir build
cd build
echo "Build with -DEMBED_RESOURCE_FILES=ON"
CC=clang CXX=clang++ cmake .. \
-DEMBED_RESOURCE_FILES=ON -DUSE_CCACHE=ON -DPROJ_DB_CACHE_DIR=$HOME/.ccache ..
make -j$(nproc)
ctest -j$(nproc)
# Try EMBED_RESOURCE_DIRECTORY option
wget https://raw.githubusercontent.com/OSGeo/PROJ-data/refs/heads/master/us_nga/us_nga_egm96_15.tif
mkdir grids
mv us_nga_egm96_15.tif grids
echo "Build with -DEMBED_RESOURCE_FILES=ON -DEMBED_RESOURCE_DIRECTORY=$PWD/grids"
CC=clang CXX=clang++ cmake .. -DEMBED_RESOURCE_DIRECTORY=$PWD/grids
make -j$(nproc)
rm -rf data
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979 | grep 44.643 >/dev/null || (echo "Expected 49dN 2dE 44.643 as a result" && /bin/false)
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96 | grep 0.0067 >/dev/null || (echo "Expected 0.0067 0.0061 -0.0185 as a result" && /bin/false)
echo "Build with -DEMBED_RESOURCE_FILES=ON -DEMBED_RESOURCE_DIRECTORY=$PWD/grids -DUSE_ONLY_EMBEDDED_RESOURCE_FILES=ON"
CC=clang CXX=clang++ cmake .. -DEMBED_RESOURCE_DIRECTORY=$PWD/grids -DUSE_ONLY_EMBEDDED_RESOURCE_FILES=ON
make -j$(nproc)
rm -rf data
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979
echo 49 2 0 | bin/cs2cs "WGS84 + EGM96 height" EPSG:4979 | grep 44.643 >/dev/null || (echo "Expected 49dN 2dE 44.643 as a result" && /bin/false)
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96
echo 0 0 0 | bin/cct +init=ITRF2000:ITRF96 | grep 0.0067 >/dev/null || (echo "Expected 0.0067 0.0061 -0.0185 as a result" && /bin/false)
cd ..
ccache -s
echo "Saving ccache..."
rm -f "$WORK_DIR/ccache.tar.gz"
(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .cache)
+12 -3
View File
@@ -1,11 +1,20 @@
name: Linux GCC 32bit
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
linux_gcc_32bit:
@@ -13,10 +22,10 @@ jobs:
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Cache
uses: actions/cache@v2
uses: actions/cache@v4
id: cache
with:
path: |
+6 -5
View File
@@ -12,15 +12,16 @@ dpkg --add-architecture i386
apt-get update -y
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
autoconf automake libtool make cmake ccache pkg-config python3-pip sqlite3 tar zip \
autoconf automake libtool make cmake ccache pkg-config python3-pip sqlite3 tar zip curl \
gcc-multilib g++-multilib g++ jq dpkg-dev \
libsqlite3-dev:$ARCH \
libtiff-dev:$ARCH libwebp-dev:$ARCH libzstd-dev:$ARCH \
libcurl4-openssl-dev:$ARCH libnghttp2-dev:$ARCH libidn2-dev:$ARCH librtmp-dev:$ARCH libssh-dev:$ARCH \
libpsl-dev:$ARCH libssl-dev:$ARCH libkrb5-dev:$ARCH comerr-dev:$ARCH libldap2-dev:$ARCH libbrotli-dev:$ARCH
libpsl-dev:$ARCH libssl-dev:$ARCH libkrb5-dev:$ARCH comerr-dev:$ARCH libldap2-dev:$ARCH libbrotli-dev:$ARCH
python3 -m pip install --user jsonschema
export PATH=$HOME/.local/bin:$PATH
python3 -m pip config --user set global.progress_bar off
python3 -m pip install --user jsonschema ruamel.yaml
export CXXFLAGS='-m32 -D_GLIBCXX_ASSERTIONS'
export CFLAGS='-m32'
@@ -36,10 +37,10 @@ cd "$WORK_DIR"
if test -f "$WORK_DIR/ccache.tar.gz"; then
echo "Restoring ccache..."
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
else
mkdir -p $HOME/.ccache
fi
export PROJ_DB_CACHE_DIR="$HOME/.ccache"
ccache -M 500M
CFLAGS="-Werror $CFLAGS" CXXFLAGS="-Werror $CXXFLAGS" CMAKE_BUILD_TYPE=RelWithDebInfo ./travis/install.sh
-33
View File
@@ -1,33 +0,0 @@
name: Linux GCC 5.4
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
linux_gcc_5_4:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cache
uses: actions/cache@v2
id: cache
with:
path: |
${{ github.workspace }}/ccache.tar.gz
key: ${{ runner.os }}-cache-gcc-5-4-${{ github.run_id }}
restore-keys: ${{ runner.os }}-cache-gcc-5-4-
- name: Run
run: docker run -e CI -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:16.04 $PWD/.github/workflows/linux_gcc_5_4/start.sh
- name: Coveralls
uses: coverallsapp/github-action@v1.1.2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
-44
View File
@@ -1,44 +0,0 @@
#!/bin/bash
set -e
export TRAVIS_OS_NAME=linux
export BUILD_NAME=linux_gcc
export TRAVIS_BUILD_DIR="$WORK_DIR"
apt-get update -y
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
autoconf automake libtool make cmake ccache pkg-config python3-pip sqlite3 tar zip \
g++ jq lcov python3-setuptools \
libsqlite3-dev \
libtiff-dev \
libcurl4-openssl-dev libidn11-dev librtmp-dev libssl-dev libkrb5-dev comerr-dev libldap2-dev
python3 -m pip install --user --upgrade "pip < 21.0"
echo `python3 -m pip --version`
python3 -m pip config --user set global.progress_bar off
python3 -m pip install --user jsonschema
python3 -m pip install --user cmake==3.9.6
export PATH=$HOME/.local/bin:$PATH
cd "$WORK_DIR"
if test -f "$WORK_DIR/ccache.tar.gz"; then
echo "Restoring ccache..."
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
fi
export PROJ_DB_CACHE_DIR="$HOME/.ccache"
ccache -M 500M
CFLAGS="-Werror $CFLAGS" CXXFLAGS="-Werror $CXXFLAGS" ./travis/install.sh
echo "Saving ccache..."
rm -f "$WORK_DIR/ccache.tar.gz"
(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .ccache)
mkdir -p coverage
lcov --no-external --capture --directory src --output-file coverage/lcov.info
+29 -10
View File
@@ -1,33 +1,52 @@
name: MacOS build
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
macos_build:
runs-on: macos-latest
strategy:
fail-fast: true
matrix:
include:
- platform: "macos-13"
architecture: "x64"
# macOS-14 is a M1 ARM64 MacOS runner: https://github.blog/changelog/2024-01-30-github-actions-introducing-the-new-m1-macos-runner-available-to-open-source/
- platform: "macOS-14"
architecture: "arm64"
runs-on: ${{ matrix.platform }}
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v5
- uses: conda-incubator/setup-miniconda@v2
- uses: mamba-org/setup-micromamba@v2
with:
miniforge-variant: Mambaforge
miniforge-version: latest
use-mamba: true
init-shell: bash
environment-file: .github/workflows/mac/environment.yml
- name: Cache
uses: actions/cache@v2
uses: actions/cache@v4
id: cache
with:
path: ${{ github.workspace }}/.ccache
key: ${{ runner.os }}-cache-mac-${{ github.run_id }}
restore-keys: ${{ runner.os }}-cache-mac-
key: ${{ runner.os }}-cache-mac-${{ matrix.architecture }}-${{ github.run_id }}
restore-keys: ${{ runner.os }}-cache-mac-${{ matrix.architecture }}-
- name: Install Requirements
shell: bash -l {0}
+1 -3
View File
@@ -2,6 +2,4 @@
set -e
mamba install --yes --quiet compilers
mamba install --yes --quiet python=3.8 autoconf automake libtool ccache jsonschema
mamba install --yes --quiet --only-deps proj=7.1.1=h45baca5_3
mamba install --yes --quiet --only-deps proj
+19
View File
@@ -0,0 +1,19 @@
name: proj
channels:
- conda-forge
dependencies:
- python=3.8
- conda
- mamba
- compilers
- ninja
- cmake
- pkg-config
- ccache
- autoconf
- automake
- m4
- jsonschema
- ruamel.yaml
- pytest
-2
View File
@@ -2,8 +2,6 @@
set -e
export PROJ_DB_CACHE_DIR="$HOME/.ccache"
ccache -M 200M
CC="clang" CXX="clang++" CFLAGS="-Werror" CXXFLAGS="-Werror" CMAKE_BUILD_TYPE=RelWithDebInfo ./travis/install.sh
+13 -4
View File
@@ -1,11 +1,20 @@
name: mingw_w64 build
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
mingw_w64_build:
@@ -13,10 +22,10 @@ jobs:
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Cache
uses: actions/cache@v2
uses: actions/cache@v4
id: cache
with:
path: |
@@ -25,4 +34,4 @@ jobs:
restore-keys: ${{ runner.os }}-cache-mingw_w64-
- name: Build
run: docker run -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:18.04 $PWD/.github/workflows/mingw_w64/start.sh
run: docker run -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:22.04 $PWD/.github/workflows/mingw_w64/start.sh
+10 -8
View File
@@ -26,10 +26,10 @@ cd "$WORK_DIR"
if test -f "$WORK_DIR/ccache.tar.gz"; then
echo "Restoring ccache..."
(cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz")
else
mkdir -p $HOME/.ccache
fi
export PROJ_DB_CACHE_DIR="$HOME/.ccache"
sudo apt-get install -y --no-install-recommends \
binutils-mingw-w64-x86-64 \
gcc-mingw-w64-x86-64 \
@@ -49,7 +49,7 @@ ccache -M 500M
ccache -s
MINGW_ARCH=x86_64-w64-mingw32
MINGW_PREFIX=/usr/lib/gcc/$MINGW_ARCH/7.3-posix
MINGW_PREFIX=/usr/lib/gcc/$MINGW_ARCH/10-posix
export CC="$MINGW_ARCH-gcc"
export CXX="$MINGW_ARCH-g++"
@@ -66,11 +66,11 @@ WINE_SYSDIR=$WINE_PREFIX/drive_c/windows
wine64 cmd /c dir
ln -s $MINGW_PREFIX/libstdc++-6.dll $WINE_SYSDIR
ln -s $MINGW_PREFIX/libgcc_s_seh-1.dll $WINE_SYSDIR
ln -s $MINGW_PREFIX/libgcc_s_sjlj-1.dll $WINE_SYSDIR
# ln -s $MINGW_PREFIX/libgcc_s_sjlj-1.dll $WINE_SYSDIR
ln -s /usr/$MINGW_ARCH/lib/libwinpthread-1.dll $WINE_SYSDIR
# build zlib
wget https://github.com/madler/zlib/archive/v1.2.11.tar.gz
wget -q https://github.com/madler/zlib/archive/v1.2.11.tar.gz
tar xzf v1.2.11.tar.gz
(cd zlib-1.2.11 && \
sudo make install -f win32/Makefile.gcc SHARED_MODE=1 \
@@ -81,13 +81,13 @@ tar xzf v1.2.11.tar.gz
ln -s /usr/$MINGW_ARCH/bin/zlib1.dll $WINE_SYSDIR
# build libtiff
wget http://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz
wget -q http://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz
tar xzf tiff-4.1.0.tar.gz
(cd tiff-4.1.0 && ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install)
ln -s /usr/$MINGW_ARCH/bin/libtiff-5.dll $WINE_SYSDIR
# build sqlite3
wget https://sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
wget -q https://sqlite.org/2020/sqlite-autoconf-3330000.tar.gz
tar xzf sqlite-autoconf-3330000.tar.gz
# Build with SQLITE_DQS=0 to ensure we properly use single quotes and double quotes (cf issue #2480)
(cd sqlite-autoconf-3330000 &&
@@ -95,6 +95,7 @@ CFLAGS="-DSQLITE_DQS=0" ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH
ln -s /usr/$MINGW_ARCH/bin/libsqlite3-0.dll $WINE_SYSDIR
# build proj
rm -rf build
mkdir build
cd build
cmake -G "Unix Makefiles" \
@@ -110,6 +111,7 @@ cmake -G "Unix Makefiles" \
-D ENABLE_CURL=OFF \
-D BUILD_PROJSYNC=OFF \
-D USE_CCACHE=ON \
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
..
make
# Run a subset of tests that should pass
@@ -123,4 +125,4 @@ ccache -s
echo "Saving ccache..."
rm -f "$WORK_DIR/ccache.tar.gz"
(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .ccache)
(cd $HOME && test ! -e .ccache || tar czf "$WORK_DIR/ccache.tar.gz" .ccache)
+93
View File
@@ -0,0 +1,93 @@
name: Handle stale issues
on:
schedule:
- cron: "30 2 * * *"
permissions:
contents: read
jobs:
stale:
permissions:
issues: write # for actions/stale to close stale issues
pull-requests: write # for actions/stale to close stale PRs
if: github.repository_owner == 'osgeo'
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-pr-message: >
The PROJ project highly values your contribution and would love to see
this work merged!
Unfortunately this PR has not had any activity in the last two months and
is being automatically marked as "stale".
If you think this pull request should be merged, please check
- that all unit tests are passing
- that all comments by reviewers have been addressed
- that there is enough information for reviewers, in particular
- link to any issues which this pull request fixes
- add a description of workflows which this pull request fixes
- add terminal output examples if applicable
- that you have written unit tests where possible
In case you should have any uncertainty, please leave a comment and we will
be happy to help you proceed with this pull request.
If there is no further activity on this pull request, it will be closed in a
week.
close-pr-message: >
While we hate to see this happen, this PR has been automatically closed because
it has not had any activity in the last 2 months. If this pull request should be
reconsidered, please follow the guidelines in the previous comment and reopen
this pull request. Or, if you have any further questions, just ask! We love to
help, and if there's anything the PROJ project can do to help push this PR forward
please let us know how we can assist.
stale-pr-label: 'stale'
exempt-pr-labels: 'pinned'
days-before-pr-stale: 60
days-before-pr-close: 7
stale-issue-message: >
The PROJ project highly values your report and would love to see it addressed.
However, this issue has been left in feedback mode for the last two months and is
being automatically marked as "stale".
If you would like to continue with this issue, please provide any missing information
or answer any open questions. If you could resolve the issue yourself meanwhile,
please leave a note for future readers with the same problem and close the issue.
In case you should have any uncertainty, please leave a comment and we will be
happy to help you proceed with this issue.
If there is no further activity on this issue, it will be closed in a week.
close-issue-message: >
While we hate to see this happen, this issue has been automatically closed because
it has not had any activity in the last two months despite being marked as feedback.
If this issue should be reconsidered, please follow the guidelines in the previous
comment and reopen this issue.
Or, if you have any further questions, there are also
[further support channels](https://proj.org/community/channels.html)
that can help you.
stale-issue-label: 'stale'
only-issue-labels: 'feedback'
days-before-issue-stale: 60
days-before-issue-close: 7
operations-per-run: 1000
+87 -13
View File
@@ -1,11 +1,20 @@
name: Windows build
on: [push, pull_request]
on:
push:
paths-ignore:
- 'docs/**'
pull_request:
paths-ignore:
- 'docs/**'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
MSVC:
@@ -26,11 +35,17 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v5
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- run: pip install pyyaml
- uses: ilammy/msvc-dev-cmd@v1
- name: Cache vcpkg packages
uses: actions/cache@v2
uses: actions/cache@v4
id: cache
with:
path: c:\vcpkg\installed
@@ -40,9 +55,7 @@ jobs:
shell: cmd
if: steps.cache.outputs.cache-hit != 'true'
run: |
vcpkg install sqlite3[core,tool]:${{ env.ARCH }}-windows
vcpkg install tiff:${{ env.ARCH }}-windows
vcpkg install curl:${{ env.ARCH }}-windows
vcpkg install sqlite3[core,tool] tiff curl --triplet=${{ env.ARCH }}-windows
- name: Build
shell: cmd
@@ -50,17 +63,43 @@ jobs:
set VCPKG_INSTALLED=c:\vcpkg\installed\${{ env.ARCH }}-windows
dir %VCPKG_INSTALLED%\bin
dir %VCPKG_INSTALLED%\tools
set PROJ_DB_CACHE_DIR=%VCPKG_INSTALLED%\cache
mkdir %PROJ_DB_CACHE_DIR%
set PATH=%VCPKG_INSTALLED%\bin;%VCPKG_INSTALLED%\tools;%PATH%
set PROJ_BUILD=%GITHUB_WORKSPACE%\build
mkdir %PROJ_BUILD%
cd %PROJ_BUILD%
set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir
cmake -DCMAKE_BUILD_TYPE="${{ env.BUILD_TYPE }}" -DBUILD_SHARED_LIBS="${{ env.BUILD_SHARED_LIBS }}" -DCMAKE_C_FLAGS="/WX" -DCMAKE_CXX_FLAGS="/WX" -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIX="%PROJ_DIR%" ..
:: Not directly linked to BUILD_SHARED_LIBS, but a way to test different C++ standard versions
if "${{ env.BUILD_SHARED_LIBS }}"=="ON" (set CMAKE_CXX_STANDARD="-DCMAKE_CXX_STANDARD=20")
if "${{ env.BUILD_TYPE }}"=="Release" (set CMAKE_UNITY_BUILD_OPT="-DCMAKE_UNITY_BUILD=ON")
cmake -D CMAKE_BUILD_TYPE="${{ env.BUILD_TYPE }}" ^
-D BUILD_SHARED_LIBS="${{ env.BUILD_SHARED_LIBS }}" ^
-D EXPORT_PDB="ON" ^
-D CMAKE_C_FLAGS="/WX" ^
-D CMAKE_CXX_FLAGS="/WX" ^
%CMAKE_CXX_STANDARD% ^
-D CMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake ^
-D CMAKE_INSTALL_PREFIX="%PROJ_DIR%" ^
-D PROJ_DB_CACHE_DIR=%PROJ_DB_CACHE_DIR% ^
%CMAKE_UNITY_BUILD_OPT% ..
ninja -v
ninja install
dir %PROJ_DIR%\bin
- name: Run tests
shell: bash -l {0}
run: |
export VCPKG_ROOT=c:/vcpkg
export platform=${{ env.ARCH }}
export VCPKG_INSTALLED=${VCPKG_ROOT}/installed/${platform}-windows
export PATH=${VCPKG_INSTALLED}/bin:${PATH}
export PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
export PROJ_BUILD=${GITHUB_WORKSPACE}/build
cd ${PROJ_BUILD}
ctest --output-on-failure -C "${{ env.BUILD_TYPE }}"
- name: Post install checks
shell: cmd
run: |
set VCPKG_ROOT=c:\vcpkg
@@ -70,7 +109,6 @@ jobs:
set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir
set PROJ_BUILD=%GITHUB_WORKSPACE%\build
cd %PROJ_BUILD%
ctest --output-on-failure -C "${{ env.BUILD_TYPE }}"
set PATH=%PROJ_DIR%\bin;%PATH%
set BUILD_MODE=shared
if "${{ env.BUILD_SHARED_LIBS }}"=="OFF" (set BUILD_MODE=static)
@@ -97,10 +135,10 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v5
- name: Cache
uses: actions/cache@v2
uses: actions/cache@v4
id: cache
with:
path: ~/.ccache
@@ -118,17 +156,52 @@ jobs:
mingw-w64-x86_64-curl
mingw-w64-x86_64-gcc
mingw-w64-x86_64-libtiff
mingw-w64-x86_64-python-yaml
mingw-w64-x86_64-sqlite3
- name: Build
- name: First build with EMBED_RESOURCE_FILES=ON and USE_ONLY_EMBEDDED_RESOURCE_FILES=ON
run: |
mkdir -p $HOME/.ccache
ccache -M 500M
ccache -s
PROJ_BUILD=${GITHUB_WORKSPACE}/build
PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
mkdir ${PROJ_BUILD}
cd ${PROJ_BUILD}
cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} -DBUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }} -DCMAKE_INSTALL_PREFIX="${PROJ_DIR}" -DCMAKE_C_FLAGS="-Werror" -DCMAKE_CXX_FLAGS="-Werror" -DUSE_CCACHE=ON ..
cmake -D CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
-D BUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }} \
-D CMAKE_INSTALL_PREFIX="${PROJ_DIR}" \
-D CMAKE_C_FLAGS="-Werror" \
-D CMAKE_CXX_FLAGS="-Werror" \
-D USE_CCACHE=ON \
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
-D CMAKE_UNITY_BUILD=ON \
-D Python_ROOT_DIR=/mingw64 \
-D CMAKE_CXX_STANDARD=20 \
-D EMBED_RESOURCE_FILES=ON \
-D USE_ONLY_EMBEDDED_RESOURCE_FILES=ON \
..
make -j 2
- name: Seond build with EMBED_RESOURCE_FILES=OFF and USE_ONLY_EMBEDDED_RESOURCE_FILES=OFF
run: |
PROJ_BUILD=${GITHUB_WORKSPACE}/build
PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
cd ${PROJ_BUILD}
cmake -D CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
-D BUILD_SHARED_LIBS=${{ env.BUILD_SHARED_LIBS }} \
-D CMAKE_INSTALL_PREFIX="${PROJ_DIR}" \
-D CMAKE_C_FLAGS="-Werror" \
-D CMAKE_CXX_FLAGS="-Werror" \
-D USE_CCACHE=ON \
-D PROJ_DB_CACHE_DIR=$HOME/.ccache \
-D CMAKE_UNITY_BUILD=ON \
-D Python_ROOT_DIR=/mingw64 \
-D CMAKE_CXX_STANDARD=20 \
-D EMBED_RESOURCE_FILES=OFF \
-D USE_ONLY_EMBEDDED_RESOURCE_FILES=OFF \
..
make -j 2
make install
ls ${PROJ_DIR}/bin
@@ -144,5 +217,6 @@ jobs:
BUILD_MODE=shared
if [ ${{ env.BUILD_SHARED_LIBS }} == "OFF" ]; then BUILD_MODE=static; fi
../test/postinstall/test_cmake.sh ${PROJ_DIR} ${BUILD_MODE}
../test/postinstall/test_pkg-config.sh ${PROJ_DIR} ${BUILD_MODE}
# Disabled because of issue with (likely sqlite3.pc) that includes a unexisting -ldl
# ../test/postinstall/test_pkg-config.sh ${PROJ_DIR} ${BUILD_MODE}
proj
-1
View File
@@ -54,7 +54,6 @@ CTestTestfile.cmake
cmake_install.cmake
cmake/project-config*.cmake
install_manifest.txt
/googletest*
# / (base)
/*.manifest
+30
View File
@@ -0,0 +1,30 @@
Aaron Puchert <aaron.puchert@sap.com> <aaronpuchert@alice-dsl.net>
Alan D. Snow <alansnow21@gmail.com>
Alan D. Snow <alansnow21@gmail.com> <alan.snow@pioneer.com>
Ben Boeckel <ben.boeckel@kitware.com> <mathstuf@users.noreply.github.com>
Bojan Šavrič <bsavric@esri.com>
Brendan Jurd <direvus@gmail.com> <brendan.jurd@geoplex.com.au>
Charles Karney <charles@karney.com>
Charles Karney <charles@karney.com> <charles.karney@sri.com>
Charles Karney <charles@karney.com> <ckarney@karney.com>
dalia2 <dalia@lmi.is> <57895979+dalia2@users.noreply.github.com>
Eli Rykoff <erykoff@stanford.edu>
Even Rouault <even.rouault@spatialys.com> <even.rouault@mines-paris.org>
George Ouzounoudis <geothrock@gmail.com>
Jeff McKenna <jeffmckenna@gmail.com>
Jeff McKenna <jeffmckenna@gmail.com> <jmckenna@gatewaygeomatics.com>
Jürnjakob Dugge <juernjakob@gmail.com>
Jürnjakob Dugge <juernjakob@gmail.com> <jdugge@users.noreply.github.com>
Kurt Schwehr <schwehr@google.com> <schwehr@gmail.com>
Martin Desruisseaux <martin.desruisseaux@geomatys.com> <martin.desruisseaux@geomatys.fr>
Mateusz Łoskot <mateusz@loskot.net>
Mike Taves <mwtoews@gmail.com>
Olli Räisä <olli.raisa@trimble.com>
Sebastian Val <Sebastian.Val@jpl.nasa.gov> <sval-dev@users.noreply.github.com>
Sveinung Himle <himsve@kartverket.no>
Sveinung Himle <himsve@kartverket.no> <56073535+himsve@users.noreply.github.com>
Sveinung Himle <himsve@kartverket.no> <Sveinung.Himle@kartverket.no>
Thomas Knudsen <thokn@sdfe.dk>
Thomas Knudsen <thokn@sdfe.dk> <busstoptaktik@users.noreply.github.com>
Thomas Knudsen <thokn@sdfe.dk> <knudsen.thomas@gmail.com>
Thomas Knudsen <thokn@sdfe.dk> <lastname DOT firstname AT gmail DOT com>
+26
View File
@@ -0,0 +1,26 @@
# https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
# Heading style
MD003:
style: "atx"
# Unordered list indentation
MD007:
indent: 2
# Line length
MD013: false
# line_length: 100
# Multiple headings with the same content
MD024:
siblings_only: true
# Multiple top-level headings in the same document
MD025: false
# First line in a file should be a top-level heading
MD041: false
# Required heading structure
MD043: true
+22
View File
@@ -0,0 +1,22 @@
repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: 'v15.0.4'
hooks:
- id: clang-format
exclude: >
(?x)^(
data/|
schemas/|
docs/|
include/proj/nn.hpp|
include/proj/internal/lru_cache.hpp|
include/proj/internal/vendor/nlohmann/json.hpp|
src/wkt1_generated_parser.c|
src/wkt1_generated_parser.h|
src/wkt2_generated_parser.c|
src/wkt2_generated_parser.h|
src/geodesic.c|
src/geodesic.h|
src/tests/geodtest.c|
src/tests/geodsigntest.c
)
+41
View File
@@ -0,0 +1,41 @@
# .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:
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | paste -s -d " " | grep -viqP "skip ci|ci skip") || exit 183
pre_build:
- ./docs/rtd/pre_build.sh
- ./scripts/doxygen.sh
- ./docs/rtd/plot.sh
post_build:
- ./docs/rtd/post_build.sh
apt_packages:
- cmake
- ninja-build
- g++
- sqlite3
- libsqlite3-dev
- libtiff-dev
- libcurl4-openssl-dev
formats:
- htmlzip
- pdf
conda:
environment: docs/environment.yml
sphinx:
configuration: docs/source/conf.py
fail_on_warning: true
+15 -21
View File
@@ -2,9 +2,14 @@
# with Travis-ci.org
language: cpp
# FIXME: Travis-CI builds are disabled
branches:
except:
- /^(cherry-pick-)?backport-\d+-to-/
only:
- disabled_disabled
#branches:
# except:
# - /^(cherry-pick-)?backport-\d+-to-/
cache:
directories:
@@ -14,25 +19,16 @@ matrix:
fast_finish: true
include:
- os: linux
dist: xenial
compiler: gcc
services:
- docker
env:
- BUILD_NAME=publish_doc
- DETAILS="publish_doc"
#- os: linux
# dist: jammy
# compiler: gcc
# arch: s390x
# env:
# - BUILD_NAME=linux_generic
# - DETAILS="linux, s390x"
- os: linux
dist: bionic
compiler: gcc
arch: s390x
env:
- BUILD_NAME=linux_generic
- DETAILS="linux, s390x"
- os: linux
dist: bionic
dist: jammy
compiler: gcc
arch: arm64
env:
@@ -50,8 +46,6 @@ install: ./travis/${BUILD_NAME}/install.sh
script:
- echo "done"
after_success: ./travis/${BUILD_NAME}/after_success.sh
notifications:
irc:
channels:
-79
View File
@@ -1,79 +0,0 @@
{
"creators": [
{
"affiliation": "United States Geological Survey",
"name": "Evenden, Gerald I."
},
{
"affiliation": "Spatialys",
"name": "Rouault, Even",
"orcid": "0000-0002-5068-0476"
},
{
"affiliation": "Planet Labs Inc",
"name": "Warmerdam, Frank"
},
{
"affiliation": "Danish Agency for Data Supply and Efficiency",
"name": "Evers, Kristian",
"orcid": "0000-0002-1310-4576"
},
{
"affiliation": "Danish Agency for Data Supply and Efficiency",
"name": "Knudsen, Thomas"
},
{
"affiliation": "Hobu Inc",
"name": "Butler, Howard",
"orcid": "0000-0002-5340-1380"
},
{
"affiliation": "GNS Science",
"name": "Taves, Mike",
"orcid": "0000-0003-3657-7963"
},
{
"affiliation": "Google Inc",
"name": "Schwehr, Kurt",
"orcid": "0000-0002-5624-8190"
},
{
"name": "Sales de Andrade, Elliott",
"orcid": "0000-0001-7310-8942"
},
{
"affiliation": "SRI International",
"name": "Karney, Charles",
"orcid": "0000-0002-5006-5836"
},
{
"name": "Couwenberg, Sebastiaan"
},
{
"affiliation": "North Road",
"name": "Dawson, Nyall",
"orcid": "0000-0001-9812-7584"
},
{
"affiliation": "Corteva",
"name": "Snow, Alan D.",
"orcid": "0000-0002-7333-3100"
},
{
"name": "Jimenez Shaw, Javier"
}
],
"description": "PROJ is a generic coordinate transformation software that transforms geospatial coordinates from one coordinate reference system (CRS) to another. This includes cartographic projections as well as geodetic transformations.",
"keywords": [
"PROJ",
"geodesy",
"cartography",
"coordinates",
"projections",
"conversion"
],
"license": {
"id": "MIT"
},
"title": "PROJ"
}
-42
View File
@@ -1,42 +0,0 @@
--------------------------------------------------------------------------------
Authors
--------------------------------------------------------------------------------
Original Author
................................................................................
Gerald Evenden (1935-2016)
Maintainer(s)
................................................................................
Kristian Evers <kreve@sdfe.dk>
Even Rouault <even.rouault@spatialys.com>
Project Steering Committee
--------------------------------------------------------------------------------
Process and membership can be found at:
https://proj.org/community/rfc/rfc-1.html
Chair
................................................................................
Kristian Evers <kreve@sdfe.dk>
Members
................................................................................
Frank Warmerdam <warmerdam@pobox.com>
Howard Butler <howard@hobu.co>
Charles Karney <charles.karney@sri.com>
Thomas Knudsen <thokn@sdfe.dk>
Even Rouault <even.rouault@spatialys.com>
Kurt Schwehr <schwehr@gmail.com>
Contributors
--------------------------------------------------------------------------------
The full list of contributors can be found on GitHub
https://github.com/OSGeo/PROJ/graphs/contributors
+33
View File
@@ -0,0 +1,33 @@
# Authors
## Original Author
- Gerald Evenden (1935-2016)
## Maintainers
- Kristian Evers <kreve@sdfi.dk>
- Even Rouault <even.rouault@spatialys.com>
## Project Steering Committee
Process and membership can be found at:
<https://proj.org/community/rfc/rfc-1.html>
Chair:
- Kristian Evers <kreve@sdfi.dk>
Members:
- Frank Warmerdam <warmerdam@pobox.com>
- Howard Butler <howard@hobu.co>
- Charles Karney <charles.karney@sri.com>
- Thomas Knudsen <thokn@sdfi.dk>
- Even Rouault <even.rouault@spatialys.com>
- Kurt Schwehr <schwehr@gmail.com>
## Contributors
The full list of contributors can be found on GitHub
<https://github.com/OSGeo/PROJ/graphs/contributors>
+2 -2
View File
@@ -1,6 +1,6 @@
To cite PROJ in publications use:
PROJ contributors (2020). PROJ coordinate transformation software
PROJ contributors (2025). PROJ coordinate transformation software
library. Open Source Geospatial Foundation. URL https://proj.org/.
DOI: 10.5281/zenodo.5884394
@@ -12,7 +12,7 @@ A BibTeX entry for LaTeX users is
title = {{PROJ} coordinate transformation software library},
author = {{PROJ contributors}},
organization = {Open Source Geospatial Foundation},
year = {2022},
year = {2025},
url = {https://proj.org/},
doi = {10.5281/zenodo.5884394},
}
+70
View File
@@ -0,0 +1,70 @@
cff-version: 1.2.0
message: Please cite this software using these metadata or in the CITATION file.
type: software
title: PROJ
version: 9.6.1
date-released: 2025-06-02
doi: 10.5281/zenodo.5884394
abstract: PROJ is a generic coordinate transformation software that transforms
geospatial coordinates from one coordinate reference system (CRS) to another.
This includes cartographic projections as well as geodetic transformations.
url: https://proj.org
repository-code: https://github.com/OSGeo/PROJ/
license: MIT
authors:
- given-names: Gerald I.
family-names: Evenden
affiliation: United States Geological Survey
- given-names: Even
family-names: Rouault
affiliation: Spatialys
orcid: https://orcid.org/0000-0002-5068-0476
- given-names: Frank
family-names: Warmerdam
affiliation: Planet Labs Inc
- given-names: Kristian
family-names: Evers
affiliation: Danish Agency for Climate Data
orcid: https://orcid.org/0000-0002-1310-4576
- given-names: Thomas
family-names: Knudsen
affiliation: Danish Agency for Climate Data
- given-names: Howard
family-names: Butler
affiliation: Hobu Inc
orcid: https://orcid.org/0000-0002-5340-1380
- given-names: Mike W.
family-names: Taves
affiliation: GNS Science
orcid: https://orcid.org/0000-0003-3657-7963
- given-names: Kurt
family-names: Schwehr
affiliation: Google Inc
orcid: https://orcid.org/0000-0002-5624-8190
- given-names: Elliott
family-names: Sales de Andrade
orcid: https://orcid.org/0000-0001-7310-8942
- given-names: Charles
family-names: Karney
affiliation: SRI International
orcid: https://orcid.org/0000-0002-5006-5836
- given-names: Sebastiaan
family-names: Couwenberg
- given-names: Nyall
family-names: Dawson
affiliation: North Road
orcid: https://orcid.org/0000-0001-9812-7584
- given-names: Alan D.
family-names: Snow
affiliation: Corteva
orcid: https://orcid.org/0000-0002-7333-3100
- given-names: Javier
family-names: Jimenez Shaw
orcid: https://orcid.org/0000-0002-7227-9173
keywords:
- PROJ
- geodesy
- cartography
- coordinates
- projections
- conversion
+177 -52
View File
@@ -9,7 +9,7 @@
################################################################################
# General settings
################################################################################
cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
cmake_minimum_required(VERSION 3.16)
project(PROJ
DESCRIPTION "PROJ coordinate transformation software library"
@@ -21,8 +21,8 @@ cmake_policy(SET CMP0054 NEW)
# Set C++ version
# Make CMAKE_CXX_STANDARD available as cache option overridable by user
set(CMAKE_CXX_STANDARD 11
CACHE STRING "C++ standard version to use (default is 11)")
set(CMAKE_CXX_STANDARD 17
CACHE STRING "C++ standard version to use (default is 17)")
message(STATUS "Requiring C++${CMAKE_CXX_STANDARD}")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
@@ -44,27 +44,65 @@ set(CMAKE_CXX_VISIBILITY_PRESET hidden)
# Set warnings as variables, then store as cache options
set(PROJ_common_WARN_FLAGS # common only to GNU/Clang C/C++
-Wall
-Wdate-time
-Werror=format-security
-Werror=vla
-Wextra
-Wswitch
-Wshadow
-Wunused-parameter
-Wmissing-declarations
-Wformat
-Wformat-security
-Wmissing-declarations
-Wshadow
-Wswitch
-Wunused-parameter
)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
-Wduplicated-cond
-Wduplicated-branches
-Wlogical-op
-Wimplicit-fallthrough
)
set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
-Wmissing-prototypes
)
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS})
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8)
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wextra-semi)
endif()
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
-Weffc++
# -Wold-style-cast
-Woverloaded-virtual
-Wzero-as-null-pointer-constant
-Wdeprecated-copy-dtor
)
elseif("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
-Wcomma
-Wdeprecated
-Wdocumentation -Wno-documentation-deprecated-sync
-Wfloat-conversion
-Wlogical-op-parentheses
-Wimplicit-fallthrough
)
# Not sure about the minimum version, but clang 12 complains about \file, @cond Doxygen_Suppress, etc.
if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_GREATER_EQUAL 18.0.0)
set(PROJ_common_WARN_FLAGS ${PROJ_common_WARN_FLAGS} -Wdocumentation-unknown-command)
endif()
set(PROJ_C_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
-Wmissing-prototypes
-Wfloat-conversion
-Wc11-extensions
)
set(PROJ_CXX_WARN_FLAGS ${PROJ_common_WARN_FLAGS}
-Wfloat-conversion
-Weffc++
-Wextra-semi
# -Wold-style-cast
-Woverloaded-virtual
-Wshorten-64-to-32
-Wunused-private-field
-Wzero-as-null-pointer-constant
-Wdeprecated-copy-dtor
-Wweak-vtables
)
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
add_definitions(/D_CRT_SECURE_NO_WARNINGS) # Eliminate deprecation warnings
@@ -115,7 +153,7 @@ message(STATUS "Configuring PROJ:")
#PROJ version information
################################################################################
include(ProjVersion)
proj_version(MAJOR 9 MINOR 1 PATCH 0)
proj_version(MAJOR 9 MINOR 7 PATCH 1)
set(PROJ_SOVERSION 25)
set(PROJ_BUILD_VERSION "${PROJ_SOVERSION}.${PROJ_VERSION}")
@@ -128,6 +166,13 @@ include(ProjConfig)
include(ProjMac)
include(policies)
##############################################
### SWITCH BETWEEN STATIC OR SHARED LIBRARY###
##############################################
# default config is shared
option(BUILD_SHARED_LIBS "Build PROJ library shared." ON)
################################################################################
# Check for nlohmann_json
################################################################################
@@ -176,15 +221,22 @@ if(NOT EXE_SQLITE3)
message(SEND_ERROR "sqlite3 binary not found!")
endif()
find_package(Sqlite3 REQUIRED)
if(NOT SQLITE3_FOUND)
message(SEND_ERROR "sqlite3 dependency not found!")
# Deprecated variables since PROJ 9.4.0
if(DEFINED SQLITE3_INCLUDE_DIR)
message(DEPRECATION "Use SQLite3_INCLUDE_DIR instead of SQLITE3_INCLUDE_DIR")
set(SQLite3_INCLUDE_DIR ${SQLITE3_INCLUDE_DIR})
endif()
if(DEFINED SQLITE3_LIBRARY)
message(DEPRECATION "Use SQLite3_LIBRARY instead of SQLITE3_LIBRARY")
set(SQLite3_LIBRARY ${SQLITE3_LIBRARY})
endif()
find_package(SQLite3 REQUIRED)
# Would build and run with older versions, but with horrible performance
# See https://github.com/OSGeo/PROJ/issues/1718
if("${SQLITE3_VERSION}" VERSION_LESS "3.11")
message(SEND_ERROR "sqlite3 >= 3.11 required!")
if(SQLite3_VERSION VERSION_LESS "3.11")
message(SEND_ERROR "SQLite3 >= 3.11 required!")
endif()
################################################################################
@@ -218,6 +270,13 @@ if(ENABLE_CURL)
find_package(CURL REQUIRED)
if(CURL_FOUND)
set(CURL_ENABLED TRUE)
# Curl SSL options are described in
# https://curl.se/libcurl/c/CURLOPT_SSL_OPTIONS.html
#set(CURLSSLOPT_NO_REVOKE 2)
#set(SSL_OPTIONS ${CURLSSLOPT_NO_REVOKE})
#add_compile_definitions(SSL_OPTIONS=${SSL_OPTIONS})
else()
message(SEND_ERROR "curl dependency not found!")
endif()
@@ -225,6 +284,8 @@ endif()
################################################################################
option(EMBED_PROJ_DATA_PATH "Whether the PROJ_DATA_PATH should be embedded" ON)
if(DEFINED PROJ_LIB_ENV_VAR_TRIED_LAST)
set(PROJ_DATA_ENV_VAR_TRIED_LAST ${PROJ_LIB_ENV_VAR_TRIED_LAST})
message(WARNING "PROJ_LIB_ENV_VAR_TRIED_LAST option has been renamed to PROJ_DATA_ENV_VAR_TRIED_LAST. PROJ_LIB_ENV_VAR_TRIED_LAST is still working for now, but may be completely replaced by PROJ_DATA_ENV_VAR_TRIED_LAST in a future release")
@@ -240,30 +301,9 @@ endif()
################################################################################
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads)
include(CheckCSourceCompiles)
if(MSVC)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} /WX /W4")
else()
set(CMAKE_REQUIRED_LIBRARIES m)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall")
endif()
if(Threads_FOUND AND CMAKE_USE_PTHREADS_INIT)
set(CMAKE_REQUIRED_LIBRARIES
"${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}")
check_c_source_compiles("
#include <pthread.h>
int main(int argc, char* argv[]) {
(void)PTHREAD_MUTEX_RECURSIVE;
(void)argv;
return argc;
}
" HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN)
if(HAVE_PTHREAD_MUTEX_RECURSIVE_DEFN)
add_definitions(-DHAVE_PTHREAD_MUTEX_RECURSIVE=1)
endif()
endif()
# Set a default build type for single-configuration cmake generators if
@@ -295,7 +335,7 @@ include(ProjInstallPath)
# By default GNUInstallDirs will use the upper case project name
# for CMAKE_INSTALL_DOCDIR, resulting in something like share/doc/PROJ
# instead of share/doc/proj which historically have been the path used
# by the project.
# by the project.
# Here force the use of a lower case project name and reset after
# GNUInstallDirs has done its thing
set(PROJECT_NAME_ORIGINAL "${PROJECT_NAME}")
@@ -310,17 +350,76 @@ set(PROJ_DATA_PATH "${CMAKE_INSTALL_FULL_DATADIR}/proj")
################################################################################
# Tests
################################################################################
include(CTest)
option(BUILD_TESTING "Build the testing tree." ON)
if(BUILD_TESTING)
enable_testing()
include(ProjTest)
else()
message(STATUS "Testing disabled")
endif()
################################################################################
# Whether we should embed resources
################################################################################
function (is_sharp_embed_available res)
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.21 AND
((CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0) OR
(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 19.0)))
# CMAKE_C_STANDARD=23 only supported since CMake 3.21
set(TEST_SHARP_EMBED
"static const unsigned char embedded[] = {\n#embed __FILE__\n};\nint main() { (void)embedded; return 0;}"
)
set(CMAKE_C_STANDARD_BACKUP "${CMAKE_C_STANDARD}")
set(CMAKE_C_STANDARD "23")
check_c_source_compiles("${TEST_SHARP_EMBED}" _TEST_SHARP_EMBED)
set(CMAKE_C_STANDARD "${CMAKE_C_STANDARD_BACKUP}")
if (_TEST_SHARP_EMBED)
set(${res} ON PARENT_SCOPE)
else()
set(${res} OFF PARENT_SCOPE)
endif()
else()
set(${res} OFF PARENT_SCOPE)
endif()
endfunction()
is_sharp_embed_available(IS_SHARP_EMBED_AVAILABLE_RES)
if (NOT DEFINED BUILD_SHARED_LIBS)
message(FATAL_ERROR "BUILD_SHARED_LIBS should be set")
endif()
if (NOT BUILD_SHARED_LIBS)
set(DEFAULT_EMBED_RESOURCE_FILES ON)
else()
set(DEFAULT_EMBED_RESOURCE_FILES OFF)
endif()
option(EMBED_RESOURCE_FILES "Whether resource files (limited to proj.db) should be embedded into the PROJ library" ${DEFAULT_EMBED_RESOURCE_FILES})
option(USE_ONLY_EMBEDDED_RESOURCE_FILES "Whether embedded resource files (limited to proj.db) should be used (should nominally be used together with EMBED_RESOURCE_FILES=ON, otherwise this will result in non-functional builds)" OFF)
if (USE_ONLY_EMBEDDED_RESOURCE_FILES AND NOT EMBED_RESOURCE_FILES)
message(WARNING "USE_ONLY_EMBEDDED_RESOURCE_FILES=ON set but EMBED_RESOURCE_FILES=OFF: some drivers will lack required resource files")
endif()
################################################################################
# Build configured components
################################################################################
set(PROJ_DICTIONARY
world
other.extra
nad27
GL27
nad83
nad.lst
CH
ITRF2000
ITRF2008
ITRF2014
ITRF2020
)
include_directories(${PROJ_SOURCE_DIR}/src)
add_subdirectory(data)
@@ -332,10 +431,40 @@ if(BUILD_TESTING)
add_subdirectory(test)
endif()
set(docfiles COPYING NEWS AUTHORS)
option(BUILD_EXAMPLES "Whether to build example programs" OFF)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
add_subdirectory(scripts)
set(docfiles COPYING NEWS.md AUTHORS.md)
install(FILES ${docfiles}
DESTINATION ${CMAKE_INSTALL_DOCDIR})
################################################################################
# Build debug symbols
################################################################################
option(EXPORT_PDB "Export PDB file" OFF)
if (WIN32 AND EXPORT_PDB)
target_compile_options(proj PRIVATE /Zi /Zf)
target_link_options(proj PRIVATE /DEBUG /OPT:REF /OPT:ICF)
if(BUILD_SHARED_LIBS)
set(pdbFile $<TARGET_PDB_FILE:proj>)
else()
set(pdbDirFullPath ${CMAKE_BINARY_DIR}/lib)
set_target_properties(proj
PROPERTIES
COMPILE_PDB_OUTPUT_DIRECTORY ${pdbDirFullPath}
COMPILE_PDB_NAME proj)
set(pdbFile ${pdbDirFullPath}/proj.pdb)
endif()
install(FILES ${pdbFile} DESTINATION lib)
endif()
################################################################################
# pkg-config support
################################################################################
@@ -367,16 +496,15 @@ set(CPACK_SOURCE_IGNORE_FILES
/autom4te\\.cache
/CODE_OF_CONDUCT.md
/CONTRIBUTING.md
/disabled_workflows/
/Dockerfile
/docs/
/Doxyfile
/examples/
/HOWTO-RELEASE
/HOWTO-RELEASE.md
/m4/lt*
/m4/libtool*
/media/
/schemas/
/scripts/
/test/fuzzers/
/test/gigs/.*gie\\.failing
/test/postinstall/
@@ -386,18 +514,15 @@ set(CPACK_SOURCE_IGNORE_FILES
include(CPack)
# Simplify README.md to README
add_custom_target(README
COMMAND ${CMAKE_COMMAND}
-D PROJ_SOURCE_DIR=${PROJ_SOURCE_DIR}
-P ${PROJ_SOURCE_DIR}/cmake/ProjReadme.cmake
)
get_property(_is_multi_config_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(NOT _is_multi_config_generator)
add_custom_target(dist
COMMAND ${CMAKE_MAKE_PROGRAM} package_source
DEPENDS README
)
message(STATUS "PROJ: Configured 'dist' target")
endif()
configure_file(cmake/uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/proj_uninstall.cmake @ONLY)
add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/proj_uninstall.cmake)
message(STATUS "EMBED_RESOURCE_FILES=${EMBED_RESOURCE_FILES}")
+4 -5
View File
@@ -55,7 +55,7 @@ a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at [kristianevers@gmail.com](mailto:kristianevers@gmail.com). All
reported by contacting the project team at <kristianevers@gmail.com>. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
@@ -68,10 +68,9 @@ members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
available at <https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
<https://www.contributor-covenant.org/faq>
[homepage]: https://www.contributor-covenant.org
+6 -6
View File
@@ -18,6 +18,7 @@ account. Familiarity with [issues](https://guides.github.com/features/issues/) a
the [GitHub Flow](https://guides.github.com/introduction/flow/) is an advantage.
## Help a fellow PROJ user
The main forum for support for PROJ is the mailing list. You can subscribe to
the mailing list [here](http://lists.osgeo.org/mailman/listinfo/proj) and read
the archive [here](http://lists.osgeo.org/pipermail/proj/).
@@ -76,12 +77,12 @@ on GitHub.
If you intend to document one of PROJ's supported projections please use the
[Mercator projection](https://proj.org/operations/projections/merc.html) as a template.
## Code contributions
See [Code Contributions](https://proj.org/community/code_contributions.html)
#### Legalese
### Legalese
Committers are the front line gatekeepers to keep the code base clear of improperly contributed code.
It is important to the PROJ users, developers and the OSGeo foundation to avoid contributing any
code to the project without it being clearly licensed under the project license.
@@ -122,7 +123,6 @@ improperly contributing code to the source repository:
* If there is uncertainty about whether a change is proper to contribute to the code base, please
seek more information from the project steering committee, or the foundation legal counsel.
## Additional Resources
* [General GitHub documentation](https://help.github.com/)
@@ -130,6 +130,6 @@ improperly contributing code to the source repository:
## Acknowledgements
The _code contribution_ section of this CONTRIBUTING file is inspired by
[PDAL's](https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md) and the _legalese_ section is
modified from [GDAL committer guidelines](https://trac.osgeo.org/gdal/wiki/rfc3_commiters)
The [code contribution](#Code Contributions) section of this CONTRIBUTING file is inspired by
[PDAL's](https://github.com/PDAL/PDAL/blob/master/CONTRIBUTING.md) and the [legalese](#legalese)
section is modified from [GDAL committer guidelines](https://trac.osgeo.org/gdal/wiki/rfc3_commiters)
+6 -6
View File
@@ -40,7 +40,7 @@
2015-07-27 Even Rouault <even.rouault@spatialys.com>
* : Remove setlocale() use in pj_init_ctx(), and replace uses of atof() &
strtod() by their locale safe variants pj_atof() and pj_strtod().
Proj versions from now advertize #define PJ_LOCALE_SAFE 1 in proj_api.h
Proj versions from now advertise #define PJ_LOCALE_SAFE 1 in proj_api.h
and export pj_atof() & pj_strtod() (#226)
2015-06-01 Charles Karney <https://github.com/cffk>
@@ -1491,7 +1491,7 @@ Rel. 4.4.4 2001/09/15
2001-05-14 Frank Warmerdam <warmerdam@pobox.com>
* upraded config.sub and config.guess as per debian bug report 97374.
* upgraded config.sub and config.guess as per debian bug report 97374.
Rel. 4.4.3 2001/04/20
-------------------------------------------------------------------------
@@ -1714,7 +1714,7 @@ Rel. 4.3.1 94/2/16 Base-line
-------------------------------------------------------------------------
94/6/2
Transverse Mercator, spherical inverse fixed. Misplaced parenthsis.
Transverse Mercator, spherical inverse fixed. Misplaced parenthesis.
94/10/5
Dropped dependency on FILENAME_MAX---too poorly defined in both
@@ -1756,14 +1756,14 @@ Rel. 4.3 94/2/16 Base-line
Added SPECIAL entry to conics Lambert, Albers and Equidistant.
Corrected nad/install.in test so as to only look for conus.lla.Z
as test for installation of NADCON datum matricies.
as test for installation of NADCON datum matrices.
94/3/19
Problems with MAPGEN's mapdef choking on call to proj. Fixed
with PROJ.4.3-patch-01.
94/3/22
Bumb mode of handling memory allocation for 2D arrays, so that
Bump mode of handling memory allocation for 2D arrays, so that
execution of -L may not work on some systems. Interim corrections
distributed with PROJ.4.3-patch-02.
@@ -1937,7 +1937,7 @@ Rel. 4.1.1 93/3/26 Base-line
pj_strerrno prototype added to projects.h
DOS option in strtod.c for MS C's lack of standard macros in neaders.
DOS option in strtod.c for MS C's lack of standard macros in headers.
Rel. 4.1 93/3/8 Base-line --- @(#)CHANGE-LOG 4.14 95/09/23 GIE REL
-------------------------------------------------------------------------
+22 -29
View File
@@ -1,52 +1,45 @@
##
# OSGeo/PROJ
FROM ubuntu:20.04 as builder
FROM ubuntu:24.04 AS builder
MAINTAINER Howard Butler <howard@hobu.co>
LABEL maintainer="Howard Butler <howard@hobu.co>"
ARG DESTDIR="/build"
# Setup build env
RUN apt-get update -y \
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --fix-missing --no-install-recommends \
software-properties-common build-essential ca-certificates \
cmake wget unzip \
zlib1g-dev libsqlite3-dev sqlite3 libcurl4-gnutls-dev \
libtiff5-dev
software-properties-common build-essential ca-certificates \
cmake wget unzip \
zlib1g-dev libsqlite3-dev sqlite3 libcurl4-gnutls-dev \
libtiff-dev \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
COPY . /PROJ
RUN cd /PROJ \
&& mkdir build \
&& cd build \
&& cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF \
&& make -j$(nproc) \
&& make install
RUN cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -S /PROJ -B _build
RUN cmake --build _build -j $(nproc)
RUN cmake --install _build
RUN rm -rfv _build
FROM ubuntu:20.04 as runner
FROM ubuntu:24.04 AS runner
RUN date
RUN apt-get update; \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
libsqlite3-0 libtiff5 libcurl4 libcurl3-gnutls \
wget ca-certificates
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
libsqlite3-0 libtiff6 libcurl4 libcurl3-gnutls \
wget ca-certificates \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Put this first as this is rarely changing
RUN \
mkdir -p /usr/share/proj; \
wget --no-verbose --mirror https://cdn.proj.org/; \
rm -f cdn.proj.org/*.js; \
rm -f cdn.proj.org/*.css; \
mv cdn.proj.org/* /usr/share/proj/; \
rmdir cdn.proj.org
WORKDIR /usr/share/proj
RUN wget --no-verbose --mirror https://cdn.proj.org/ || true
RUN cd cdn.proj.org && rm -fv *.js *.css *.html favicon* && mv * .. && cd .. && rmdir cdn.proj.org
WORKDIR /
COPY --from=builder /build/usr/share/proj/ /usr/share/proj/
COPY --from=builder /build/usr/include/ /usr/include/
COPY --from=builder /build/usr/bin/ /usr/bin/
COPY --from=builder /build/usr/lib/ /usr/lib/
+3 -51
View File
@@ -766,7 +766,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = src/iso19111 src/iso19111/operation include/proj src/proj.h src/proj_experimental.h src/general_doc.dox src/filemanager.cpp src/networkfilemanager.cpp src/4D_api.cpp
INPUT = src/iso19111 src/iso19111/operation include/proj src/proj.h src/proj_experimental.h src/general_doc.dox src/filemanager.cpp src/networkfilemanager.cpp src/coordinates.cpp src/trans_bounds.cpp
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@@ -1161,15 +1161,6 @@ HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to YES can help to show when doxygen was last run and thus if the
# documentation is up to date.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
@@ -1440,17 +1431,6 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# http://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
@@ -2030,7 +2010,8 @@ PREDEFINED = DOXYGEN_ENABLED \
PROJ_OPAQUE_PRIVATE_DATA= \
PROJ_PRIVATE=private \
PROJ_PURE_DECL= \
noexceptoverride="noexcept override"
noexceptoverride="noexcept override" \
PROJ_NO_RETURN=
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
@@ -2150,23 +2131,6 @@ HAVE_DOT = YES
DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen
# generates you can specify the font name using DOT_FONTNAME. You need to make
# sure dot is able to find the font, which can be done by putting it in a
# standard location or by setting the DOTFONTPATH environment variable or by
# setting DOT_FONTPATH to the directory containing the font.
# The default value is: Helvetica.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTNAME = Helvetica
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
# dot graphs.
# Minimum value: 4, maximum value: 24, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTSIZE = 10
# By default doxygen will tell dot to use the default font as specified with
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
# the path where dot can find it using this tag.
@@ -2376,18 +2340,6 @@ DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not seem
# to support this out of the box.
#
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+74 -95
View File
@@ -1,5 +1,4 @@
Preparing a PROJ Release
===============================================================================
# Preparing a PROJ Release
Preparing a PROJ release is a three-step process. Before the actual release is
published we want to issue one or more release candidates to ensure that the
@@ -10,8 +9,7 @@ released code and code still in development.
The three phases are described below.
1 Release candidate
===============================================================================
## 1 Release candidate
At least one release candidate is necessary before the final release is
published. In case more than one release candidate is needed most steps below
@@ -27,79 +25,64 @@ When a release candidate has not prompted any request for changes in 48 hours,
a motion for promotion to final release should be issued on the PROJ mailing
list. The PROJ PSC guidelines describes the rules for passing a motion.
1.1 Update ABI version numbers:
-------------------------------------------------------------------------------
### 1.1 Update ABI version numbers
In case of a un-planned maintenance release, make sure that version numbers are
properly updated: see 3.1
For each release version, increment PROJ_SOVERSION in CMakeLists.txt if the
ABI is not backwards compatible, i.e. any interfaces have been removed, or
For each release version, increment PROJ_SOVERSION in CMakeLists.txt if the
ABI is not backwards compatible, i.e. any interfaces have been removed, or
changed since the last release. See also:
https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B
<https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C%2B%2B>
*Commit the changes to master.*
1.2 Update man pages
-------------------------------------------------------------------------------
### 1.2 Update man pages
Man pages are (mostly) automatically generated from the Sphinx docs. Follow
these steps:
- Temporarily update `version` and `data_version` in `docs/source/conf.py`
- run `scripts/update_man.sh`
- Revert version number in `docs/source/conf.py`
- Temporarily update `version` and `data_version` in `docs/source/conf.py`
- run `scripts/update_man.sh`
- Revert version number in `docs/source/conf.py`
The `update_man.sh` script builds the man pages and commits the update man pages
to master.
### 1.3 Write release notes
1.3 Write release notes
-------------------------------------------------------------------------------
Update `NEWS` with descriptions of the changes since the last release.
Update `NEWS.md` with descriptions of the changes since the last release.
Hopefully issues and pull requests that go into the new release have been
properly tagged with the milestone for the current release.
End the section by thanking the authors that contributed to the release. Get a
sorted list of contributors in descending order of activity:
```
git shortlog -sn x.y.z..HEAD | tac | awk '{$1=""; print $0}'
```
where `x.y.z` is the tag of the previous release. You may need to edit the list
slightly since not all authors has properly configured their names in git.
`scripts/releasenotes.py` can be used to create a first draft of the release
notes.
*Commit the changes to master.*
### 1.4 Update `CITATION.cff` and `CITATION`
1.4 Update `CITATION`
-------------------------------------------------------------------------------
Update the "version" and "date-released" fields in `CITATION.cff`. The
"doi" does not need to be updated.
If needed, update the year in `CITATION`.
If needed, update the two instances of year in `CITATION`.
*Commit the changes to master.*
1.5 Update `PROJ_DATA.VERSION`
-------------------------------------------------------------------------------
### 1.5 Update `PROJ_DATA.VERSION`
If the database references data from an updated PROJ-data package, update
`PROJ_DATA.VERSION` in `data/sql/metadata.sql`.
*Commit the changes to master.*
1.6 Create maintenance branch
-------------------------------------------------------------------------------
### 1.6 Create maintenance branch
*Skip this step if you are preparing a patch release or RC2 and later.*
Create the branch:
```
```sh
git branch x.y
```
@@ -109,14 +92,12 @@ subsequently cherry-picked to the maintenance branch.
*Push branch upstream.*
1.7 Prepare and upload archives
-------------------------------------------------------------------------------
### 1.7 Prepare and upload archives
Checkout the GitHub repo to an isolated local directory to package files only
tracked in git. Then, run CMake and build source distributions:
```
```sh
BRANCH_NAME=master
git clone --depth 1 --branch $BRANCH_NAME \
https://github.com/OSGeo/PROJ.git PROJ-$BRANCH_NAME
@@ -128,7 +109,7 @@ cmake --build . --target dist
Rename the archives and generate MD5 sum files:
```
```sh
mv proj-x.y.z.tar.gz proj-x.y.zRCn.tar.gz
mv proj-x.y.z.zip proj-x.y.zRCn.zip
md5 proj-x.y.zRCn.tar.gz > proj-x.y.zRCn.tar.gz.md5
@@ -137,114 +118,112 @@ md5 proj-x.y.zRCn.zip > proj-x.y.zRCn.zip.md5
Upload to the OSGeo download server:
```
```sh
scp proj-x.y.zRCn.* warmerdam@upload.osgeo.org:/osgeo/download/proj
```
Adjust version numbers and usernames accordingly.
1.8 Announce the release candidate
-------------------------------------------------------------------------------
### 1.8 Announce the release candidate
Announce the release candidate on the PROJ mailing list.
1.9 Promotion to final release
-------------------------------------------------------------------------------
### 1.9 Promotion to final release
When you are confident that the latest release candidate is ready for promotion
to final release a motion for promotion should be issued on the PROJ mailing
list. Allow for a minimum of 48 hours for voting time.
2 Final release
===============================================================================
## 2 Final release
Barring a successful promotion process we can proceed with the final release.
2.1 Prepare and upload archives
-------------------------------------------------------------------------------
### 2.1 Prepare and upload archives
See step 1.6 above. Do not rename the archives with RC postfixes.
2.2 Update website
------------------------------------------------------------------------------
- Add the release notes from `NEWS` to `docs/source/news.rst`
### 2.2 Update the STABLE_BRANCH repository variable
These vim substitutions are helpfull when converting NEWS to rst:
Go to https://github.com/OSGeo/PROJ/settings/variables/actions/STABLE_BRANCH
and update the value to be x.y
:s!(\#\(\d\{4}\))!(`\#\1 <https://github.com/OSGeo/PROJ/issues/\1>`_)!
:s/^o/*/
### 2.3 Update website
- Update download links in `docs/source/download.rst`
- Update `$TRAVIS_BRANCH` in `travis\after_success.sh` to new maintenance
branch.
- Add the release notes from `NEWS.md` to `docs/source/news.rst`
These vim substitutions are helpful when converting NEWS.md to rst:
```sh
:s!(\#\(\d\{4}\))!(`\#\1 <https://github.com/OSGeo/PROJ/issues/\1>`_)!
```
- Update download links in `docs/source/download.rst`
*Commit the changes to master and cherry-pick into maintenance branch.*
When pushed upstream the website will be update to the current version.
2.3 Tag the release
-------------------------------------------------------------------------------
### 2.4 Tag the release
Tag the release with:
```
```sh
git tag -a -m "Create tag x.y.z" x.y.z
git push --tags
```
2.4 Prepare the release on GitHub
-------------------------------------------------------------------------------
### 2.5 Check the GitHub Zeonodo integration
Go to https://zenodo.org/account/settings/github/ and check that the OSGeo/PROJ
repository is ON so that the creation of the GitHub release triggers the
creation of a corresponding Zenodo record.
### 2.6 Prepare the release on GitHub
When the new tag is pushed upstream GitHub picks up that a new release has been
issued. Update the new release on https://github.com/OSGeo/PROJ/releases with
the release notes from `NEWS` and add the prepared source distribution archives
issued. Update the new release on <https://github.com/OSGeo/PROJ/releases> with
the release notes from `NEWS.md` and add the prepared source distribution archives
to the release (otherwise GitHub will just package the entire repository - we
don't want that).
2.5 Announce the new release
-------------------------------------------------------------------------------
### 2.7 Announce the new release
The release should be announced on PROJ and MetaCRS mailing lists. Additionally
the release announcement should be sent to news_item@osgeo.org which will add
the release announcement should be sent to <news_item@osgeo.org> which will add
the announcement to osgeo.org and other OSGeo communication channels.
Make some noise on Twitter and other relevant social media.
Make some noise on relevant social media.
## 3 Post final release
3 Post final release
===============================================================================
3.1 Update version numbers
-------------------------------------------------------------------------------
### 3.1 Update version numbers
PROJ uses [semantic versioning](http://semver.org/). Depending on the changes
in the release will be either a major, minor or patch release. Update the
version numbers in the files.
- src/proj.h: Update PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR and
PROJ_VERSION_PATCH.
- src/release.cpp: Update date to the scheduled release date.
- CMakeLists.txt: Update proj_version()
- docs/source/conf.py: Update version number
- src/proj.h: Update PROJ_VERSION_MAJOR, PROJ_VERSION_MINOR and
PROJ_VERSION_PATCH.
- src/release.cpp: Update date to the scheduled release date.
- CMakeLists.txt: Update proj_version()
- docs/source/conf.py: Update version number
*Commit changes. Either to master or maintenance branch depending on the nature
of the release.*
3.2 Disable website deployment when releasing a new non-bugfix version
-------------------------------------------------------------------------------
### 3.2 Documentation
If the previous active version was, let's say, 6.1 and the new version is, let's say, 6.2,
then checkout 6.1 branch, and in travis/after_success.sh, remove the code
that causes commits to 6.1 to cause a website refresh, that is remove the
code under `if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "6.1"; then`.
Edit the Sphinx configuration docs/source/conf.py with these changes:
Also edit docs/source/conf.py to change the active branch for documentation
in the `github_version` variable.
- Set "version" to the major project version, e.g. "9.2"
- Set "release" to the full project version, e.g. "9.2.1"
- Set "data_version" to the PROJ-data version
- Set "today_date = date(Y, M, D)" using the release date
- set "github_version" to the maintenance branch label, e.g. "9.2"
HTML and PDF documentation is built using ReadTheDocs, which supports multiple
versions. Versions are based on branch labels, e.g. "9.2". To modify settings,
registered users must first log in. To add a version, go to
<https://readthedocs.org/projects/osgeo-proj/versions/> and click "Activate"
next to the maintenance branch label.
+9 -175
View File
@@ -1,182 +1,16 @@
Basic Installation
==================
These are generic installation instructions.
These are generic installation instructions. See details online at
https://proj.org/install.html
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
PROJ can be built using a modern C/C++ compiler with CMake. From the source
directory, use the following commands to configure, build and install PROJ:
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
mkdir build
cd build
cmake ..
cmake --build .
cmake --build . --target install
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c99 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.
-2701
View File
File diff suppressed because it is too large. Load diff
+3304
View File
File diff suppressed because it is too large. Load diff
+9 -13
View File
@@ -1,15 +1,11 @@
# PROJ
[![Travis Status](https://travis-ci.com/OSGeo/PROJ.svg?branch=master)](https://travis-ci.com/OSGeo/PROJ)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/github/OSGeo/PROJ?branch=master&svg=true)](https://ci.appveyor.com/project/OSGeo/PROJ?branch=master)
[![Docker build Status](https://img.shields.io/docker/cloud/build/osgeo/proj)](https://hub.docker.com/r/osgeo/proj/builds)
[![Coveralls Status](https://coveralls.io/repos/github/OSGeo/PROJ/badge.svg?branch=master)](https://coveralls.io/github/OSGeo/PROJ?branch=master)
[![CodeQL](https://github.com/OSGeo/PROJ/actions/workflows/codeql.yml/badge.svg)](https://github.com/OSGeo/PROJ/actions/workflows/codeql.yml)
[![Gitter](https://badges.gitter.im/OSGeo/proj.4.svg)](https://gitter.im/OSGeo/proj.4)
[![Mailing List](https://img.shields.io/badge/PROJ-mailing%20list-4eb899.svg)](http://lists.osgeo.org/mailman/listinfo/proj)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v1.4%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md)
<!-- [![Cirrus Status](https://img.shields.io/cirrus/github/OSGeo/PROJ)](https://cirrus-ci.com/github/OSGeo/PROJ/master) -->
[![Release](https://img.shields.io/github/v/release/OSGeo/PROJ)](https://github.com/OSGeo/PROJ/releases)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5884394.svg)](https://doi.org/10.5281/zenodo.5884394)
PROJ is a generic coordinate transformation software, that transforms
@@ -18,13 +14,13 @@ This includes cartographic projections as well as geodetic transformations.
For more information on the PROJ project please see the web page at:
https://proj.org/
<https://proj.org/>
The PROJ mailing list can be found at:
https://lists.osgeo.org/mailman/listinfo/proj/
<https://lists.osgeo.org/mailman/listinfo/proj/>
See the NEWS file for changes between versions.
See the NEWS.md file for changes between versions.
The following command line utilities are included in the PROJ package:
@@ -71,11 +67,11 @@ be changed to a different directory. On Windows you have to define
As an alternative to installing the data package on the local system,
the resource files can be retrieved on-the-fly from the
[PROJ CDN](https://cdn.proj.org/). A [network-enabled](https://proj.org/usage/network.html) PROJ build, will
automatically fetch resource files that are not present locally from the
CDN.
[PROJ CDN](https://cdn.proj.org/).
A [network-enabled](https://proj.org/usage/network.html) PROJ build, will
automatically fetch resource files that are not present locally from the CDN.
## Citing PROJ in publications
See [CITATION](CITATION)
+2 -2
View File
@@ -31,10 +31,10 @@ build_script:
# The checkout of a precise sha1 for VS2015 is a workaround for https://github.com/microsoft/vcpkg/issues/11666
- if not exist %VCPKG_INSTALLED%\bin (
cd "%VCPKG_ROOT%" &
git fetch --depth=1 origin 2022.04.12 &
git fetch --depth=1 origin 2023.04.15 &
(if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" (git -c advice.detachedHead=false checkout FETCH_HEAD)) &
.\bootstrap-vcpkg.bat -disableMetrics &
vcpkg install curl sqlite3[core,tool] tiff &
vcpkg install sqlite3[core,tool] tiff curl --triplet=%platform%-windows &
cd %APPVEYOR_BUILD_FOLDER%
)
- dir %VCPKG_INSTALLED%\bin
-7
View File
@@ -82,13 +82,6 @@ else ()
set (MSVC_TOOLSET_VERSION 0)
set (MSVC_TOOLSET_MAJOR 0)
endif ()
if (CMAKE_CROSSCOMPILING)
# Ensure that all "true" (resp. "false") settings are represented by
# the same string.
set (CMAKE_CROSSCOMPILING_STR "ON")
else ()
set (CMAKE_CROSSCOMPILING_STR "OFF")
endif ()
# If this is a regular build (PROJECT_SOURCE_DIR == CMAKE_SOURCE_DIR), export legacy files by default
# Otherwise, this is embedded in another project, only export PROJ target
-2
View File
@@ -7,8 +7,6 @@
# Add "include(Ccache)" to CMakeLists.txt and enable
# using the option -D USE_CCACHE=ON
cmake_minimum_required(VERSION 3.4)
option(USE_CCACHE
"Use ccache (or clcache for MSVC) to compile C/C++ objects" OFF)
+99
View File
@@ -0,0 +1,99 @@
# Derived from https://gitlab.com/jhamberg/cmake-examples/-/blob/master/cmake/FileEmbed.cmake
# MIT licensed
# Copyright (c) 2022 Jonathan Hamberg
function(FileEmbedSetup)
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}file_embed)
endif ()
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c "")
endif ()
add_library(file_embed ${CMAKE_CURRENT_BINARY_DIR}/file_embed/file_embed_empty.c)
target_include_directories(file_embed PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/file_embed)
endfunction()
function(FileEmbedAdd file)
FileEmbedGenerate(${file} var)
target_sources(file_embed PUBLIC ${var})
add_custom_command(
OUTPUT ${var}
COMMAND ${CMAKE_COMMAND}
-DRUN_FILE_EMBED_GENERATE=1
"-DFILE_EMBED_GENERATE_PATH=${file}"
-P ${PROJECT_SOURCE_DIR}/cmake/FileEmbed.cmake
MAIN_DEPENDENCY ${file}
)
endfunction()
function(FileEmbedGenerate file generated_c)
get_filename_component(base_filename ${file} NAME)
set(output_filename "${base_filename}.c")
string(MAKE_C_IDENTIFIER ${base_filename} c_name)
file(READ ${file} content HEX)
string(LENGTH "${content}" size)
math(EXPR size_mult_16 "${size} - (${size} % 16)")
string(SUBSTRING "${content}" 0 ${size_mult_16} content_mult_16)
string(REGEX REPLACE
"([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])\
([A-Fa-f0-9][A-Fa-f0-9])"
"0x\\1,0x\\2,0x\\3,0x\\4,0x\\5,0x\\6,0x\\7,0x\\8,\n" SEPARATED_HEX "${content_mult_16}")
set(SEPARATED_HEX_REMAINDER "")
if (NOT ${size_mult_16} EQUAL ${size})
string(SUBSTRING "${content}" ${size_mult_16} 16 content_remainder)
string(REGEX REPLACE "([A-Fa-f0-9][A-Fa-f0-9])" "0x\\1," SEPARATED_HEX_REMAINDER "${content_remainder}")
endif()
set(output_c "${SEPARATED_HEX}${SEPARATED_HEX_REMAINDER}")
set(output_c "
#include \"${c_name}.h\"
const uint8_t ${c_name}_data[] = {
${output_c}
}\;
const unsigned ${c_name}_size = sizeof(${c_name}_data)\;
")
set(output_h "
#ifndef ${c_name}_H
#define ${c_name}_H
#include <stdint.h>
extern const uint8_t ${c_name}_data[]\;
extern const unsigned ${c_name}_size\;
#endif // ${c_name}_H
")
if (NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/file_embed)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}file_embed)
endif ()
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.c
${output_c})
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.h
${output_h})
set(${generated_c} ${CMAKE_CURRENT_BINARY_DIR}/file_embed/${c_name}.c PARENT_SCOPE)
endfunction()
if (RUN_FILE_EMBED_GENERATE)
FileEmbedGenerate(${FILE_EMBED_GENERATE_PATH} var)
endif ()
-80
View File
@@ -1,80 +0,0 @@
# Find Sqlite3
# ~~~~~~~~~~~~
# Copyright (c) 2007, Martin Dobias <wonder.sk at gmail.com>
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
# CMake module to search for Sqlite3 library
#
# If it's found it sets SQLITE3_FOUND to TRUE
# and following variables are set:
# SQLITE3_INCLUDE_DIR
# SQLITE3_LIBRARY
# SQLITE3_VERSION
# find_path and find_library normally search standard locations
# before the specified paths. To search non-standard paths first,
# FIND_* is invoked first with specified paths and NO_DEFAULT_PATH
# and then again with no specified paths to search the default
# locations. When an earlier FIND_* succeeds, subsequent FIND_*s
# searching for the same item do nothing.
# try to use framework on mac
# want clean framework path, not unix compatibility path
if(APPLE)
if(CMAKE_FIND_FRAMEWORK MATCHES "FIRST"
OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY"
OR NOT CMAKE_FIND_FRAMEWORK)
set(CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE)
set(CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE)
#find_path(SQLITE3_INCLUDE_DIR SQLite3/sqlite3.h)
find_library(SQLITE3_LIBRARY SQLite3)
if(SQLITE3_LIBRARY)
# find_path doesn't add "Headers" for a framework
set(SQLITE3_INCLUDE_DIR ${SQLITE3_LIBRARY}/Headers
CACHE PATH "Path to a file.")
endif()
set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE)
endif()
endif()
find_path(SQLITE3_INCLUDE_DIR sqlite3.h
"$ENV{LIB_DIR}/include"
"$ENV{LIB_DIR}/include/sqlite"
"$ENV{INCLUDE}"
)
find_library(SQLITE3_LIBRARY NAMES sqlite3_i sqlite3 PATHS
"$ENV{LIB_DIR}/lib"
"$ENV{LIB}/lib"
)
if(SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY)
set(SQLITE3_FOUND TRUE)
endif()
# Extract version information from the header file
if(SQLITE3_INCLUDE_DIR)
file(STRINGS ${SQLITE3_INCLUDE_DIR}/sqlite3.h _ver_line
REGEX "^#define SQLITE_VERSION *\"[0-9]+\\.[0-9]+\\.[0-9]+\""
LIMIT_COUNT 1)
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
SQLITE3_VERSION "${_ver_line}")
unset(_ver_line)
endif()
if(SQLITE3_FOUND)
if(NOT SQLITE3_FIND_QUIETLY)
message(STATUS "Found Sqlite3: ${SQLITE3_LIBRARY}")
message(STATUS "Sqlite3 version: ${SQLITE3_VERSION}")
endif()
else()
if(SQLITE3_FIND_REQUIRED)
message(FATAL_ERROR "Could not find Sqlite3")
endif()
endif()
-28
View File
@@ -1,28 +0,0 @@
#
# CMake script to modify README.md to create simpler README file
#
# This is equivalent to: fgrep -v "[!["
#
set(SourceFile "${PROJ_SOURCE_DIR}/README.md")
set(DestFile "${PROJ_SOURCE_DIR}/README")
# Below is based on https://stackoverflow.com/a/30227627
file(READ ${SourceFile} Contents)
# Set the variable "Esc" to the ASCII value 27 as a special escape value
string(ASCII 27 Esc)
# Turn the contents into a list of strings, each ending with Esc
string(REGEX REPLACE "\n" "${Esc};" ContentsAsList "${Contents}")
unset(ModifiedContents)
foreach(Line ${ContentsAsList})
if(NOT "${Line}" MATCHES "\\[!\\[")
# Swap the appended Esc character back out in favour of a line feed
string(REGEX REPLACE "${Esc}" "\n" Line ${Line})
set(ModifiedContents "${ModifiedContents}${Line}")
endif()
endforeach()
file(WRITE ${DestFile} ${ModifiedContents})
+30 -17
View File
@@ -1,28 +1,41 @@
#
# add test with sh script
# Add command-line interface tests
#
function(proj_test_set_properties TESTNAME)
set_property(TEST ${TESTNAME}
PROPERTY ENVIRONMENT
"PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES"
set(_env "PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES"
"PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests")
endfunction()
function(proj_add_test_script_sh SH_NAME BIN_USE)
if(UNIX)
get_filename_component(testname ${SH_NAME} NAME_WE)
add_test(NAME "${testname}"
WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli
COMMAND bash ${PROJ_SOURCE_DIR}/test/cli/${SH_NAME}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${${BIN_USE}}
)
proj_test_set_properties(${testname})
if(TIFF_ENABLED)
set(_env ${_env} "TIFF_ENABLED=YES")
else()
set(_env ${_env} "TIFF_ENABLED=NO")
endif()
set_property(TEST ${TESTNAME}
PROPERTY ENVIRONMENT ${_env})
endfunction()
function(proj_add_test_script_sh SH_NAME EXE_PATH)
set(testname ${SH_NAME})
add_test(NAME ${testname}
WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli
COMMAND bash ${PROJ_SOURCE_DIR}/test/cli/${SH_NAME} "${${EXE_PATH}}"
)
proj_test_set_properties(${testname})
endfunction()
function(proj_run_cli_test TESTFILE EXE_PATH)
set(testname ${TESTFILE})
add_test(NAME ${testname}
WORKING_DIRECTORY ${PROJ_BINARY_DIR}/test/cli
COMMAND ${Python_EXECUTABLE}
${PROJ_SOURCE_DIR}/test/cli/run_cli_test.py
--exe "${${EXE_PATH}}"
${PROJ_SOURCE_DIR}/test/cli/${TESTFILE}
)
proj_test_set_properties(${testname})
endfunction()
function(proj_add_gie_test TESTNAME TESTCASE)
+4 -31
View File
@@ -34,34 +34,6 @@ function(print_variable NAME)
message(STATUS "${NAME}${varpadding} = ${${NAME}}")
endfunction()
#
# Generates output name for given target depending on platform and version.
# For instance, on Windows, dynamic link libraries get ABI version suffix
# proj_X_Y.dll.
#
function(proj_target_output_name TARGET_NAME OUTPUT_NAME)
if(NOT DEFINED TARGET_NAME)
message(SEND_ERROR "Error, the variable TARGET_NAME is not defined!")
endif()
if(NOT DEFINED ${PROJECT_NAME}_VERSION)
message(SEND_ERROR
"Error, the variable ${${PROJECT_NAME}_VERSION} is not defined!")
endif()
# On Windows, ABI version is specified using binary file name suffix.
# On Unix, suffix is empty and SOVERSION is used instead.
if(WIN32)
string(LENGTH "${${PROJECT_NAME}_ABI_VERSION}" abilen)
if(abilen GREATER 0)
set(SUFFIX "_${${PROJECT_NAME}_ABI_VERSION}")
endif()
endif()
set(${OUTPUT_NAME} ${TARGET_NAME}${SUFFIX} PARENT_SCOPE)
endfunction()
#
# Configure a pkg-config file proj.pc
# See also ProjInstallPath.cmake
@@ -116,9 +88,10 @@ function(configure_proj_pc)
if(HAVE_LIBDL)
list(APPEND EXTRA_LIBS -ldl)
endif()
# Join list with a space; list(JOIN) added CMake 3.12
string(REPLACE ";" " " EXTRA_LIBS "${EXTRA_LIBS}")
string(REPLACE ";" " " EXTRA_REQUIRES "${EXTRA_REQUIRES}")
# Join lists with a space
list(JOIN EXTRA_LIBS " " EXTRA_LIBS)
list(JOIN EXTRA_REQUIRES " " EXTRA_REQUIRES)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/proj.pc.in
-11
View File
@@ -37,16 +37,5 @@ macro(proj_version)
${${PROJECT_NAME}_VERSION_MINOR}.\
${${PROJECT_NAME}_VERSION_PATCH}")
# Set ABI version string used to name binary output
# On Windows, ABI version is specified using binary file name suffix.
if(WIN32)
set(${PROJECT_NAME}_ABI_VERSION
"${${PROJECT_NAME}_VERSION_MAJOR}_\
${${PROJECT_NAME}_VERSION_MINOR}")
endif()
print_variable(${PROJECT_NAME}_VERSION)
if(WIN32)
print_variable(${PROJECT_NAME}_ABI_VERSION)
endif()
endmacro()
-17
View File
@@ -14,13 +14,6 @@ if (MSVC)
# digit.
math (EXPR MSVC_TOOLSET_MAJOR "${MSVC_TOOLSET_VERSION}/10")
endif ()
if (CMAKE_CROSSCOMPILING)
# Ensure that all "true" (resp. "false") settings are represented by
# the same string.
set (CMAKE_CROSSCOMPILING_STR "ON")
else ()
set (CMAKE_CROSSCOMPILING_STR "OFF")
endif ()
if (NOT PACKAGE_FIND_NAME STREQUAL "@PROJECT_VARIANT_NAME@")
# Check package name (in particular, because of the way cmake finds
@@ -43,16 +36,6 @@ elseif (MSVC AND NOT (
# Reject if there's a mismatch in MSVC compiler versions
set (REASON "MSVC_TOOLSET_VERSION = @MSVC_TOOLSET_VERSION@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (NOT CMAKE_CROSSCOMPILING_STR STREQUAL "@CMAKE_CROSSCOMPILING_STR@")
# Reject if there's a mismatch in ${CMAKE_CROSSCOMPILING}
set (REASON "cross-compiling = @CMAKE_CROSSCOMPILING@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (CMAKE_CROSSCOMPILING AND
NOT (CMAKE_SYSTEM_NAME STREQUAL "@CMAKE_SYSTEM_NAME@" AND
CMAKE_SYSTEM_PROCESSOR STREQUAL "@CMAKE_SYSTEM_PROCESSOR@"))
# Reject if cross-compiling and there's a mismatch in the target system
set (REASON "target = @CMAKE_SYSTEM_NAME@-@CMAKE_SYSTEM_PROCESSOR@")
set (PACKAGE_VERSION_UNSUITABLE TRUE)
elseif (PACKAGE_FIND_VERSION)
if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION)
set (PACKAGE_VERSION_EXACT TRUE)
+33 -2
View File
@@ -12,9 +12,38 @@ if(@PROJECT_VARIANT_NAME@ STREQUAL "PROJ4")
endif()
include(CMakeFindDependencyMacro)
if("@CURL_ENABLED@" STREQUAL "TRUE")
# We cannot have a find_dependency() call between cmake_policy(PUSH)/cmake_policy(POP)
# because find_dependency() issues a return() on failure, which results in
# imbalanced push/pop
# Cf https://gitlab.kitware.com/cmake/cmake/-/issues/17612
cmake_policy(PUSH)
cmake_policy(SET CMP0012 NEW)
if("@ENABLE_TIFF@")
set(PROJ_CONFIG_FIND_TIFF_DEP ON)
endif()
if("@CURL_ENABLED@")
set(PROJ_CONFIG_FIND_CURL_DEP ON)
endif()
cmake_policy(POP)
find_dependency(SQLite3)
if(DEFINED PROJ_CONFIG_FIND_TIFF_DEP)
find_dependency(TIFF)
endif()
if(DEFINED PROJ_CONFIG_FIND_CURL_DEP)
# Chainload CURL usage requirements
find_dependency(CURL)
# Target CURL::libcurl only defined since CMake 3.12
if(NOT TARGET CURL::libcurl)
add_library(CURL::libcurl INTERFACE IMPORTED)
set_target_properties(CURL::libcurl PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES "${CURL_LIBRARIES}"
)
endif()
endif()
function(set_variable_from_rel_or_absolute_path var root rel_or_abs_path)
@@ -36,7 +65,9 @@ set_variable_from_rel_or_absolute_path("@PROJECT_VARIANT_NAME@_BINARY_DIRS" "${_
set (@PROJECT_VARIANT_NAME@_LIBRARIES @PROJECT_VARIANT_NAME@::proj)
# Read in the exported definition of the library
include ("${_DIR}/@PROJECT_NAME_LOWER@-targets.cmake")
include ("${_DIR}/@PROJECT_LEGACY_LOWER@-targets.cmake")
if (@INSTALL_LEGACY_CMAKE_FILES@)
include ("${_DIR}/@PROJECT_LEGACY_LOWER@-targets.cmake")
endif()
unset (_ROOT)
unset (_DIR)
+65
View File
@@ -0,0 +1,65 @@
# install_manifest.txt is created in the top build tree, not the project one
if (NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\"")
endif()
set(uninstall_file_list "@CMAKE_BINARY_DIR@/install_manifest.txt")
if(EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt")
list(APPEND uninstall_file_list "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt")
endif()
set(dir_list)
foreach (manifest_file IN ITEMS ${uninstall_file_list})
file(READ "${manifest_file}" files)
string(REGEX REPLACE "\n$" "" files "${files}")
string(REGEX REPLACE "\n" ";" files "${files}")
list(REVERSE files)
foreach (file ${files})
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
if (IS_DIRECTORY "$ENV{DESTDIR}${file}")
list(APPEND dir_list "${file}")
elseif (EXISTS "$ENV{DESTDIR}${file}")
get_filename_component(dir "${file}" DIRECTORY)
list(APPEND dir_list "${dir}")
execute_process(
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
OUTPUT_VARIABLE rm_out
RESULT_VARIABLE rm_retval
)
if(NOT ${rm_retval} EQUAL 0)
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
endif (NOT ${rm_retval} EQUAL 0)
else ()
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
endif ()
endforeach(file)
endforeach()
while(NOT "${dir_list}" STREQUAL "")
list(REMOVE_DUPLICATES dir_list)
set(new_dir_list)
foreach (file IN ITEMS ${dir_list})
if (IS_DIRECTORY "$ENV{DESTDIR}${file}" AND "${file}" MATCHES "@CMAKE_INSTALL_PREFIX@[/\\].+")
file(GLOB file_list "$ENV{DESTDIR}${file}/*")
list(LENGTH file_list file_list_len)
# Only remove empty directories
if(file_list_len EQUAL 0)
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
execute_process(
COMMAND @CMAKE_COMMAND@ -E remove_directory "$ENV{DESTDIR}${file}"
OUTPUT_VARIABLE rm_out
RESULT_VARIABLE rm_retval
)
if(${rm_retval} EQUAL 0)
get_filename_component(upper_dir "${file}" DIRECTORY)
list(APPEND new_dir_list "${upper_dir}")
else()
message(STATUS "Problem when removing directory \"$ENV{DESTDIR}${file}\"")
endif()
endif()
endif()
endforeach()
set(dir_list "${new_dir_list}")
endwhile()
+27 -20
View File
@@ -2,21 +2,17 @@
# files containing dictionary of useful projection
#
set(CONFIG_FILES
proj.ini
)
set(PROJ_DB_CACHE_DIR "" CACHE PATH "Directory used to cache proj.db")
if(NOT IS_DIRECTORY ${PROJ_DB_CACHE_DIR})
if(NOT "${PROJ_DB_CACHE_DIR}" STREQUAL "")
message(WARNING
"PROJ_DB_CACHE_DIR (${PROJ_DB_CACHE_DIR}) not set to a directory")
set(PROJ_DB_CACHE_DIR "")
endif()
endif()
set(PROJ_DICTIONARY
world
other.extra
nad27
GL27
nad83
nad.lst
CH
ITRF2000
ITRF2008
ITRF2014
set(PROJ_INI
proj.ini
)
#
@@ -29,14 +25,18 @@ set(GRIDSHIFT_FILES ${GSB_FILES} ${GTX_FILES})
file(GLOB SCHEMA_FILES *.json)
file(GLOB GEOTIFF_FILES *.tif)
set(ALL_SQL_IN "${CMAKE_CURRENT_BINARY_DIR}/all.sql.in")
set(PROJ_DB "${CMAKE_CURRENT_BINARY_DIR}/proj.db")
include(sql_filelist.cmake)
set(PROJ_DB_SQL_EXPECTED_MD5 "f6a88a01020b8abf364ff2d27271ae60")
add_custom_command(
OUTPUT ${PROJ_DB}
COMMAND ${CMAKE_COMMAND} -E remove -f ${PROJ_DB}
COMMAND ${CMAKE_COMMAND} "-DALL_SQL_IN=${ALL_SQL_IN}" "-DEXE_SQLITE3=${EXE_SQLITE3}" "-DPROJ_DB=${PROJ_DB}" "-DPROJ_VERSION=${PROJ_VERSION}"
COMMAND ${CMAKE_COMMAND} "-DALL_SQL_IN=${ALL_SQL_IN}" "-DEXE_SQLITE3=${EXE_SQLITE3}" "-DPROJ_DB=${PROJ_DB}" "-DPROJ_VERSION=${PROJ_VERSION}" "-DPROJ_DB_CACHE_DIR=${PROJ_DB_CACHE_DIR}" "-DPROJ_DB_SQL_EXPECTED_MD5=${PROJ_DB_SQL_EXPECTED_MD5}" "-DDATA_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}"
-P "${CMAKE_CURRENT_SOURCE_DIR}/generate_proj_db.cmake"
COMMAND ${CMAKE_COMMAND} -E copy ${PROJ_DB} ${CMAKE_CURRENT_BINARY_DIR}/for_tests
DEPENDS ${SQL_FILES} "${CMAKE_CURRENT_SOURCE_DIR}/generate_proj_db.cmake"
@@ -48,7 +48,7 @@ add_custom_command(
add_custom_target(generate_proj_db ALL DEPENDS ${PROJ_DB})
if(NOT "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
foreach(FILE ${CONFIG_FILES} ${PROJ_DICTIONARY} ${GRIDSHIFT_FILES})
foreach(FILE ${PROJ_INI} ${PROJ_DICTIONARY} ${GRIDSHIFT_FILES})
configure_file(${FILE} ${FILE} COPYONLY)
endforeach()
endif()
@@ -66,7 +66,7 @@ set(DATA_FOR_TESTS
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/for_tests)
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/for_tests/tests)
foreach(FILE ${DATA_FOR_TESTS} ${CONFIG_FILES})
foreach(FILE ${DATA_FOR_TESTS} ${PROJ_INI})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_BINARY_DIR}/for_tests/${FILE} COPYONLY)
endforeach()
@@ -89,16 +89,23 @@ endforeach()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/egm96_15_downsampled.gtx ${CMAKE_CURRENT_BINARY_DIR}/for_tests/egm96_15.gtx COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/ntv2_0_downsampled.gsb ${CMAKE_CURRENT_BINARY_DIR}/for_tests/ntv2_0.gsb COPYONLY)
# test_cs2cs_datumfile has a special case
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/for_tests/dir with space")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/conus "${CMAKE_CURRENT_BINARY_DIR}/for_tests/dir with space/myconus" COPYONLY)
#
#install
#
set(ALL_DATA_FILE
${CONFIG_FILES}
${PROJ_DICTIONARY}
${GRIDSHIFT_FILES}
${PROJ_DB}
${SCHEMA_FILES}
${GEOTIFF_FILES}
)
if (NOT USE_ONLY_EMBEDDED_RESOURCE_FILES)
list(APPEND ALL_DATA_FILE ${PROJ_INI} ${PROJ_DB} ${PROJ_DICTIONARY})
endif()
install(
FILES ${ALL_DATA_FILE}
DESTINATION ${PROJ_DATA_PATH}
+2 -2
View File
@@ -42,7 +42,7 @@
<CARB> +proj=helmert +drx=0.000049 +dry=-0.001088 +drz=0.000664 +convention=position_vector
<EURA> +proj=helmert +drx=-0.000083 +dry=0.000534 +drz=0.000750 +convention=position_vector
<EURA> +proj=helmert +drx=-0.000083 +dry=-0.000534 +drz=0.000750 +convention=position_vector
<INDI> +proj=helmert +drx=0.001232 +dry=0.000303 +drz=0.001540 +convention=position_vector
@@ -75,7 +75,7 @@
<CARB_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.000049 +dry=-0.001088 +drz=0.000664 +convention=position_vector
<EURA_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000083 +dry=0.000534 +drz=0.000750 +convention=position_vector
<EURA_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=-0.000083 +dry=-0.000534 +drz=0.000750 +convention=position_vector
<INDI_T> +proj=helmert +dx=0.00041 +dy=0.00022 +dz=0.00041 +drx=0.001232 +dry=0.000303 +drz=0.001540 +convention=position_vector
+1 -1
View File
@@ -7,7 +7,7 @@
<ITRF2000> +proj=helmert +x=0.0007 +y=0.0012 +z=-0.0261 +s=0.00212 +dx=0.0001 +dy=0.0001 +dz=-0.0019 +ds=0.00011 +t_epoch=2010.0 +convention=position_vector
<ITRF97> +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +d=0.0038 +rz=0.00026 +dx0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
<ITRF97> +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
<ITRF96> +proj=helmert +x=0.0074 +y=-0.0005 +z=-0.0628 +s=0.0038 +rz=0.00026 +dx=0.0001 +dy=-0.0005 +dz=-0.0033 +ds=0.00012 +drz=0.00002 +t_epoch=2010.0 +convention=position_vector
+91
View File
@@ -0,0 +1,91 @@
# ITRF2020 params are in mm/year, PJ_helmert uses m/year
# Generated with generate_itrf2020.py from EPSG database
<ITRF2014> +proj=helmert +x=-0.0014 +y=-0.0009 +z=0.0014 +s=-0.00042 +dy=-0.0001 +dz=0.0002 +t_epoch=2015 +convention=position_vector
<ITRF2008> +proj=helmert +x=0.0002 +y=0.001 +z=0.0033 +s=-0.00029 +dy=-0.0001 +dz=0.0001 +ds=3e-05 +t_epoch=2015 +convention=position_vector
<ITRF2005> +proj=helmert +x=0.0027 +y=0.0001 +z=-0.0014 +s=0.00065 +dx=0.0003 +dy=-0.0001 +dz=0.0001 +ds=3e-05 +t_epoch=2015 +convention=position_vector
<ITRF2000> +proj=helmert +x=-0.0002 +y=0.0008 +z=-0.0342 +s=0.00225 +dx=0.0001 +dz=-0.0017 +ds=0.00011 +t_epoch=2015 +convention=position_vector
<ITRF97> +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF96> +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF94> +proj=helmert +x=0.0065 +y=-0.0039 +z=-0.0779 +rz=0.00036 +s=0.00398 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF93> +proj=helmert +x=-0.0658 +y=0.0019 +z=-0.0713 +rx=-0.00336 +ry=-0.00433 +rz=0.00075 +s=0.00447 +dx=-0.0028 +dy=-0.0002 +dz=-0.0023 +drx=-0.00011 +dry=-0.00019 +drz=7e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF92> +proj=helmert +x=0.0145 +y=-0.0019 +z=-0.0859 +rz=0.00036 +s=0.00327 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF91> +proj=helmert +x=0.0265 +y=0.0121 +z=-0.0919 +rz=0.00036 +s=0.00467 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF90> +proj=helmert +x=0.0245 +y=0.0081 +z=-0.1079 +rz=0.00036 +s=0.00497 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF89> +proj=helmert +x=0.0295 +y=0.0321 +z=-0.1459 +rz=0.00036 +s=0.00837 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
<ITRF88> +proj=helmert +x=0.0245 +y=-0.0039 +z=-0.1699 +rx=0.0001 +rz=0.00036 +s=0.01147 +dx=0.0001 +dy=-0.0006 +dz=-0.0031 +drz=2e-05 +ds=0.00012 +t_epoch=2015 +convention=position_vector
# ITRF2020 Plate Motion Model parameters
#
# As described in https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2023GL106373
# (and also in https://itrf.ign.fr/docs/solutions/itrf2020/ITRF2020-PMM.dat, but with
# different units)
<AMUR> +proj=helmert +drx=-0.000131 +dry=-0.000551 +drz=0.000837 +convention=position_vector
<ANTA> +proj=helmert +drx=-0.000269 +dry=-0.000312 +drz=0.000678 +convention=position_vector
<ARAB> +proj=helmert +drx=0.001129 +dry=-0.000146 +drz=0.001438 +convention=position_vector
<AUST> +proj=helmert +drx=0.001487 +dry=0.001175 +drz=0.001223 +convention=position_vector
<CARB> +proj=helmert +drx=0.000207 +dry=-0.001422 +drz=0.000726 +convention=position_vector
<EURA> +proj=helmert +drx=-0.000085 +dry=-0.000519 +drz=0.000753 +convention=position_vector
<INDI> +proj=helmert +drx=0.001137 +dry=0.000013 +drz=0.001444 +convention=position_vector
<NAZC> +proj=helmert +drx=-0.000327 +dry=-0.001561 +drz=0.001605 +convention=position_vector
<NOAM> +proj=helmert +drx=0.000045 +dry=-0.000666 +drz=-0.000098 +convention=position_vector
<NUBI> +proj=helmert +drx=0.000090 +dry=-0.000585 +drz=0.000717 +convention=position_vector
<PCFC> +proj=helmert +drx=-0.000404 +dry=0.001021 +drz=-0.002154 +convention=position_vector
<SOAM> +proj=helmert +drx=-0.000261 +dry=-0.000282 +drz=-0.000157 +convention=position_vector
<SOMA> +proj=helmert +drx=-0.000081 +dry=-0.000719 +drz=0.000864 +convention=position_vector
# Plate names suffixed by _T (for Translation) that includes the translation
# rates +dx=0.00037 +dy=0.00035 +dz=0.00074 given by Table 2 of the ITRF2020 plate motion model
# paper
<AMUR_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000131 +dry=-0.000551 +drz=0.000837 +convention=position_vector
<ANTA_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000269 +dry=-0.000312 +drz=0.000678 +convention=position_vector
<ARAB_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001129 +dry=-0.000146 +drz=0.001438 +convention=position_vector
<AUST_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001487 +dry=0.001175 +drz=0.001223 +convention=position_vector
<CARB_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000207 +dry=-0.001422 +drz=0.000726 +convention=position_vector
<EURA_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000085 +dry=-0.000519 +drz=0.000753 +convention=position_vector
<INDI_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.001137 +dry=0.000013 +drz=0.001444 +convention=position_vector
<NAZC_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000327 +dry=-0.001561 +drz=0.001605 +convention=position_vector
<NOAM_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000045 +dry=-0.000666 +drz=-0.000098 +convention=position_vector
<NUBI_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=0.000090 +dry=-0.000585 +drz=0.000717 +convention=position_vector
<PCFC_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000404 +dry=0.001021 +drz=-0.002154 +convention=position_vector
<SOAM_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000261 +dry=-0.000282 +drz=-0.000157 +convention=position_vector
<SOMA_T> +proj=helmert +dx=0.00037 +dy=0.00035 +dz=0.00074 +drx=-0.000081 +dry=-0.000719 +drz=0.000864 +convention=position_vector
+73 -14
View File
@@ -3,21 +3,80 @@ function(cat IN_FILE OUT_FILE)
file(APPEND ${OUT_FILE} "${CONTENTS}")
endfunction()
file(WRITE "${ALL_SQL_IN}" "")
include(sql_filelist.cmake)
foreach(SQL_FILE ${SQL_FILES})
cat(${SQL_FILE} "${ALL_SQL_IN}")
endforeach()
# Generates a all.sql.in file from all the individual .sql files, taking
# into account if extra validation checks must be done before inserting data
# records
function(generate_all_sql_in ALL_SQL_IN_FILENAME EXTRA_VALIDATION OUT_MD5)
set(PROJ_DB_EXTRA_VALIDATION ${EXTRA_VALIDATION})
file(WRITE "${ALL_SQL_IN_FILENAME}" "")
include(sql_filelist.cmake)
foreach(SQL_FILE ${SQL_FILES})
cat(${SQL_FILE} "${ALL_SQL_IN_FILENAME}")
endforeach()
# Do ${PROJ_VERSION} substitution
file(READ ${ALL_SQL_IN} CONTENTS)
string(REPLACE "\${PROJ_VERSION}" "${PROJ_VERSION}" CONTENTS_MOD "${CONTENTS}")
file(WRITE "${ALL_SQL_IN}" "${CONTENTS_MOD}")
# Compute the MD5 before any records in the metadata table, to avoid
# refreshing the MD5 if we bump PROJ_VERSION or PROJ_DATA.VERSION
file(READ ${ALL_SQL_IN_FILENAME} CONTENTS)
string(REGEX REPLACE "INSERT INTO \\\"metadata\\\"[^\n]*\n?" "" CONTENTS_WITHOUT_METADATA "${CONTENTS}")
string(MD5 OUT_MD5_LOCAL "${CONTENTS_WITHOUT_METADATA}")
set(${OUT_MD5} "${OUT_MD5_LOCAL}" PARENT_SCOPE)
execute_process(COMMAND "${EXE_SQLITE3}" "${PROJ_DB}"
INPUT_FILE "${ALL_SQL_IN}"
RESULT_VARIABLE STATUS)
# Do ${PROJ_VERSION} substitution
string(REPLACE "\${PROJ_VERSION}" "${PROJ_VERSION}" CONTENTS_MOD "${CONTENTS}")
file(WRITE "${ALL_SQL_IN_FILENAME}" "${CONTENTS_MOD}")
endfunction()
if(STATUS AND NOT STATUS EQUAL 0)
message(FATAL_ERROR "SQLite3 failed")
generate_all_sql_in("${ALL_SQL_IN}" OFF PROJ_DB_SQL_MD5)
file(WRITE "${DATA_BINARY_DIR}/PROJ_DB_SQL_MD5.h" "const char* PROJ_DB_SQL_MD5=\"${PROJ_DB_SQL_MD5}\";\n")
if (NOT "${PROJ_DB_SQL_MD5}" STREQUAL "${PROJ_DB_SQL_EXPECTED_MD5}")
message(WARNING "all.sql.in content has changed. Running extra validation checks when building proj.db...")
set(ALL_SQL_IN_EXTRA_VALIDATION "${ALL_SQL_IN}.extra_validation")
generate_all_sql_in("${ALL_SQL_IN_EXTRA_VALIDATION}" ON PROJ_DB_SQL_EXTRA_VALIDATION_MD5)
set(PROJ_DB_EXTRA_VALIDATION_FILENAME "${PROJ_DB}.extra_validation")
file(REMOVE "${PROJ_DB_EXTRA_VALIDATION_FILENAME}")
execute_process(COMMAND "${EXE_SQLITE3}" "${PROJ_DB_EXTRA_VALIDATION_FILENAME}"
INPUT_FILE "${ALL_SQL_IN_EXTRA_VALIDATION}"
RESULT_VARIABLE STATUS)
if(STATUS AND NOT STATUS EQUAL 0)
message(FATAL_ERROR "Build of proj.db from ${ALL_SQL_IN_EXTRA_VALIDATION} failed")
else()
message(FATAL_ERROR "Update 'set(PROJ_DB_SQL_EXPECTED_MD5 ...)' line in data/CMakeLists.txt with ${PROJ_DB_SQL_MD5} value")
endif()
endif()
set(generate_proj_db ON)
if(IS_DIRECTORY ${PROJ_DB_CACHE_DIR})
set(USE_PROJ_DB_CACHE_DIR TRUE)
set(PROJ_DB_SQL_MD5_FILE "${PROJ_DB_CACHE_DIR}/proj.db.sql.md5")
if(EXISTS "${PROJ_DB_SQL_MD5_FILE}")
file(STRINGS "${PROJ_DB_SQL_MD5_FILE}" CACHED_PROJ_DB_SQL_MD5 LIMIT_COUNT 1)
endif()
file(MD5 "${ALL_SQL_IN}" PROJ_DB_SQL_MD5)
set(CACHED_PROJ_DB "${PROJ_DB_CACHE_DIR}/proj.db")
if("${PROJ_DB_SQL_MD5}" STREQUAL "${CACHED_PROJ_DB_SQL_MD5}" AND EXISTS "${CACHED_PROJ_DB}")
message(STATUS "Reusing cached proj.db from ${PROJ_DB_CACHE_DIR}")
get_filename_component(PROJ_DB_DIR "${PROJ_DB}" DIRECTORY)
file(COPY "${CACHED_PROJ_DB}" DESTINATION "${PROJ_DB_DIR}")
file(TOUCH "${PROJ_DB}")
set(generate_proj_db OFF)
endif()
endif()
if (generate_proj_db)
execute_process(COMMAND "${EXE_SQLITE3}" "${PROJ_DB}"
INPUT_FILE "${ALL_SQL_IN}"
RESULT_VARIABLE STATUS)
if(STATUS AND NOT STATUS EQUAL 0)
message(FATAL_ERROR "Build of proj.db failed")
elseif(USE_PROJ_DB_CACHE_DIR)
message(STATUS "Saving cache: ${CACHED_PROJ_DB}")
file(COPY "${PROJ_DB}" DESTINATION "${PROJ_DB_CACHE_DIR}")
file(WRITE "${PROJ_DB_SQL_MD5_FILE}" "${PROJ_DB_SQL_MD5}\n")
endif()
endif()
+32 -2
View File
@@ -4,22 +4,52 @@
; Network capabilities disabled by default.
; Can be overridden with the PROJ_NETWORK=ON environment variable.
; network = on
; Cf https://proj.org/en/latest/usage/network.html
; Valid values = on, off
network = off
; Endpoint of the Content Delivery Network where remote resources might
; be accessed. Only used if network access is allowed (cf above "network"
; option)
; Can be overridden with the PROJ_NETWORK_ENDPOINT environment variable.
cdn_endpoint = https://cdn.proj.org
; Whether to enable a cache of remote resources that are accessed, on the
; local file system
; Valid values = on, off
cache_enabled = on
; Size of the cache in megabytes
cache_size_MB = 300
; Time-to-live delay in seconds before already accessed remote resources are
; accessed again to check if they have been updated.
cache_ttl_sec = 86400
; Can be set to on so that by default the lack of a known resource files needed
; for the best transformation PROJ would normally use causes an error, or off
; to accept missing resource files without errors or warnings.
; This default value itself is overridden by the PROJ_ONLY_BEST_DEFAULT environment
; variable if set, and then by the ONLY_BEST setting that can be
; passed to the proj_create_crs_to_crs() method, or with the --only-best
; option of the cs2cs program.
; (added in PROJ 9.2)
; Valid values = on, off
only_best_default = off
; Filename of the Certificate Authority (CA) bundle.
; Can be overriden with the PROJ_CURL_CA_BUNDLE / CURL_CA_BUNDLE environment variable.
; Can be overridden with the PROJ_CURL_CA_BUNDLE / CURL_CA_BUNDLE environment variable.
; (added in PROJ 9.0)
; ca_bundle_path = /path/to/cabundle.pem
; When this is set to on, the operating systems native CA store will be used for certificate verification
; If you set this option to on and also set ca_bundle_path then during verification those certificates are
; searched in addition to the native CA store.
; (added in PROJ 9.6)
; Valid values = on, off
;native_ca = on
; Transverse Mercator (and UTM) default algorithm: auto, evenden_snyder or poder_engsager
; * evenden_snyder is the fastest, but less accurate far from central meridian
; * poder_engsager is slower, but more accurate far from central meridian
+32 -6
View File
@@ -1,8 +1,8 @@
{
"$id": "https://proj.org/schemas/v0.5/projjson.schema.json",
"$id": "https://proj.org/schemas/v0.7/projjson.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "Schema for PROJJSON (v0.5)",
"$comment": "This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And if changing the value of $id, change PROJJSON_DEFAULT_VERSION accordingly in io.cpp",
"description": "Schema for PROJJSON (v0.7)",
"$comment": "This document is copyright Even Rouault and PROJ contributors, 2019-2023, and subject to the MIT license. This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And if changing the value of $id, change PROJJSON_DEFAULT_VERSION accordingly in io.cpp",
"oneOf": [
{ "$ref": "#/definitions/crs" },
@@ -11,7 +11,8 @@
{ "$ref": "#/definitions/ellipsoid" },
{ "$ref": "#/definitions/prime_meridian" },
{ "$ref": "#/definitions/single_operation" },
{ "$ref": "#/definitions/concatenated_operation" }
{ "$ref": "#/definitions/concatenated_operation" },
{ "$ref": "#/definitions/coordinate_metadata" }
],
"definitions": {
@@ -22,6 +23,10 @@
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["AbridgedTransformation"] },
"name": { "type": "string" },
"source_crs": {
"$ref": "#/definitions/crs",
"$comment": "Only present when the source_crs of the bound_crs does not match the source_crs of the AbridgedTransformation. No equivalent in WKT"
},
"method": { "$ref": "#/definitions/method" },
"parameters": {
"type": "array",
@@ -87,6 +92,9 @@
"unspecified" ] },
"meridian": { "$ref": "#/definitions/meridian" },
"unit": { "$ref": "#/definitions/unit" },
"minimum_value": { "type": "number" },
"maximum_value": { "type": "number" },
"range_meaning": { "type": "string", "enum": [ "exact", "wraparound"] },
"id": { "$ref": "#/definitions/id" },
"ids": { "$ref": "#/definitions/ids" }
},
@@ -169,6 +177,7 @@
"type": "array",
"items": { "$ref": "#/definitions/single_operation" }
},
"accuracy": { "type": "string" },
"$schema" : {},
"scope": {},
"area": {},
@@ -204,6 +213,18 @@
"additionalProperties": false
},
"coordinate_metadata": {
"type": "object",
"properties": {
"$schema" : { "type": "string" },
"type": { "type": "string", "enum": ["CoordinateMetadata"] },
"crs": { "$ref": "#/definitions/crs" },
"coordinateEpoch": { "type": "number" }
},
"required" : [ "crs" ],
"additionalProperties": false
},
"coordinate_system": {
"type": "object",
"properties": {
@@ -217,6 +238,7 @@
"vertical",
"ordinal",
"parametric",
"affine",
"TemporalDateTime",
"TemporalCount",
"TemporalMeasure"] },
@@ -457,11 +479,12 @@
"dynamic_geodetic_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/geodetic_reference_frame" }],
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["DynamicGeodeticReferenceFrame"] },
"name": {},
"anchor": {},
"anchor_epoch": {},
"ellipsoid": {},
"prime_meridian": {},
"frame_reference_epoch": { "type": "number" },
@@ -481,11 +504,12 @@
"dynamic_vertical_reference_frame": {
"type": "object",
"allOf": [{ "$ref": "#/definitions/vertical_reference_frame" }],
"allOf": [{ "$ref": "#/definitions/object_usage" }],
"properties": {
"type": { "type": "string", "enum": ["DynamicVerticalReferenceFrame"] },
"name": {},
"anchor": {},
"anchor_epoch": {},
"frame_reference_epoch": { "type": "number" },
"$schema" : {},
"scope": {},
@@ -634,6 +658,7 @@
"type": { "type": "string", "enum": ["GeodeticReferenceFrame"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"anchor_epoch": { "type": "number" },
"ellipsoid": { "$ref": "#/definitions/ellipsoid" },
"prime_meridian": { "$ref": "#/definitions/prime_meridian" },
"$schema" : {},
@@ -1130,6 +1155,7 @@
"type": { "type": "string", "enum": ["VerticalReferenceFrame"] },
"name": { "type": "string" },
"anchor": { "type": "string" },
"anchor_epoch": { "type": "number" },
"$schema" : {},
"scope": {},
"area": {},
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

+57
View File
@@ -0,0 +1,57 @@
# Directory data/sql
## Simplified UML diagram of database classes
- [diagram.xmi](diagram.xmi): to be opened with Umbrello
- CRS related tables: ![CRS related tables](CRS.png)
- Transformation related tables: ![Transformation related tables](Transformations.png)
## Hand generated files
- [proj_db_table_defs.sql](proj_db_table_defs.sql): Database structure: CREATE TABLE / CREATE VIEW / CREATE TRIGGER.
- [metadata.sql](metadata.sql): key/value content of the metadata table.
- [begin.sql](begin.sql): Technical prologue for all concatenated files.
- [commit.sql](commit.sql): Epilogue for all concatenated files. Include consistency checks.
- [customizations_early.sql](customizations_early.sql): Customizations to be applied before EPSG generated tables.
- [customizations.sql](customizations.sql): Customizations to be applied after all geodetic registries.
- [grid_alternatives.sql](grid_alternatives.sql): Link official EPSG grid names to PROJ ones.
- [grid_transformation_custom.sql](grid_transformation_custom.sql): PROJ specific entries in grid_transformation table.
- [other_transformation_custom.sql](other_transformation_custom.sql): PROJ specific entries in other_transformation table.
## Files generated from EPSG dataset by [build_db.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db.py)
- [alias_name.sql](alias_name.sql)
- [axis.sql](axis.sql)
- [compound_crs.sql](compound_crs.sql)
- [concatenated_operation.sql](concatenated_operation.sql)
- [concatenated_operation_step.sql](concatenated_operation_step.sql)
- [conversion.sql](conversion.sql)
- [conversion_triggers.sql](conversion_triggers.sql)
- [coordinate_system.sql](coordinate_system.sql)
- [deprecation.sql](deprecation.sql)
- [ellipsoid.sql](ellipsoid.sql)
- [extent.sql](extent.sql)
- [geodetic_crs.sql](geodetic_crs.sql)
- [geodetic_datum_ensemble_member.sql](geodetic_datum_ensemble_member.sql)
- [geodetic_datum.sql](geodetic_datum.sql)
- [grid_alternatives_generated_noaa.sql](grid_alternatives_generated_noaa.sql)
- [grid_transformation.sql](grid_transformation.sql)
- [helmert_transformation.sql](helmert_transformation.sql)
- [other_transformation.sql](other_transformation.sql)
- [prime_meridian.sql](prime_meridian.sql)
- [projected_crs.sql](projected_crs.sql)
- [scope.sql](scope.sql)
- [supersession.sql](supersession.sql)
- [unit_of_measure.sql](unit_of_measure.sql)
- [vertical_crs.sql](vertical_crs.sql)
- [vertical_datum_ensemble_member.sql](vertical_datum_ensemble_member.sql)
- [vertical_datum.sql](vertical_datum.sql)
## Other registries
- [esri.sql](esri.sql): ESRI registry. Generated by [build_db_from_esri.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db_from_esri.py)
- [ignf.sql](ignf.sql): IGN France registry. Generated by [build_db_create_ignf_from_xml.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db_create_ignf_from_xml.py)
- [iau.sql](iau.sql): IAU 2015 registry. Generated by [build_db_from_iau.py](https://github.com/OSGeo/PROJ/blob/master/scripts/build_db_from_iau.py)
- [versioned_auth_name_mapping.sql](versioned_auth_name_mapping.sql): used for the IAU:2015 / IAU alias
- [nkg.sql](nkg.sql): Nordic Geodetic Commission registry. Hand-written
- [nkg_post_customizations.sql](nkg_post_customizations.sql): Registration of NKG in authority_to_authority_preference table
Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

+703 -98
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+3
View File
@@ -0,0 +1,3 @@
ANALYZE;
VACUUM;
+8 -4
View File
@@ -52,6 +52,10 @@ INSERT INTO "axis" VALUES('EPSG','1042','Local northing','n','north','EPSG','104
INSERT INTO "axis" VALUES('EPSG','1043','Local easting','e','east','EPSG','1047',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1049','Local northing','n','north','EPSG','1048',1,'EPSG','9002');
INSERT INTO "axis" VALUES('EPSG','1050','Local easting','e','east','EPSG','1048',2,'EPSG','9002');
INSERT INTO "axis" VALUES('EPSG','32933','Northing','N','north','EPSG','1053',1,'EPSG','9003');
INSERT INTO "axis" VALUES('EPSG','32934','Easting','E','east','EPSG','1053',2,'EPSG','9003');
INSERT INTO "axis" VALUES('EPSG','32935','Easting','x','east','EPSG','1054',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','32936','Northing','y','north','EPSG','1054',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1','Easting','E','east','EPSG','4400',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','2','Northing','N','north','EPSG','4400',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','3','Easting','E','east','EPSG','4401',1,'EPSG','9062');
@@ -171,10 +175,6 @@ INSERT INTO "axis" VALUES('EPSG','180','Northing','X','north','EPSG','4533',1,'E
INSERT INTO "axis" VALUES('EPSG','179','Easting','Y','east','EPSG','4533',2,'EPSG','9098');
INSERT INTO "axis" VALUES('EPSG','183','Northing','none','north','EPSG','4534',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','184','Easting','none','east','EPSG','4534',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','63','Geodetic latitude','Lat','north','EPSG','6405',1,'EPSG','9102');
INSERT INTO "axis" VALUES('EPSG','64','Geodetic longitude','Long','east','EPSG','6405',2,'EPSG','9102');
INSERT INTO "axis" VALUES('EPSG','65','Geodetic latitude','Lat','north','EPSG','6406',1,'EPSG','9116');
INSERT INTO "axis" VALUES('EPSG','66','Geodetic longitude','Long','east','EPSG','6406',2,'EPSG','9116');
INSERT INTO "axis" VALUES('EPSG','115','Geocentric X','X','geocentricX','EPSG','6500',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','116','Geocentric Y','Y','geocentricY','EPSG','6500',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','117','Geocentric Z','Z','geocentricZ','EPSG','6500',3,'EPSG','9001');
@@ -219,6 +219,10 @@ INSERT INTO "axis" VALUES('EPSG','59','Geodetic longitude','Lon','east','EPSG','
INSERT INTO "axis" VALUES('EPSG','32879','Spherical latitude','lat','north','EPSG','6404',1,'EPSG','9122');
INSERT INTO "axis" VALUES('EPSG','32880','Spherical longitude','lon','east','EPSG','6404',2,'EPSG','9122');
INSERT INTO "axis" VALUES('EPSG','32881','Geocentric radius','R','up','EPSG','6404',3,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','63','Geodetic latitude','Lat','north','EPSG','6405',1,'EPSG','9102');
INSERT INTO "axis" VALUES('EPSG','64','Geodetic longitude','Long','east','EPSG','6405',2,'EPSG','9102');
INSERT INTO "axis" VALUES('EPSG','65','Geodetic latitude','Lat','north','EPSG','6406',1,'EPSG','9116');
INSERT INTO "axis" VALUES('EPSG','66','Geodetic longitude','Long','east','EPSG','6406',2,'EPSG','9116');
INSERT INTO "axis" VALUES('EPSG','67','Geodetic latitude','Lat','north','EPSG','6407',1,'EPSG','9117');
INSERT INTO "axis" VALUES('EPSG','68','Geodetic longitude','Long','east','EPSG','6407',2,'EPSG','9117');
INSERT INTO "axis" VALUES('EPSG','69','Geodetic latitude','Lat','north','EPSG','6408',1,'EPSG','9115');
+57 -302
View File
@@ -1,3 +1,60 @@
-- Remove duplicated entries between source=EPSG and source=EPSG_OLD, as some
-- aliases get sometimes removed in a version and are re-added in a later one.
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name) IN
(SELECT table_name, auth_name, code, alt_name FROM
(SELECT count(*) AS count, table_name, auth_name, code, alt_name FROM alias_name
WHERE source in ('EPSG', 'EPSG_OLD')
GROUP BY table_name, auth_name, code, alt_name) x WHERE count > 1) AND source = 'EPSG_OLD';
-- Remove "conflicting" entries in alias_name, that is entries of EPSG_OLD whose
-- name match an entry of EPSG but with a different code
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a2.table_name, a2.auth_name, a2.code, a2.alt_name, a2.source
FROM alias_name a1 JOIN alias_name a2
WHERE a1.table_name = a2.table_name AND a1.code != a2.code AND
a1.alt_name = a2.alt_name AND
a1.source = 'EPSG' AND a2.source = 'EPSG_OLD');
-- Remove useless entries, i.e. where the official name matches the alias...
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a.table_name, a.auth_name, a.code, a.alt_name, a.source
FROM geodetic_datum d JOIN alias_name a WHERE
a.table_name = 'geodetic_datum' AND a.auth_name = d.auth_name AND
a.code = d.code AND d.name = a.alt_name);
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a.table_name, a.auth_name, a.code, a.alt_name, a.source
FROM vertical_datum d JOIN alias_name a WHERE
a.table_name = 'vertical_datum' AND a.auth_name = d.auth_name AND
a.code = d.code AND d.name = a.alt_name);
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a.table_name, a.auth_name, a.code, a.alt_name, a.source
FROM geodetic_crs c JOIN alias_name a WHERE
a.table_name = 'geodetic_crs' AND a.auth_name = c.auth_name AND
a.code = c.code AND c.name = a.alt_name);
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a.table_name, a.auth_name, a.code, a.alt_name, a.source
FROM vertical_crs c JOIN alias_name a WHERE
a.table_name = 'vertical_crs' AND a.auth_name = c.auth_name AND
a.code = c.code AND c.name = a.alt_name);
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a.table_name, a.auth_name, a.code, a.alt_name, a.source
FROM projected_crs c JOIN alias_name a WHERE
a.table_name = 'projected_crs' AND a.auth_name = c.auth_name AND
a.code = c.code AND c.name = a.alt_name);
DELETE FROM alias_name WHERE (table_name, auth_name, code, alt_name, source) IN
(SELECT a.table_name, a.auth_name, a.code, a.alt_name, a.source
FROM compound_crs c JOIN alias_name a WHERE
a.table_name = 'compound_crs' AND a.auth_name = c.auth_name AND
a.code = c.code AND c.name = a.alt_name);
COMMIT;
CREATE INDEX geodetic_crs_datum_idx ON geodetic_crs(datum_auth_name, datum_code);
@@ -11,305 +68,3 @@ CREATE INDEX concatenated_operation_idx ON concatenated_operation(source_crs_aut
-- We don't need to select by auth_name, code so nullify them to save space
UPDATE usage SET auth_name = NULL, code = NULL;
-- Final consistency checks
CREATE TABLE dummy(foo);
CREATE TRIGGER final_checks
BEFORE INSERT ON dummy
FOR EACH ROW BEGIN
-- check that view definitions have no error
SELECT RAISE(ABORT, 'corrupt definition of coordinate_operation_view')
WHERE (SELECT 1 FROM coordinate_operation_view LIMIT 1) = 0;
SELECT RAISE(ABORT, 'corrupt definition of crs_view')
WHERE (SELECT 1 FROM crs_view LIMIT 1) = 0;
SELECT RAISE(ABORT, 'corrupt definition of object_view')
WHERE (SELECT 1 FROM object_view LIMIT 1) = 0;
SELECT RAISE(ABORT, 'corrupt definition of authority_list')
WHERE (SELECT 1 FROM authority_list LIMIT 1) = 0;
-- check that a usage is registered for most objects where this is needed
SELECT RAISE(ABORT, 'One or several objects lack a corresponding record in the usage table')
WHERE EXISTS (
SELECT * FROM object_view o WHERE NOT EXISTS (
SELECT 1 FROM usage u WHERE
o.table_name = u.object_table_name AND
o.auth_name = u.object_auth_name AND
o.code = u.object_code)
AND o.table_name NOT IN ('unit_of_measure', 'axis',
'celestial_body', 'ellipsoid', 'prime_meridian', 'extent')
-- the IGNF registry lacks extent for the following objects
AND NOT (o.auth_name = 'IGNF' AND o.table_name IN ('geodetic_datum', 'vertical_datum', 'conversion'))
);
SELECT RAISE(ABORT, 'Geodetic datum ensemble defined, but no ensemble member')
WHERE EXISTS (
SELECT * FROM geodetic_datum d WHERE ensemble_accuracy IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM geodetic_datum_ensemble_member WHERE
d.auth_name = ensemble_auth_name AND d.code = ensemble_code)
);
SELECT RAISE(ABORT, 'Vertical datum ensemble defined, but no ensemble member')
WHERE EXISTS (
SELECT * FROM vertical_datum d WHERE ensemble_accuracy IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM vertical_datum_ensemble_member WHERE
d.auth_name = ensemble_auth_name AND d.code = ensemble_code)
);
SELECT RAISE(ABORT, 'PROJ defines an alias that exists in EPSG')
WHERE EXISTS (
SELECT * FROM (
SELECT count(*) AS count, table_name, auth_name, code, alt_name FROM alias_name
WHERE source in ('EPSG', 'PROJ')
AND NOT (source = 'PROJ' AND alt_name IN ('GGRS87', 'NAD27', 'NAD83'))
GROUP BY table_name, auth_name, code, alt_name) x WHERE count > 1
);
-- test to check that our custom grid transformation overrides are really needed
SELECT RAISE(ABORT, 'PROJ grid_transformation defined whereas EPSG has one')
WHERE EXISTS (SELECT 1 FROM grid_transformation g1
JOIN grid_transformation g2
ON g1.source_crs_auth_name = g2.source_crs_auth_name
AND g1.source_crs_code = g2.source_crs_code
AND g1.target_crs_auth_name = g2.target_crs_auth_name
AND g1.target_crs_code = g2.target_crs_code
WHERE g1.auth_name = 'PROJ' AND g1.code NOT LIKE '%_RESTRICTED_TO_VERTCRS%' AND g2.auth_name = 'EPSG' AND g2.deprecated = 0)
OR EXISTS (SELECT 1 FROM grid_transformation g1
JOIN grid_transformation g2
ON g1.source_crs_auth_name = g2.target_crs_auth_name
AND g1.source_crs_code = g2.target_crs_code
AND g1.target_crs_auth_name = g1.source_crs_auth_name
AND g1.target_crs_code = g1.source_crs_code
WHERE g1.auth_name = 'PROJ' AND g1.code NOT LIKE '%_RESTRICTED_TO_VERTCRS%' AND g2.auth_name = 'EPSG' AND g2.deprecated = 0);
SELECT RAISE(ABORT, 'Arg! there is now a EPSG:102100 object. Hack in createFromUserInput() will no longer work')
WHERE EXISTS(SELECT 1 FROM crs_view WHERE auth_name = 'EPSG' AND code = '102100');
-- check coordinate_operation_view "foreign keys"
SELECT RAISE(ABORT, 'One coordinate_operation has a broken source_crs link')
WHERE EXISTS (SELECT * FROM coordinate_operation_view cov WHERE
cov.source_crs_auth_name || cov.source_crs_code NOT IN
(SELECT auth_name || code FROM crs_view));
SELECT RAISE(ABORT, 'One coordinate_operation has a broken target_crs link')
WHERE EXISTS (SELECT * FROM coordinate_operation_view cov WHERE
cov.target_crs_auth_name || cov.target_crs_code NOT IN
(SELECT auth_name || code FROM crs_view));
-- check that grids with NTv2 method are properly registered
SELECT RAISE(ABORT, 'One grid_transformation with NTv2 has not its source_crs in geodetic_crs table with type = ''geographic 2D''')
WHERE EXISTS (SELECT * FROM grid_transformation g WHERE
g.method_name = 'NTv2' AND
g.source_crs_auth_name || g.source_crs_code NOT IN
(SELECT auth_name || code FROM geodetic_crs
WHERE type = 'geographic 2D'));
SELECT RAISE(ABORT, 'One grid_transformation with NTv2 has not its target_crs in geodetic_crs table with type = ''geographic 2D''')
WHERE EXISTS (SELECT * FROM grid_transformation g WHERE
g.method_name = 'NTv2' AND
g.target_crs_auth_name || g.target_crs_code NOT IN
(SELECT auth_name || code FROM geodetic_crs
WHERE type = 'geographic 2D'));
-- check that grids with Geographic3D to GravityRelatedHeight method are properly registered
SELECT RAISE(ABORT, 'One grid_transformation with Geographic3D to GravityRelatedHeight has not its target_crs in vertical_crs table')
WHERE EXISTS (SELECT * FROM grid_transformation g WHERE
g.deprecated = 0 AND
g.method_name LIKE 'Geographic3D to GravityRelatedHeight%' AND
g.target_crs_auth_name || g.target_crs_code NOT IN
(SELECT auth_name || code FROM vertical_crs));
SELECT RAISE(ABORT, 'One grid_transformation with Geographic3D to GravityRelatedHeight or Geog3D to Geog2D+XXX has not its source_crs in geodetic_crs table with type = ''geographic 3D''')
WHERE EXISTS (SELECT * FROM grid_transformation g WHERE
g.deprecated = 0 AND
(g.method_name LIKE 'Geographic3D to %' OR g.method_name LIKE 'Geog3D to %') AND
g.source_crs_auth_name || g.source_crs_code NOT IN
(SELECT auth_name || code FROM geodetic_crs
WHERE type = 'geographic 3D'));
-- check that grids with 'Vertical Offset by Grid Interpolation' methods are properly registered
SELECT RAISE(ABORT, 'One grid_transformation with Vertical Offset by Grid Interpolation has not its source_crs in vertical_crs table')
WHERE EXISTS (SELECT * FROM grid_transformation g WHERE
g.method_name LIKE 'Vertical Offset by Grid Interpolation%' AND
g.source_crs_auth_name || g.source_crs_code NOT IN
(SELECT auth_name || code FROM vertical_crs));
SELECT RAISE(ABORT, 'One grid_transformation with Vertical Offset by Grid Interpolation has not its target_crs in vertical_crs table')
WHERE EXISTS (SELECT * FROM grid_transformation g WHERE
g.method_name LIKE 'Vertical Offset by Grid Interpolation%' AND
g.target_crs_auth_name || g.target_crs_code NOT IN
(SELECT auth_name || code FROM vertical_crs));
-- check that Helmert transformations have source and target of the same nature (the fkey already checks they are geodetic_crs)
SELECT RAISE(ABORT, 'One helmert_transformation has a source CRS of a different nature than its target CRS')
WHERE EXISTS (SELECT helmert_transformation.auth_name,
helmert_transformation.code,
helmert_transformation.name,
crs1.type AS crs1_type,
crs2.type AS crs2_type
FROM helmert_transformation
JOIN geodetic_crs crs1 ON
crs1.auth_name = source_crs_auth_name AND crs1.code = source_crs_code
JOIN geodetic_crs crs2 ON
crs2.auth_name = target_crs_auth_name AND crs2.code = target_crs_code
WHERE helmert_transformation.deprecated = 0 AND crs1.type != crs2.type);
-- check that the method used by a Helmert transformation is consistent with the dimensionality of the CRS
SELECT RAISE(ABORT, 'The domain of the method of helmert_transformation is not consistent with the dimensionality of the CRS')
WHERE EXISTS (SELECT helmert_transformation.auth_name,
helmert_transformation.code,
helmert_transformation.name,
helmert_transformation.method_name,
crs.type AS crs_type
FROM helmert_transformation
JOIN geodetic_crs crs ON
crs.auth_name = source_crs_auth_name AND crs.code = source_crs_code
WHERE helmert_transformation.deprecated = 0 AND
((method_name LIKE '%geog2D domain%' AND crs.type != 'geographic 2D') OR
(method_name LIKE '%geog3D domain%' AND crs.type != 'geographic 3D') OR
(method_name LIKE '%geocentric domain%' AND crs.type != 'geocentric')));
-- check that a time-dependent Helmert transformation has its source or target CRS being dyanmic
SELECT RAISE(ABORT, 'A time-dependent Helmert transformations has its source and target CRS both non-dynamic')
WHERE EXISTS (SELECT helmert_transformation.auth_name,
helmert_transformation.code,
helmert_transformation.name
FROM helmert_transformation
JOIN geodetic_crs crs1 ON
crs1.auth_name = source_crs_auth_name AND crs1.code = source_crs_code
JOIN geodetic_crs crs2 ON
crs2.auth_name = target_crs_auth_name AND crs2.code = target_crs_code
JOIN geodetic_datum gd1 ON
gd1.auth_name = crs1.datum_auth_name AND gd1.code = crs1.datum_code
JOIN geodetic_datum gd2 ON
gd2.auth_name = crs2.datum_auth_name AND gd2.code = crs2.datum_code
WHERE helmert_transformation.deprecated = 0 AND
method_name LIKE 'Time-dependent%' AND
gd1.frame_reference_epoch IS NULL AND
gd2.frame_reference_epoch IS NULL);
-- check that transformations operations between vertical CRS are from/into a vertical CRS
SELECT RAISE(ABORT, 'A transformation operating on vertical CRS has a source CRS not being a vertical CRS')
WHERE EXISTS (SELECT other_transformation.auth_name,
other_transformation.code,
other_transformation.name
FROM other_transformation
LEFT JOIN vertical_crs crs ON
crs.auth_name = source_crs_auth_name AND crs.code = source_crs_code
WHERE other_transformation.deprecated = 0 AND
method_name IN ('Vertical Offset', 'Height Depth Reversal', 'Change of Vertical Unit') AND
crs.code IS NULL);
SELECT RAISE(ABORT, 'AA transformation operating on vertical CRS has a target CRS not being a vertical CRS')
WHERE EXISTS (SELECT other_transformation.auth_name,
other_transformation.code,
other_transformation.name
FROM other_transformation
LEFT JOIN vertical_crs crs ON
crs.auth_name = target_crs_auth_name AND crs.code = target_crs_code
WHERE other_transformation.deprecated = 0 AND
method_name IN ('Vertical Offset', 'Height Depth Reversal', 'Change of Vertical Unit') AND
crs.code IS NULL);
-- check that 'Geographic2D with Height Offsets' transformations have a compound CRS with a geog2D as source
SELECT RAISE(ABORT, 'A transformation Geographic2D with Height Offsets does not have a compound CRS with a geog2D as source')
WHERE EXISTS (SELECT other_transformation.auth_name,
other_transformation.code,
other_transformation.name
FROM other_transformation
LEFT JOIN compound_crs ccrs ON
ccrs.auth_name = source_crs_auth_name AND ccrs.code = source_crs_code
LEFT JOIN geodetic_crs gcrs ON
gcrs.auth_name = horiz_crs_auth_name AND gcrs.code = horiz_crs_code
WHERE other_transformation.deprecated = 0 AND
method_name = 'Geographic2D with Height Offsets' AND
(gcrs.code IS NULL OR gcrs.type != 'geographic 2D'));
SELECT RAISE(ABORT, 'A transformation Geographic2D with Height Offsets does not have a geographic 3D CRS as target')
WHERE EXISTS (SELECT other_transformation.auth_name,
other_transformation.code,
other_transformation.name
FROM other_transformation
LEFT JOIN geodetic_crs gcrs ON
gcrs.auth_name = target_crs_auth_name AND gcrs.code = target_crs_code
WHERE other_transformation.deprecated = 0 AND
method_name = 'Geographic2D with Height Offsets' AND
(gcrs.type IS NULL OR gcrs.type != 'geographic 3D'));
-- check that transformations intersect the area of use of their source/target CRS
-- EPSG, ESRI and IGNF have cases where this does not hold.
SELECT RAISE(ABORT, 'The area of use of at least one coordinate_operation does not intersect the one of its source CRS')
WHERE EXISTS (SELECT * FROM coordinate_operation_view v, crs_view c, usage vu, extent ve, usage cu, extent ce WHERE
v.deprecated = 0 AND
(v.table_name = 'grid_transformation' OR v.auth_name NOT IN ('EPSG', 'ESRI', 'IGNF')) AND
v.source_crs_auth_name = c.auth_name AND
v.source_crs_code = c.code AND
vu.object_table_name = v.table_name AND
vu.object_auth_name = v.auth_name AND
vu.object_code = v.code AND
vu.extent_auth_name = ve.auth_name AND
vu.extent_code = ve.code AND
cu.object_table_name = c.table_name AND
cu.object_auth_name = c.auth_name AND
cu.object_code = c.code AND
cu.extent_auth_name = ce.auth_name AND
cu.extent_code = ce.code AND
NOT ((ce.south_lat < ve.north_lat AND ve.south_lat < ce.north_lat) OR
(ce.west_lon < ce.east_lon AND ve.west_lon < ve.east_lon AND
NOT (ce.west_lon < ve.east_lon AND ve.west_lon < ce.east_lon))) );
SELECT RAISE(ABORT, 'The area of use of at least one coordinate_operation does not intersect the one of its target CRS')
WHERE EXISTS (SELECT * FROM coordinate_operation_view v, crs_view c, usage vu, extent ve, usage cu, extent ce WHERE
v.deprecated = 0 AND
((v.table_name = 'grid_transformation' AND NOT (v.auth_name = 'IGNF' AND v.code = 'TSG1185'))
OR v.auth_name NOT IN ('EPSG', 'ESRI', 'IGNF')) AND
v.target_crs_auth_name = c.auth_name AND
v.target_crs_code = c.code AND
vu.object_table_name = v.table_name AND
vu.object_auth_name = v.auth_name AND
vu.object_code = v.code AND
vu.extent_auth_name = ve.auth_name AND
vu.extent_code = ve.code AND
cu.object_table_name = c.table_name AND
cu.object_auth_name = c.auth_name AND
cu.object_code = c.code AND
cu.extent_auth_name = ce.auth_name AND
cu.extent_code = ce.code AND
NOT ((ce.south_lat < ve.north_lat AND ve.south_lat < ce.north_lat) OR
(ce.west_lon < ce.east_lon AND ve.west_lon < ve.east_lon AND
NOT (ce.west_lon < ve.east_lon AND ve.west_lon < ce.east_lon))) );
-- check geoid_model table
SELECT RAISE(ABORT, 'missing GEOID99 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID99');
SELECT RAISE(ABORT, 'missing GEOID03 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID03');
SELECT RAISE(ABORT, 'missing GEOID06 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID06');
SELECT RAISE(ABORT, 'missing GEOID09 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID09');
SELECT RAISE(ABORT, 'missing GEOID12A in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12A');
SELECT RAISE(ABORT, 'missing GEOID12B in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12B');
SELECT RAISE(ABORT, 'missing GEOID18 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID18');
-- check presence of au_ga_AUSGeoid98.tif
SELECT RAISE(ABORT, 'missing au_ga_AUSGeoid98.tif')
WHERE NOT EXISTS(SELECT 1 FROM grid_alternatives WHERE proj_grid_name = 'au_ga_AUSGeoid98.tif');
-- check PROJ.VERSION value
SELECT RAISE(ABORT, 'Value of PROJ.VERSION entry of metadata tables not substituted by actual value')
WHERE (SELECT 1 FROM metadata WHERE key = 'PROJ.VERSION' AND value LIKE '$%');
-- Only available in sqlite >= 3.16. May be activated as soon as support for ubuntu 16 is dropped
-- check all foreign key contraints have an 'ON DELETE CASCADE'
-- SELECT RAISE(ABORT, 'FK constraint with missing "ON DELETE CASCADE"')
-- WHERE EXISTS (SELECT 1 FROM
-- pragma_foreign_key_list(name),
-- (SELECT name from sqlite_master WHERE type='table')
-- WHERE upper(on_delete) != 'CASCADE');
END;
INSERT INTO dummy DEFAULT VALUES;
DROP TRIGGER final_checks;
DROP TABLE dummy;
ANALYZE;
VACUUM;
+237 -75
View File
@@ -2,9 +2,9 @@
INSERT INTO "compound_crs" VALUES('EPSG','3901','KKJ / Finland Uniform Coordinate System + N60 height',NULL,'EPSG','2393','EPSG','5717',0);
INSERT INTO "usage" VALUES('EPSG','2881','compound_crs','EPSG','3901','EPSG','3333','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','3902','ETRS89 / TM35FIN(N,E) + N60 height',NULL,'EPSG','5048','EPSG','5717',0);
INSERT INTO "compound_crs" VALUES('EPSG','3902','EUREF-FIN / TM35FIN(N,E) + N60 height',NULL,'EPSG','5048','EPSG','5717',0);
INSERT INTO "usage" VALUES('EPSG','2882','compound_crs','EPSG','3902','EPSG','3333','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','3903','ETRS89 / TM35FIN(N,E) + N2000 height',NULL,'EPSG','5048','EPSG','3900',0);
INSERT INTO "compound_crs" VALUES('EPSG','3903','EUREF-FIN / TM35FIN(N,E) + N2000 height',NULL,'EPSG','5048','EPSG','3900',0);
INSERT INTO "usage" VALUES('EPSG','2883','compound_crs','EPSG','3903','EPSG','3333','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','4097','ETRS89 / DKTM1 + DVR90 height',NULL,'EPSG','4093','EPSG','5799',0);
INSERT INTO "usage" VALUES('EPSG','3001','compound_crs','EPSG','4097','EPSG','3631','EPSG','1029');
@@ -74,137 +74,137 @@ INSERT INTO "compound_crs" VALUES('EPSG','5856','SWEREF99 21 45 + RH2000 height'
INSERT INTO "usage" VALUES('EPSG','4291','compound_crs','EPSG','5856','EPSG','2843','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','5857','SWEREF99 23 15 + RH2000 height',NULL,'EPSG','3018','EPSG','5613',0);
INSERT INTO "usage" VALUES('EPSG','4292','compound_crs','EPSG','5857','EPSG','2844','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','5942','ETRS89 + NN2000 height',NULL,'EPSG','4258','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5942','ETRS89-NOR [EUREF89] + NN2000 height',NULL,'EPSG','10875','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4346','compound_crs','EPSG','5942','EPSG','1352','EPSG','1027');
INSERT INTO "compound_crs" VALUES('EPSG','5945','ETRS89 / NTM zone 5 + NN2000 height',NULL,'EPSG','5105','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5945','ETRS89-NOR [EUREF89] / NTM zone 5 + NN2000 height',NULL,'EPSG','5105','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4347','compound_crs','EPSG','5945','EPSG','3636','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5946','ETRS89 / NTM zone 6 + NN2000 height',NULL,'EPSG','5106','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5946','ETRS89-NOR [EUREF89] / NTM zone 6 + NN2000 height',NULL,'EPSG','5106','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4348','compound_crs','EPSG','5946','EPSG','3639','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5947','ETRS89 / NTM zone 7 + NN2000 height',NULL,'EPSG','5107','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5947','ETRS89-NOR [EUREF89] / NTM zone 7 + NN2000 height',NULL,'EPSG','5107','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4349','compound_crs','EPSG','5947','EPSG','3647','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5948','ETRS89 / NTM zone 8 + NN2000 height',NULL,'EPSG','5108','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5948','ETRS89-NOR [EUREF89] / NTM zone 8 + NN2000 height',NULL,'EPSG','5108','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4350','compound_crs','EPSG','5948','EPSG','3648','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5949','ETRS89 / NTM zone 9 + NN2000 height',NULL,'EPSG','5109','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5949','ETRS89-NOR [EUREF89] / NTM zone 9 + NN2000 height',NULL,'EPSG','5109','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4351','compound_crs','EPSG','5949','EPSG','3649','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5950','ETRS89 / NTM zone 10 + NN2000 height',NULL,'EPSG','5110','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5950','ETRS89-NOR [EUREF89] / NTM zone 10 + NN2000 height',NULL,'EPSG','5110','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4352','compound_crs','EPSG','5950','EPSG','3650','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5951','ETRS89 / NTM zone 11 + NN2000 height',NULL,'EPSG','5111','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5951','ETRS89-NOR [EUREF89] / NTM zone 11 + NN2000 height',NULL,'EPSG','5111','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4353','compound_crs','EPSG','5951','EPSG','3651','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5952','ETRS89 / NTM zone 12 + NN2000 height',NULL,'EPSG','5112','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5952','ETRS89-NOR [EUREF89] / NTM zone 12 + NN2000 height',NULL,'EPSG','5112','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4354','compound_crs','EPSG','5952','EPSG','3653','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5953','ETRS89 / NTM zone 13 + NN2000 height',NULL,'EPSG','5113','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5953','ETRS89-NOR [EUREF89 / NTM zone 13 + NN2000 height',NULL,'EPSG','5113','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4355','compound_crs','EPSG','5953','EPSG','3654','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5954','ETRS89 / NTM zone 14 + NN2000 height',NULL,'EPSG','5114','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5954','ETRS89-NOR [EUREF89] / NTM zone 14 + NN2000 height',NULL,'EPSG','5114','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4356','compound_crs','EPSG','5954','EPSG','3655','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5955','ETRS89 / NTM zone 15 + NN2000 height',NULL,'EPSG','5115','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5955','ETRS89-NOR [EUREF89] / NTM zone 15 + NN2000 height',NULL,'EPSG','5115','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4357','compound_crs','EPSG','5955','EPSG','3656','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5956','ETRS89 / NTM zone 16 + NN2000 height',NULL,'EPSG','5116','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5956','ETRS89-NOR [EUREF89] / NTM zone 16 + NN2000 height',NULL,'EPSG','5116','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4358','compound_crs','EPSG','5956','EPSG','3657','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5957','ETRS89 / NTM zone 17 + NN2000 height',NULL,'EPSG','5117','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5957','ETRS89-NOR [EUREF89] / NTM zone 17 + NN2000 height',NULL,'EPSG','5117','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4359','compound_crs','EPSG','5957','EPSG','3658','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5958','ETRS89 / NTM zone 18 + NN2000 height',NULL,'EPSG','5118','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5958','ETRS89-NOR [EUREF89] / NTM zone 18 + NN2000 height',NULL,'EPSG','5118','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4360','compound_crs','EPSG','5958','EPSG','3660','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5959','ETRS89 / NTM zone 19 + NN2000 height',NULL,'EPSG','5119','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5959','ETRS89-NOR [EUREF89] / NTM zone 19 + NN2000 height',NULL,'EPSG','5119','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4361','compound_crs','EPSG','5959','EPSG','3661','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5960','ETRS89 / NTM zone 20 + NN2000 height',NULL,'EPSG','5120','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5960','ETRS89-NOR [EUREF89] / NTM zone 20 + NN2000 height',NULL,'EPSG','5120','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4362','compound_crs','EPSG','5960','EPSG','3662','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5961','ETRS89 / NTM zone 21 + NN2000 height',NULL,'EPSG','5121','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5961','ETRS89-NOR [EUREF89] / NTM zone 21 + NN2000 height',NULL,'EPSG','5121','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4363','compound_crs','EPSG','5961','EPSG','3663','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5962','ETRS89 / NTM zone 22 + NN2000 height',NULL,'EPSG','5122','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5962','ETRS89-NOR [EUREF89] / NTM zone 22 + NN2000 height',NULL,'EPSG','5122','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4364','compound_crs','EPSG','5962','EPSG','3665','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5963','ETRS89 / NTM zone 23 + NN2000 height',NULL,'EPSG','5123','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5963','ETRS89-NOR [EUREF89] / NTM zone 23 + NN2000 height',NULL,'EPSG','5123','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4365','compound_crs','EPSG','5963','EPSG','3667','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5964','ETRS89 / NTM zone 24 + NN2000 height',NULL,'EPSG','5124','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5964','ETRS89-NOR [EUREF89] / NTM zone 24 + NN2000 height',NULL,'EPSG','5124','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4366','compound_crs','EPSG','5964','EPSG','3668','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5965','ETRS89 / NTM zone 25 + NN2000 height',NULL,'EPSG','5125','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5965','ETRS89-NOR [EUREF89] / NTM zone 25 + NN2000 height',NULL,'EPSG','5125','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4367','compound_crs','EPSG','5965','EPSG','3669','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5966','ETRS89 / NTM zone 26 + NN2000 height',NULL,'EPSG','5126','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5966','ETRS89-NOR [EUREF89] / NTM zone 26 + NN2000 height',NULL,'EPSG','5126','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4368','compound_crs','EPSG','5966','EPSG','3671','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5967','ETRS89 / NTM zone 27 + NN2000 height',NULL,'EPSG','5127','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5967','ETRS89-NOR [EUREF89] / NTM zone 27 + NN2000 height',NULL,'EPSG','5127','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4369','compound_crs','EPSG','5967','EPSG','3672','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5968','ETRS89 / NTM zone 28 + NN2000 height',NULL,'EPSG','5128','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5968','ETRS89-NOR [EUREF89] / NTM zone 28 + NN2000 height',NULL,'EPSG','5128','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4370','compound_crs','EPSG','5968','EPSG','3673','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5969','ETRS89 / NTM zone 29 + NN2000 height',NULL,'EPSG','5129','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5969','ETRS89-NOR [EUREF89] / NTM zone 29 + NN2000 height',NULL,'EPSG','5129','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4371','compound_crs','EPSG','5969','EPSG','3674','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5970','ETRS89 / NTM zone 30 + NN2000 height',NULL,'EPSG','5130','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5970','ETRS89-NOR [EUREF89] / NTM zone 30 + NN2000 height',NULL,'EPSG','5130','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4372','compound_crs','EPSG','5970','EPSG','3676','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','5971','ETRS89 / UTM zone 31N + NN2000 height',NULL,'EPSG','25831','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5971','ETRS89-NOR [EUREF89] / UTM zone 31N + NN2000 height',NULL,'EPSG','11021','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4373','compound_crs','EPSG','5971','EPSG','3636','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','5972','ETRS89 / UTM zone 32N + NN2000 height',NULL,'EPSG','25832','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5972','ETRS89-NOR [EUREF89] / UTM zone 32N + NN2000 height',NULL,'EPSG','11022','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4374','compound_crs','EPSG','5972','EPSG','4066','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','5973','ETRS89 / UTM zone 33N + NN2000 height',NULL,'EPSG','25833','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5973','ETRS89-NOR [EUREF89] / UTM zone 33N + NN2000 height',NULL,'EPSG','11023','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4375','compound_crs','EPSG','5973','EPSG','4067','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','5974','ETRS89 / UTM zone 34N + NN2000 height',NULL,'EPSG','25834','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5974','ETRS89-NOR [EUREF89] / UTM zone 34N + NN2000 height',NULL,'EPSG','11024','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4376','compound_crs','EPSG','5974','EPSG','4068','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','5975','ETRS89 / UTM zone 35N + NN2000 height',NULL,'EPSG','25835','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5975','ETRS89-NOR [EUREF89] / UTM zone 35N + NN2000 height',NULL,'EPSG','11025','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4377','compound_crs','EPSG','5975','EPSG','4069','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','5976','ETRS89 / UTM zone 36N + NN2000 height',NULL,'EPSG','25836','EPSG','5941',0);
INSERT INTO "compound_crs" VALUES('EPSG','5976','ETRS89-NOR [EUREF89] / UTM zone 36N + NN2000 height',NULL,'EPSG','11026','EPSG','5941',0);
INSERT INTO "usage" VALUES('EPSG','4378','compound_crs','EPSG','5976','EPSG','3676','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6144','ETRS89 + NN54 height',NULL,'EPSG','4258','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6144','ETRS89-NOR [EUREF89] + NN54 height',NULL,'EPSG','10875','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4464','compound_crs','EPSG','6144','EPSG','1352','EPSG','1027');
INSERT INTO "compound_crs" VALUES('EPSG','6145','ETRS89 / NTM zone 5 + NN54 height',NULL,'EPSG','5105','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6145','ETRS89-NOR [EUREF89] / NTM zone 5 + NN54 height',NULL,'EPSG','5105','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4465','compound_crs','EPSG','6145','EPSG','3636','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6146','ETRS89 / NTM zone 6 + NN54 height',NULL,'EPSG','5106','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6146','ETRS89-NOR [EUREF89] / NTM zone 6 + NN54 height',NULL,'EPSG','5106','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4466','compound_crs','EPSG','6146','EPSG','3639','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6147','ETRS89 / NTM zone 7 + NN54 height',NULL,'EPSG','5107','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6147','ETRS89-NOR [EUREF89] / NTM zone 7 + NN54 height',NULL,'EPSG','5107','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4467','compound_crs','EPSG','6147','EPSG','3647','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6148','ETRS89 / NTM zone 8 + NN54 height',NULL,'EPSG','5108','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6148','ETRS89-NOR [EUREF89] / NTM zone 8 + NN54 height',NULL,'EPSG','5108','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4468','compound_crs','EPSG','6148','EPSG','3648','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6149','ETRS89 / NTM zone 9 + NN54 height',NULL,'EPSG','5109','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6149','ETRS89-NOR [EUREF89] / NTM zone 9 + NN54 height',NULL,'EPSG','5109','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4469','compound_crs','EPSG','6149','EPSG','3649','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6150','ETRS89 / NTM zone 10 + NN54 height',NULL,'EPSG','5110','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6150','ETRS89-NOR [EUREF89] / NTM zone 10 + NN54 height',NULL,'EPSG','5110','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4470','compound_crs','EPSG','6150','EPSG','3650','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6151','ETRS89 / NTM zone 11 + NN54 height',NULL,'EPSG','5111','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6151','ETRS89-NOR [EUREF89] / NTM zone 11 + NN54 height',NULL,'EPSG','5111','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4471','compound_crs','EPSG','6151','EPSG','3651','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6152','ETRS89 / NTM zone 12 + NN54 height',NULL,'EPSG','5112','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6152','ETRS89-NOR [EUREF89] / NTM zone 12 + NN54 height',NULL,'EPSG','5112','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4472','compound_crs','EPSG','6152','EPSG','3653','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6153','ETRS89 / NTM zone 13 + NN54 height',NULL,'EPSG','5113','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6153','ETRS89-NOR [EUREF89] / NTM zone 13 + NN54 height',NULL,'EPSG','5113','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4473','compound_crs','EPSG','6153','EPSG','3654','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6154','ETRS89 / NTM zone 14 + NN54 height',NULL,'EPSG','5114','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6154','ETRS89-NOR [EUREF89] / NTM zone 14 + NN54 height',NULL,'EPSG','5114','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4474','compound_crs','EPSG','6154','EPSG','3655','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6155','ETRS89 / NTM zone 15 + NN54 height',NULL,'EPSG','5115','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6155','ETRS89-NOR [EUREF89] / NTM zone 15 + NN54 height',NULL,'EPSG','5115','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4475','compound_crs','EPSG','6155','EPSG','3656','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6156','ETRS89 / NTM zone 16 + NN54 height',NULL,'EPSG','5116','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6156','ETRS89-NOR [EUREF89] / NTM zone 16 + NN54 height',NULL,'EPSG','5116','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4476','compound_crs','EPSG','6156','EPSG','3657','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6157','ETRS89 / NTM zone 17 + NN54 height',NULL,'EPSG','5117','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6157','ETRS89-NOR [EUREF89] / NTM zone 17 + NN54 height',NULL,'EPSG','5117','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4477','compound_crs','EPSG','6157','EPSG','3658','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6158','ETRS89 / NTM zone 18 + NN54 height',NULL,'EPSG','5118','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6158','ETRS89-NOR [EUREF89] / NTM zone 18 + NN54 height',NULL,'EPSG','5118','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4478','compound_crs','EPSG','6158','EPSG','3660','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6159','ETRS89 / NTM zone 19 + NN54 height',NULL,'EPSG','5119','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6159','ETRS89-NOR [EUREF89] / NTM zone 19 + NN54 height',NULL,'EPSG','5119','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4479','compound_crs','EPSG','6159','EPSG','3661','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6160','ETRS89 / NTM zone 20 + NN54 height',NULL,'EPSG','5120','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6160','ETRS89-NOR [EUREF89] / NTM zone 20 + NN54 height',NULL,'EPSG','5120','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4480','compound_crs','EPSG','6160','EPSG','3662','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6161','ETRS89 / NTM zone 21 + NN54 height',NULL,'EPSG','5121','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6161','ETRS89-NOR [EUREF89] / NTM zone 21 + NN54 height',NULL,'EPSG','5121','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4481','compound_crs','EPSG','6161','EPSG','3663','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6162','ETRS89 / NTM zone 22 + NN54 height',NULL,'EPSG','5122','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6162','ETRS89-NOR [EUREF89] / NTM zone 22 + NN54 height',NULL,'EPSG','5122','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4482','compound_crs','EPSG','6162','EPSG','3665','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6163','ETRS89 / NTM zone 23 + NN54 height',NULL,'EPSG','5123','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6163','ETRS89-NOR [EUREF89] / NTM zone 23 + NN54 height',NULL,'EPSG','5123','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4483','compound_crs','EPSG','6163','EPSG','3667','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6164','ETRS89 / NTM zone 24 + NN54 height',NULL,'EPSG','5124','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6164','ETRS89-NOR [EUREF89] / NTM zone 24 + NN54 height',NULL,'EPSG','5124','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4484','compound_crs','EPSG','6164','EPSG','3668','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6165','ETRS89 / NTM zone 25 + NN54 height',NULL,'EPSG','5125','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6165','ETRS89-NOR [EUREF89] / NTM zone 25 + NN54 height',NULL,'EPSG','5125','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4485','compound_crs','EPSG','6165','EPSG','3669','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6166','ETRS89 / NTM zone 26 + NN54 height',NULL,'EPSG','5126','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6166','ETRS89-NOR [EUREF89] / NTM zone 26 + NN54 height',NULL,'EPSG','5126','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4486','compound_crs','EPSG','6166','EPSG','3671','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6167','ETRS89 / NTM zone 27 + NN54 height',NULL,'EPSG','5127','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6167','ETRS89-NOR [EUREF89] / NTM zone 27 + NN54 height',NULL,'EPSG','5127','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4487','compound_crs','EPSG','6167','EPSG','3672','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6168','ETRS89 / NTM zone 28 + NN54 height',NULL,'EPSG','5128','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6168','ETRS89-NOR [EUREF89] / NTM zone 28 + NN54 height',NULL,'EPSG','5128','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4488','compound_crs','EPSG','6168','EPSG','3673','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6169','ETRS89 / NTM zone 29 + NN54 height',NULL,'EPSG','5129','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6169','ETRS89-NOR [EUREF89] / NTM zone 29 + NN54 height',NULL,'EPSG','5129','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4489','compound_crs','EPSG','6169','EPSG','3674','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6170','ETRS89 / NTM zone 30 + NN54 height',NULL,'EPSG','5130','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6170','ETRS89-NOR [EUREF89] / NTM zone 30 + NN54 height',NULL,'EPSG','5130','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4490','compound_crs','EPSG','6170','EPSG','3676','EPSG','1029');
INSERT INTO "compound_crs" VALUES('EPSG','6171','ETRS89 / UTM zone 31N + NN54 height',NULL,'EPSG','25831','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6171','ETRS89-NOR [EUREF89] / UTM zone 31N + NN54 height',NULL,'EPSG','11021','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4491','compound_crs','EPSG','6171','EPSG','3636','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6172','ETRS89 / UTM zone 32N + NN54 height',NULL,'EPSG','25832','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6172','ETRS89-NOR [EUREF89] / UTM zone 32N + NN54 height',NULL,'EPSG','11022','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4492','compound_crs','EPSG','6172','EPSG','4066','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6173','ETRS89 / UTM zone 33N + NN54 height',NULL,'EPSG','25833','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6173','ETRS89-NOR [EUREF89] / UTM zone 33N + NN54 height',NULL,'EPSG','11023','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4493','compound_crs','EPSG','6173','EPSG','4067','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6174','ETRS89 / UTM zone 34N + NN54 height',NULL,'EPSG','25834','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6174','ETRS89-NOR [EUREF89] / UTM zone 34N + NN54 height',NULL,'EPSG','11024','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4494','compound_crs','EPSG','6174','EPSG','4068','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6175','ETRS89 / UTM zone 35N + NN54 height',NULL,'EPSG','25835','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6175','ETRS89-NOR [EUREF89] / UTM zone 35N + NN54 height',NULL,'EPSG','11025','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4495','compound_crs','EPSG','6175','EPSG','4069','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6176','ETRS89 / UTM zone 36N + NN54 height',NULL,'EPSG','25836','EPSG','5776',0);
INSERT INTO "compound_crs" VALUES('EPSG','6176','ETRS89-NOR [EUREF89] / UTM zone 36N + NN54 height',NULL,'EPSG','11026','EPSG','5776',0);
INSERT INTO "usage" VALUES('EPSG','4496','compound_crs','EPSG','6176','EPSG','3676','EPSG','1153');
INSERT INTO "compound_crs" VALUES('EPSG','6190','BD72 / Belgian Lambert 72 + Ostend height',NULL,'EPSG','31370','EPSG','5710',0);
INSERT INTO "usage" VALUES('EPSG','4507','compound_crs','EPSG','6190','EPSG','1347','EPSG','1142');
@@ -258,7 +258,7 @@ INSERT INTO "compound_crs" VALUES('EPSG','6917','SVY21 + SHD height',NULL,'EPSG'
INSERT INTO "usage" VALUES('EPSG','5040','compound_crs','EPSG','6917','EPSG','1210','EPSG','1144');
INSERT INTO "compound_crs" VALUES('EPSG','6927','SVY21 / Singapore TM + SHD height',NULL,'EPSG','3414','EPSG','6916',0);
INSERT INTO "usage" VALUES('EPSG','5045','compound_crs','EPSG','6927','EPSG','1210','EPSG','1144');
INSERT INTO "compound_crs" VALUES('EPSG','7400','NTF (Paris) + NGF IGN69 height',NULL,'EPSG','4807','EPSG','5720',0);
INSERT INTO "compound_crs" VALUES('EPSG','7400','NTF (Paris) + NGF-IGN69 height',NULL,'EPSG','4807','EPSG','5720',0);
INSERT INTO "usage" VALUES('EPSG','5265','compound_crs','EPSG','7400','EPSG','1326','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','7401','NTF (Paris) / France II + NGF Lallemand',NULL,'EPSG','27582','EPSG','5719',1);
INSERT INTO "usage" VALUES('EPSG','5266','compound_crs','EPSG','7401','EPSG','1326','EPSG','1142');
@@ -552,14 +552,14 @@ INSERT INTO "compound_crs" VALUES('EPSG','8814','NAD83 / Missouri Central + NAVD
INSERT INTO "usage" VALUES('EPSG','5993','compound_crs','EPSG','8814','EPSG','2218','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','8815','NAD83 / Missouri West + NAVD88 height',NULL,'EPSG','26998','EPSG','5703',0);
INSERT INTO "usage" VALUES('EPSG','5994','compound_crs','EPSG','8815','EPSG','2220','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','8912','CR-SIRGAS / CRTM05 + DACR52 height',NULL,'EPSG','8908','EPSG','8911',0);
INSERT INTO "compound_crs" VALUES('EPSG','8912','CR-SIRGAS epoch 2014.59 / CRTM05 + DACR52 height',NULL,'EPSG','8908','EPSG','8911',0);
INSERT INTO "usage" VALUES('EPSG','6028','compound_crs','EPSG','8912','EPSG','3232','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','9286','ETRS89 + NAP height',NULL,'EPSG','4258','EPSG','5709',0);
INSERT INTO "usage" VALUES('EPSG','14121','compound_crs','EPSG','9286','EPSG','1172','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','9289','ETRS89 + LAT NL depth',NULL,'EPSG','4258','EPSG','9287',0);
INSERT INTO "usage" VALUES('EPSG','14124','compound_crs','EPSG','9289','EPSG','1630','EPSG','1198');
INSERT INTO "usage" VALUES('EPSG','14124','compound_crs','EPSG','9289','EPSG','4742','EPSG','1198');
INSERT INTO "compound_crs" VALUES('EPSG','9290','ETRS89 + MSL NL depth',NULL,'EPSG','4258','EPSG','9288',0);
INSERT INTO "usage" VALUES('EPSG','14125','compound_crs','EPSG','9290','EPSG','1630','EPSG','1265');
INSERT INTO "usage" VALUES('EPSG','14125','compound_crs','EPSG','9290','EPSG','4742','EPSG','1265');
INSERT INTO "compound_crs" VALUES('EPSG','9306','HS2 Survey Grid + HS2-VRF height',NULL,'EPSG','9300','EPSG','9303',0);
INSERT INTO "usage" VALUES('EPSG','14050','compound_crs','EPSG','9306','EPSG','4582','EPSG','1260');
INSERT INTO "compound_crs" VALUES('EPSG','9368','TPEN11 Grid + ODN height',NULL,'EPSG','9367','EPSG','5701',0);
@@ -722,7 +722,7 @@ INSERT INTO "compound_crs" VALUES('EPSG','9870','MRH21 Grid + ODN height',NULL,'
INSERT INTO "usage" VALUES('EPSG','16942','compound_crs','EPSG','9870','EPSG','4652','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9881','MOLDOR11 Grid + ODN height',NULL,'EPSG','9880','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','16985','compound_crs','EPSG','9881','EPSG','4655','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9883','ETRS89 + CD Norway depth',NULL,'EPSG','4258','EPSG','9672',0);
INSERT INTO "compound_crs" VALUES('EPSG','9883','ETRS89-NOR [EUREF89] + CD Norway depth',NULL,'EPSG','10875','EPSG','9672',0);
INSERT INTO "usage" VALUES('EPSG','16974','compound_crs','EPSG','9883','EPSG','4656','EPSG','1198');
INSERT INTO "compound_crs" VALUES('EPSG','9897','LUREF / Luxembourg TM + NG95 height',NULL,'EPSG','2169','EPSG','5774',0);
INSERT INTO "usage" VALUES('EPSG','17304','compound_crs','EPSG','9897','EPSG','1146','EPSG','1029');
@@ -752,7 +752,7 @@ INSERT INTO "compound_crs" VALUES('EPSG','9935','DB_REF2016 zone 5',NULL,'EPSG',
INSERT INTO "usage" VALUES('EPSG','17296','compound_crs','EPSG','9935','EPSG','3998','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9944','EBBWV14 Grid + ODN height',NULL,'EPSG','9943','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','17350','compound_crs','EPSG','9944','EPSG','4661','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9948','ISN93 + ISH2004 height ',NULL,'EPSG','4659','EPSG','8089',0);
INSERT INTO "compound_crs" VALUES('EPSG','9948','ISN93 + ISH2004 height',NULL,'EPSG','4659','EPSG','8089',0);
INSERT INTO "usage" VALUES('EPSG','17415','compound_crs','EPSG','9948','EPSG','4662','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','9949','ISN2004 + ISH2004 height',NULL,'EPSG','5324','EPSG','8089',0);
INSERT INTO "usage" VALUES('EPSG','17390','compound_crs','EPSG','9949','EPSG','4662','EPSG','1026');
@@ -770,7 +770,169 @@ INSERT INTO "compound_crs" VALUES('EPSG','9973','SCM22 Grid + ODN height',NULL,'
INSERT INTO "usage" VALUES('EPSG','17442','compound_crs','EPSG','9973','EPSG','4665','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9978','FNL22 Grid + ODN height',NULL,'EPSG','9977','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','17459','compound_crs','EPSG','9978','EPSG','4664','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','20001','ETRS89 + SVD2006 height',NULL,'EPSG','4258','EPSG','20000',0);
INSERT INTO "compound_crs" VALUES('EPSG','10156','ETRS89 + MSL UK & Ireland VORF08 depth',NULL,'EPSG','4258','EPSG','10150',0);
INSERT INTO "usage" VALUES('EPSG','18592','compound_crs','EPSG','10156','EPSG','4668','EPSG','1198');
INSERT INTO "compound_crs" VALUES('EPSG','10157','ETRS89 + CD UK & Ireland VORF08 depth',NULL,'EPSG','4258','EPSG','10151',0);
INSERT INTO "usage" VALUES('EPSG','18586','compound_crs','EPSG','10157','EPSG','4668','EPSG','1198');
INSERT INTO "compound_crs" VALUES('EPSG','10162','JGD2011 / Japan Plane Rectangular CS I + JGD2011 (vertical) height',NULL,'EPSG','6669','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18594','compound_crs','EPSG','10162','EPSG','4670','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10163','JGD2011 / Japan Plane Rectangular CS II + JGD2011 (vertical) height',NULL,'EPSG','6670','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18595','compound_crs','EPSG','10163','EPSG','4671','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10164','JGD2011 / Japan Plane Rectangular CS III + JGD2011 (vertical) height',NULL,'EPSG','6671','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18596','compound_crs','EPSG','10164','EPSG','4672','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10165','JGD2011 / Japan Plane Rectangular CS IV + JGD2011 (vertical) height',NULL,'EPSG','6672','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18597','compound_crs','EPSG','10165','EPSG','1857','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10166','JGD2011 / Japan Plane Rectangular CS V + JGD2011 (vertical) height',NULL,'EPSG','6673','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18598','compound_crs','EPSG','10166','EPSG','1858','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10167','JGD2011 / Japan Plane Rectangular CS VI + JGD2011 (vertical) height',NULL,'EPSG','6674','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18600','compound_crs','EPSG','10167','EPSG','1859','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10168','JGD2011 / Japan Plane Rectangular CS VII + JGD2011 (vertical) height',NULL,'EPSG','6675','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18607','compound_crs','EPSG','10168','EPSG','1860','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10169','JGD2011 / Japan Plane Rectangular CS VIII + JGD2011 (vertical) height',NULL,'EPSG','6676','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18601','compound_crs','EPSG','10169','EPSG','4673','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10170','JGD2011 / Japan Plane Rectangular CS IX + JGD2011 (vertical) height',NULL,'EPSG','6677','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18602','compound_crs','EPSG','10170','EPSG','4674','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10171','JGD2011 / Japan Plane Rectangular CS X + JGD2011 (vertical) height',NULL,'EPSG','6678','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18603','compound_crs','EPSG','10171','EPSG','1863','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10172','JGD2011 / Japan Plane Rectangular CS XI + JGD2011 (vertical) height',NULL,'EPSG','6679','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18604','compound_crs','EPSG','10172','EPSG','4675','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10173','JGD2011 / Japan Plane Rectangular CS XII + JGD2011 (vertical) height',NULL,'EPSG','6680','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18605','compound_crs','EPSG','10173','EPSG','4676','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10174','JGD2011 / Japan Plane Rectangular CS XIII + JGD2011 (vertical) height',NULL,'EPSG','6681','EPSG','6695',0);
INSERT INTO "usage" VALUES('EPSG','18606','compound_crs','EPSG','10174','EPSG','1866','EPSG','1092');
INSERT INTO "compound_crs" VALUES('EPSG','10184','DoPw22 Grid + ODN height',NULL,'EPSG','10183','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18669','compound_crs','EPSG','10184','EPSG','4686','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10189','ShAb07 Grid + ODN height',NULL,'EPSG','10188','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18668','compound_crs','EPSG','10189','EPSG','4687','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10195','CNH22 Grid + ODN height',NULL,'EPSG','10194','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18698','compound_crs','EPSG','10195','EPSG','4677','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10200','CWS13 Grid + ODN height',NULL,'EPSG','10199','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18707','compound_crs','EPSG','10200','EPSG','4678','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10208','DIBA15 Grid + ODN height',NULL,'EPSG','10207','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18713','compound_crs','EPSG','10208','EPSG','4681','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10213','GWPBS22 Grid + ODN height',NULL,'EPSG','10212','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18723','compound_crs','EPSG','10213','EPSG','4685','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10218','GWWAB22 Grid + ODN height',NULL,'EPSG','10217','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18778','compound_crs','EPSG','10218','EPSG','4684','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10223','GWWWA22 Grid + ODN height',NULL,'EPSG','10222','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18738','compound_crs','EPSG','10223','EPSG','4683','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10228','MALS09 Grid + ODN height',NULL,'EPSG','10227','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18745','compound_crs','EPSG','10228','EPSG','4682','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10236','OxWo08 Grid + ODN height',NULL,'EPSG','10235','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18755','compound_crs','EPSG','10236','EPSG','4680','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10241','SYC20 Grid + ODN height',NULL,'EPSG','10240','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18764','compound_crs','EPSG','10241','EPSG','4679','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10245','Slovenia 1996 + SVS2010 height',NULL,'EPSG','4765','EPSG','8690',0);
INSERT INTO "usage" VALUES('EPSG','18847','compound_crs','EPSG','10245','EPSG','3307','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10246','Slovenia 1996 / Slovene National Grid + SVS2010 height',NULL,'EPSG','3794','EPSG','8690',0);
INSERT INTO "usage" VALUES('EPSG','18846','compound_crs','EPSG','10246','EPSG','3307','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10276','SMITB20 Grid + ODN height',NULL,'EPSG','10275','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','19179','compound_crs','EPSG','10276','EPSG','4688','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10281','RBEPP12 Grid + ODN height',NULL,'EPSG','10280','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','19185','compound_crs','EPSG','10281','EPSG','4689','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10293','ETRS89/DREF91/2016 + DHHN2016 height',NULL,'EPSG','10284','EPSG','7837',0);
INSERT INTO "usage" VALUES('EPSG','19275','compound_crs','EPSG','10293','EPSG','1103','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10318','RGNC15 (lon-lat) + NGNC08 height',NULL,'EPSG','10312','EPSG','9351',0);
INSERT INTO "usage" VALUES('EPSG','19634','compound_crs','EPSG','10318','EPSG','3430','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10355','ETRS89 + Formentera height',NULL,'EPSG','4258','EPSG','10352',0);
INSERT INTO "usage" VALUES('EPSG','19914','compound_crs','EPSG','10355','EPSG','4739','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10356','ETRS89 + Alboran height',NULL,'EPSG','4258','EPSG','10353',0);
INSERT INTO "usage" VALUES('EPSG','19915','compound_crs','EPSG','10356','EPSG','4741','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10357','ETRS89 + Melilla height',NULL,'EPSG','4258','EPSG','10354',0);
INSERT INTO "usage" VALUES('EPSG','19916','compound_crs','EPSG','10357','EPSG','4740','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10365','KGD2002 + KVD1964 height',NULL,'EPSG','4737','EPSG','5193',0);
INSERT INTO "usage" VALUES('EPSG','20149','compound_crs','EPSG','10365','EPSG','3266','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10472','COV23 Grid + ODN height',NULL,'EPSG','10471','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','20315','compound_crs','EPSG','10472','EPSG','4743','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10486','ETRS89 + DVR90(2002) height',NULL,'EPSG','4258','EPSG','10483',0);
INSERT INTO "usage" VALUES('EPSG','20411','compound_crs','EPSG','10486','EPSG','3237','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10487','ETRS89 + DVR90(2013) height',NULL,'EPSG','4258','EPSG','10484',0);
INSERT INTO "usage" VALUES('EPSG','20415','compound_crs','EPSG','10487','EPSG','3237','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10488','ETRS89 + DVR90(2023) height',NULL,'EPSG','4258','EPSG','10485',0);
INSERT INTO "usage" VALUES('EPSG','20414','compound_crs','EPSG','10488','EPSG','3237','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10497','RGF93 v2 / Lambert-93 + NGF-IGN69 height',NULL,'EPSG','9793','EPSG','5720',0);
INSERT INTO "usage" VALUES('EPSG','20475','compound_crs','EPSG','10497','EPSG','1326','EPSG','1178');
INSERT INTO "compound_crs" VALUES('EPSG','10498','RGF93 v2 / Lambert-93 + NGF-IGN78 height',NULL,'EPSG','9793','EPSG','5721',0);
INSERT INTO "usage" VALUES('EPSG','20473','compound_crs','EPSG','10498','EPSG','1327','EPSG','1178');
INSERT INTO "compound_crs" VALUES('EPSG','10499','RGF93 v2b / Lambert-93 + NGF-IGN69 height',NULL,'EPSG','9794','EPSG','5720',0);
INSERT INTO "usage" VALUES('EPSG','20472','compound_crs','EPSG','10499','EPSG','1326','EPSG','1178');
INSERT INTO "compound_crs" VALUES('EPSG','10500','RGF93 v2b / Lambert-93 + NGF-IGN78 height',NULL,'EPSG','9794','EPSG','5721',0);
INSERT INTO "usage" VALUES('EPSG','20476','compound_crs','EPSG','10500','EPSG','1327','EPSG','1178');
INSERT INTO "compound_crs" VALUES('EPSG','10507','RGF93 v2b + NGF-IGN78 height',NULL,'EPSG','9782','EPSG','5721',0);
INSERT INTO "usage" VALUES('EPSG','20491','compound_crs','EPSG','10507','EPSG','1327','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10545','ETRS89 + Cascais height',NULL,'EPSG','4258','EPSG','5780',0);
INSERT INTO "usage" VALUES('EPSG','20908','compound_crs','EPSG','10545','EPSG','1294','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10553','ETRS89 + DKMSL(2022) depth',NULL,'EPSG','4258','EPSG','10547',0);
INSERT INTO "usage" VALUES('EPSG','21026','compound_crs','EPSG','10553','EPSG','4756','EPSG','1272');
INSERT INTO "compound_crs" VALUES('EPSG','10554','ETRS89 + DKLAT(2022) depth',NULL,'EPSG','4258','EPSG','10548',0);
INSERT INTO "usage" VALUES('EPSG','21027','compound_crs','EPSG','10554','EPSG','4756','EPSG','1272');
INSERT INTO "compound_crs" VALUES('EPSG','10555','ETRS89 + DKMSL(2023) depth',NULL,'EPSG','4258','EPSG','10549',0);
INSERT INTO "usage" VALUES('EPSG','21028','compound_crs','EPSG','10555','EPSG','4756','EPSG','1272');
INSERT INTO "compound_crs" VALUES('EPSG','10556','ETRS89 + DKLAT(2023) depth',NULL,'EPSG','4258','EPSG','10550',0);
INSERT INTO "usage" VALUES('EPSG','21029','compound_crs','EPSG','10556','EPSG','4756','EPSG','1272');
INSERT INTO "compound_crs" VALUES('EPSG','10627','ECML14 Grid + ODN height',NULL,'EPSG','10626','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','21376','compound_crs','EPSG','10627','EPSG','4774','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10633','RGAF09 / UTM zone 20N + Martinique 1987 height',NULL,'EPSG','5490','EPSG','5756',0);
INSERT INTO "usage" VALUES('EPSG','21399','compound_crs','EPSG','10633','EPSG','3276','EPSG','1178');
INSERT INTO "compound_crs" VALUES('EPSG','10643','Saba + Saba height',NULL,'EPSG','10636','EPSG','10642',0);
INSERT INTO "usage" VALUES('EPSG','21757','compound_crs','EPSG','10643','EPSG','4757','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10644','BES2020 Saba + Saba height',NULL,'EPSG','10639','EPSG','10642',0);
INSERT INTO "usage" VALUES('EPSG','21716','compound_crs','EPSG','10644','EPSG','4757','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10645','Saba DPnet + Saba height',NULL,'EPSG','10641','EPSG','10642',0);
INSERT INTO "usage" VALUES('EPSG','21872','compound_crs','EPSG','10645','EPSG','4757','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','10651','GR96 + GLMSL(2023) depth',NULL,'EPSG','4747','EPSG','10649',0);
INSERT INTO "usage" VALUES('EPSG','21455','compound_crs','EPSG','10651','EPSG','4776','EPSG','1272');
INSERT INTO "compound_crs" VALUES('EPSG','10652','GR96 + GLLAT(2023) depth',NULL,'EPSG','4747','EPSG','10650',0);
INSERT INTO "usage" VALUES('EPSG','21452','compound_crs','EPSG','10652','EPSG','4776','EPSG','1272');
INSERT INTO "compound_crs" VALUES('EPSG','10659','ETRF2000 + EOMA 1980 height',NULL,'EPSG','9067','EPSG','5787',0);
INSERT INTO "usage" VALUES('EPSG','21613','compound_crs','EPSG','10659','EPSG','1119','EPSG','1181');
INSERT INTO "compound_crs" VALUES('EPSG','10660','HD72 / EOV + EOMA 1980 height',NULL,'EPSG','23700','EPSG','5787',0);
INSERT INTO "usage" VALUES('EPSG','21616','compound_crs','EPSG','10660','EPSG','1119','EPSG','1056');
INSERT INTO "compound_crs" VALUES('EPSG','10679','ETRS89 + BSCD2000 depth',NULL,'EPSG','4258','EPSG','10678',0);
INSERT INTO "usage" VALUES('EPSG','21815','compound_crs','EPSG','10679','EPSG','4779','EPSG','1291');
INSERT INTO "compound_crs" VALUES('EPSG','10686','Slovenia 1996 + SVS2000 height',NULL,'EPSG','4765','EPSG','5779',0);
INSERT INTO "usage" VALUES('EPSG','21887','compound_crs','EPSG','10686','EPSG','3307','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10687','Slovenia 1996 / Slovene National Grid + SVS2000 height',NULL,'EPSG','3794','EPSG','5779',0);
INSERT INTO "usage" VALUES('EPSG','21888','compound_crs','EPSG','10687','EPSG','3307','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10691','EUREF-FIN + N60 height',NULL,'EPSG','10690','EPSG','5717',0);
INSERT INTO "usage" VALUES('EPSG','21985','compound_crs','EPSG','10691','EPSG','3333','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10692','EUREF-FIN + N2000 height',NULL,'EPSG','10690','EPSG','3900',0);
INSERT INTO "usage" VALUES('EPSG','21986','compound_crs','EPSG','10692','EPSG','3333','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10741','Sint Eustatius + Sint Eustatius height',NULL,'EPSG','10736','EPSG','10740',0);
INSERT INTO "usage" VALUES('EPSG','22289','compound_crs','EPSG','10741','EPSG','4788','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10742','BES2020 Sint Eustatius + Sint Eustatius height',NULL,'EPSG','10739','EPSG','10740',0);
INSERT INTO "usage" VALUES('EPSG','22290','compound_crs','EPSG','10742','EPSG','4788','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','10746','Sint Eustatius DPnet short + Sint Eustatius height',NULL,'EPSG','10744','EPSG','10740',0);
INSERT INTO "usage" VALUES('EPSG','22310','compound_crs','EPSG','10746','EPSG','4788','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','10747','Sint Eustatius DPnet long + Sint Eustatius height',NULL,'EPSG','10745','EPSG','10740',0);
INSERT INTO "usage" VALUES('EPSG','22378','compound_crs','EPSG','10747','EPSG','4788','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','10764','Bonaire DPnet + Bonaire height',NULL,'EPSG','10759','EPSG','10763',0);
INSERT INTO "usage" VALUES('EPSG','22379','compound_crs','EPSG','10764','EPSG','3822','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','10765','Bonaire 2004 + Bonaire height',NULL,'EPSG','10762','EPSG','10763',0);
INSERT INTO "usage" VALUES('EPSG','22177','compound_crs','EPSG','10765','EPSG','3822','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10774','EUREF-FIN / TM35FIN(E,N) + N2000 height',NULL,'EPSG','3067','EPSG','3900',0);
INSERT INTO "usage" VALUES('EPSG','22245','compound_crs','EPSG','10774','EPSG','3333','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','10826','LKS-92 + Latvia 2000 height',NULL,'EPSG','4661','EPSG','7700',0);
INSERT INTO "usage" VALUES('EPSG','22632','compound_crs','EPSG','10826','EPSG','3268','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10839','LKS-2020 + Latvia 2000 height',NULL,'EPSG','10305','EPSG','7700',0);
INSERT INTO "usage" VALUES('EPSG','22700','compound_crs','EPSG','10839','EPSG','3268','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10852','EWR3 Grid + ODN height',NULL,'EPSG','10851','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','22762','compound_crs','EPSG','10852','EPSG','4799','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','10864','WSPG Grid + ODN height',NULL,'EPSG','10863','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','22839','compound_crs','EPSG','10864','EPSG','4801','EPSG','1293');
INSERT INTO "compound_crs" VALUES('EPSG','10865','CGRS93 + Famagusta 1960 height',NULL,'EPSG','6311','EPSG','7446',0);
INSERT INTO "usage" VALUES('EPSG','22850','compound_crs','EPSG','10865','EPSG','3236','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','10904','Asse 2025 + Asse 2025 height',NULL,'EPSG','10898','EPSG','10900',0);
INSERT INTO "usage" VALUES('EPSG','23351','compound_crs','EPSG','10904','EPSG','4805','EPSG','1144');
INSERT INTO "compound_crs" VALUES('EPSG','10906','Asse 2025 / Gauss-Kruger zone 4 (E-N) + Asse 2025 height',NULL,'EPSG','10899','EPSG','10900',0);
INSERT INTO "usage" VALUES('EPSG','23114','compound_crs','EPSG','10906','EPSG','4805','EPSG','1144');
INSERT INTO "compound_crs" VALUES('EPSG','10920','CSRN2025 (NAD83 2011) + COH88 2025 (NAVD88) height',NULL,'EPSG','10910','EPSG','10918',0);
INSERT INTO "usage" VALUES('EPSG','23574','compound_crs','EPSG','10920','EPSG','1375','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','11000','ETRS89-NOR [EUREF89] + SVD2024 height',NULL,'EPSG','10875','EPSG','10999',0);
INSERT INTO "usage" VALUES('EPSG','24134','compound_crs','EPSG','11000','EPSG','4831','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','11158','RGM23 + IGN 2023 Mayotte height',NULL,'EPSG','10671','EPSG','11157',0);
INSERT INTO "usage" VALUES('EPSG','24603','compound_crs','EPSG','11158','EPSG','3340','EPSG','1270');
INSERT INTO "compound_crs" VALUES('EPSG','20001','ETRS89-NOR [EUREF89] + SVD2006 height',NULL,'EPSG','10875','EPSG','20000',0);
INSERT INTO "usage" VALUES('EPSG','17956','compound_crs','EPSG','20001','EPSG','4058','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','20003','MWC18 Grid + ODN height',NULL,'EPSG','20002','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','18337','compound_crs','EPSG','20003','EPSG','4666','EPSG','1141');
+103 -9
View File
@@ -8,7 +8,7 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','4435','Puerto Rico to NAD83(
INSERT INTO "usage" VALUES('EPSG','9074','concatenated_operation','EPSG','4435','EPSG','3634','EPSG','1031');
INSERT INTO "concatenated_operation" VALUES('EPSG','4837','Amersfoort to ED50 (1)','Adopted by NAM in 2006, replacing polynomial tfms 1046, 6304, 1050 and 6306.','EPSG','4289','EPSG','4230',1.5,'NAM-Nld 2006',0);
INSERT INTO "usage" VALUES('EPSG','9130','concatenated_operation','EPSG','4837','EPSG','1275','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','5190','Tokyo 1892 to Korea 2000 (1)','','EPSG','5132','EPSG','4737',1.0,'OGP-Kor',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','5190','Tokyo 1892 to KGD2002 (1)','','EPSG','5132','EPSG','4737',1.0,'OGP-Kor',0);
INSERT INTO "usage" VALUES('EPSG','9275','concatenated_operation','EPSG','5190','EPSG','3266','EPSG','1050');
INSERT INTO "concatenated_operation" VALUES('EPSG','5192','Tokyo 1892 to WGS 84 (1)','','EPSG','5132','EPSG','4326',1.0,'OGP-Kor',0);
INSERT INTO "usage" VALUES('EPSG','9277','concatenated_operation','EPSG','5192','EPSG','3266','EPSG','1050');
@@ -28,9 +28,9 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','6874','Tananarive (Paris) to
INSERT INTO "usage" VALUES('EPSG','9803','concatenated_operation','EPSG','6874','EPSG','3273','EPSG','1043');
INSERT INTO "concatenated_operation" VALUES('EPSG','7811','NTF (Paris) to RGF93 v1 (2)','Second step is an emulation (using the NTv2 method) of the geocentric interpolation method described in CT code 9337. Note that the grid file parameters are of opposite sign.','EPSG','4807','EPSG','4171',1.0,'IOGP-Fra NTv2',0);
INSERT INTO "usage" VALUES('EPSG','10276','concatenated_operation','EPSG','7811','EPSG','3694','EPSG','1041');
INSERT INTO "concatenated_operation" VALUES('EPSG','7965','Poolbeg height (ft(Br36)) to Malin Head height (1)','','EPSG','5754','EPSG','5731',0.1,'1',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','7965','Poolbeg height (ft(Br36)) to Malin Head height (1)','','EPSG','5754','EPSG','5731',0.1,'EPSG-Ire',0);
INSERT INTO "usage" VALUES('EPSG','10349','concatenated_operation','EPSG','7965','EPSG','1305','EPSG','1059');
INSERT INTO "concatenated_operation" VALUES('EPSG','7967','Poolbeg height (ft(Br36)) to Belfast height (1)','','EPSG','5754','EPSG','5732',0.1,'1',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','7967','Poolbeg height (ft(Br36)) to Belfast height (1)','','EPSG','5754','EPSG','5732',0.1,'EPSG-Ire',0);
INSERT INTO "usage" VALUES('EPSG','10351','concatenated_operation','EPSG','7967','EPSG','2530','EPSG','1059');
INSERT INTO "concatenated_operation" VALUES('EPSG','7973','NGVD29 height (ftUS) to NAVD88 height (1)','','EPSG','5702','EPSG','5703',0.02,'IOGP - US Conus W',0);
INSERT INTO "usage" VALUES('EPSG','10356','concatenated_operation','EPSG','7973','EPSG','2950','EPSG','1099');
@@ -371,9 +371,9 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','8631','Garoua to WGS 84 (1)'
INSERT INTO "usage" VALUES('EPSG','10723','concatenated_operation','EPSG','8631','EPSG','2590','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','8632','Kousseri to WGS 84 (1)','','EPSG','4198','EPSG','4326',6.0,'EPSG-Cmr',0);
INSERT INTO "usage" VALUES('EPSG','10724','concatenated_operation','EPSG','8632','EPSG','2591','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','8633','Yoff to WGS 84 (1)','Derived via WGS72. Can be used as a single positon vector transformation with parameter vaues of dX = -37 m, dY = +157 m, dZ = +89.5 m, rX = rY = 0 sec, rZ = 0.554 sec, dS = 0.219 ppm','EPSG','4310','EPSG','4326',26.0,'EPSG-SEN',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8633','Yoff to WGS 84 (1)','Derived via WGS72. Can be used as a single position vector transformation with parameter values of dX = -37 m, dY = +157 m, dZ = +89.5 m, rX = rY = 0 sec, rZ = 0.554 sec, dS = 0.219 ppm','EPSG','4310','EPSG','4326',26.0,'EPSG-SEN',0);
INSERT INTO "usage" VALUES('EPSG','10725','concatenated_operation','EPSG','8633','EPSG','1207','EPSG','1160');
INSERT INTO "concatenated_operation" VALUES('EPSG','8634','Beduaram to WGS 84 (1)','Derived via WGS72BE. Can be used as a single positon vector transformation with parameter vaues of dX = -101 m, dY = -111 m, dZ = +188.9 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm','EPSG','4213','EPSG','4326',16.0,'ELF-Ner SE',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8634','Beduaram to WGS 84 (1)','Derived via WGS72BE. Can be used as a single position vector transformation with parameter values of dX = -101 m, dY = -111 m, dZ = +188.9 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm','EPSG','4213','EPSG','4326',16.0,'ELF-Ner SE',0);
INSERT INTO "usage" VALUES('EPSG','10726','concatenated_operation','EPSG','8634','EPSG','2771','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','8635','NAD27 to NAD83(CSRS) (3)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 8585.','EPSG','4267','EPSG','4617',2.5,'EPSG-Can AB',1);
INSERT INTO "usage" VALUES('EPSG','10727','concatenated_operation','EPSG','8635','EPSG','2376','EPSG','1151');
@@ -411,16 +411,42 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','8651','Vientiane 1982 to WGS
INSERT INTO "usage" VALUES('EPSG','10743','concatenated_operation','EPSG','8651','EPSG','1138','EPSG','1045');
INSERT INTO "concatenated_operation" VALUES('EPSG','8652','Lao 1993 to WGS 84 (1)','Can be implemented as a geocentric translation tfm with param. values dX = 43.933m, dY = -129.593m, dZ= -39.331m.','EPSG','4677','EPSG','4326',6.0,'EPSG-Lao',0);
INSERT INTO "usage" VALUES('EPSG','10744','concatenated_operation','EPSG','8652','EPSG','1138','EPSG','1045');
INSERT INTO "concatenated_operation" VALUES('EPSG','8655','Manoca 1962 to WGS 84 (2)','Derived via WGS 72BE. Can be implemented as a single positon vector transformation with parameter vaues of dX = -56.7 m, dY = -171.8 m, dZ = -38.7 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm.','EPSG','4193','EPSG','4326',6.0,'OGP-Cmr',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8655','Manoca 1962 to WGS 84 (2)','Derived via WGS 72BE. Can be implemented as a single position vector transformation with parameter values of dX = -56.7 m, dY = -171.8 m, dZ = -38.7 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm.','EPSG','4193','EPSG','4326',6.0,'OGP-Cmr',0);
INSERT INTO "usage" VALUES('EPSG','10747','concatenated_operation','EPSG','8655','EPSG','2555','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','8656','Mhast (offshore) to WGS 84 (1)','Derived via WGS 72BE. Can be implemented as a single positon vector transformation with parameter vaues of dX = -255.0 m, dY = -29.0 m, dZ = -103.1 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm.','EPSG','4705','EPSG','4326',11.0,'OGP-Ago Cab',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8656','Mhast (offshore) to WGS 84 (1)','Derived via WGS 72BE. Can be implemented as a single position vector transformation with parameter values of dX = -255.0 m, dY = -29.0 m, dZ = -103.1 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm.','EPSG','4705','EPSG','4326',11.0,'OGP-Ago Cab',0);
INSERT INTO "usage" VALUES('EPSG','10748','concatenated_operation','EPSG','8656','EPSG','3180','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','8657','Egypt Gulf of Suez S-650 TL to WGS 84 (1)','Can be implemented as a single positon vector transformation with parameter vaues of dX = -123.0 m, dY = 98.0 m, dZ = 3.9 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm. Replaced by Egypt Gulf of Suez S-650 TL to WGS 84 (2) (tfm code 15846).','EPSG','4706','EPSG','4326',6.0,'OGP-Egy GoS',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','8657','Egypt Gulf of Suez S-650 TL to WGS 84 (1)','Can be implemented as a single position vector transformation with parameter values of dX = -123.0 m, dY = 98.0 m, dZ = 3.9 m, rX = rY = 0 sec, rZ = 0.814 sec, dS = -0.38 ppm. Replaced by Egypt Gulf of Suez S-650 TL to WGS 84 (2) (tfm code 15846).','EPSG','4706','EPSG','4326',6.0,'OGP-Egy GoS',0);
INSERT INTO "usage" VALUES('EPSG','10749','concatenated_operation','EPSG','8657','EPSG','2341','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','8659','Kertau (RSO) to WGS 84 (1)','Step 1 is necessary to rescale the grid units before using step 2.','EPSG','4751','EPSG','4326',15.0,'OGP-Mys',0);
INSERT INTO "usage" VALUES('EPSG','10751','concatenated_operation','EPSG','8659','EPSG','1309','EPSG','1164');
INSERT INTO "concatenated_operation" VALUES('EPSG','9091','ITRF97 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4918','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0);
INSERT INTO "usage" VALUES('EPSG','10905','concatenated_operation','EPSG','9091','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9092','ITRF2000 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4919','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0);
INSERT INTO "usage" VALUES('EPSG','10906','concatenated_operation','EPSG','9092','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9093','ITRF2005 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4896','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0);
INSERT INTO "usage" VALUES('EPSG','10907','concatenated_operation','EPSG','9093','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9094','ITRF2008 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. Replaced by concatenated operation ITRF2008 to NZGD2000 (2) (CT code 9095) which uses the 2013-08-01 model. See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0);
INSERT INTO "usage" VALUES('EPSG','10908','concatenated_operation','EPSG','9094','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9095','ITRF2008 to NZGD2000 (2)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (1) (CT code 9094). Replaced by concatenated op. ITRF2008 to NZGD2000 (3) (CT code 9096). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2013-08-01',0);
INSERT INTO "usage" VALUES('EPSG','10909','concatenated_operation','EPSG','9095','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9096','ITRF2008 to NZGD2000 (3)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (2) (CT code 9095). Replaced by concatenated op. ITRF2008 to NZGD2000 (4) (CT code 9097). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2014-02-01',0);
INSERT INTO "usage" VALUES('EPSG','10910','concatenated_operation','EPSG','9096','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9097','ITRF2008 to NZGD2000 (4)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (3) (CT code 9096). Replaced by concatenated op. ITRF2008 to NZGD2000 (5) (CT code 9098). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2015-01-01',0);
INSERT INTO "usage" VALUES('EPSG','10911','concatenated_operation','EPSG','9097','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9098','ITRF2008 to NZGD2000 (5)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (4) (CT code 9097). Replaced by concatenated op. ITRF2008 to NZGD2000 (6) (CT code 9099). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2016-07-01',0);
INSERT INTO "usage" VALUES('EPSG','10912','concatenated_operation','EPSG','9098','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9099','ITRF2008 to NZGD2000 (6)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (5) (CT code 9098). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2017-12-01',0);
INSERT INTO "usage" VALUES('EPSG','10913','concatenated_operation','EPSG','9099','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9100','ITRF2014 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. Replaced by 2017-12-01 model (CT code 9101). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2016-07-01',0);
INSERT INTO "usage" VALUES('EPSG','10914','concatenated_operation','EPSG','9100','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9101','ITRF2014 to NZGD2000 (2)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2014 to NZGD2000 (1) (CT code 9100). Replaced by concatenated op. ITRF2014 to NZGD2000 (3) (CT code 9102). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2017-12-01',0);
INSERT INTO "usage" VALUES('EPSG','10915','concatenated_operation','EPSG','9101','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9102','ITRF2014 to NZGD2000 (3)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2014 to NZGD2000 (2) (CT code 9101). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2018-07-01',0);
INSERT INTO "usage" VALUES('EPSG','10916','concatenated_operation','EPSG','9102','EPSG','3285','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','9103','NAD27 to ITRF2014 (1)','For use with legacy data - see CT code 9104 for alternative for new areas. Note that steps 1 and 2 are documented in the geog2D domain, steps 3 and 4 in the geocentric domain. Steps 3 and 4 may be implemented in one operation using CT code 8970.','EPSG','4267','EPSG','7789',1.5,'IOGP-Usa GoM legacy',0);
INSERT INTO "usage" VALUES('EPSG','10917','concatenated_operation','EPSG','9103','EPSG','3357','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','9104','NAD27 to ITRF2014 (2)','For use in new operations - see CT code 9103 for alternative for legacy data. Note that steps 1 to 5 are documented in the geog2D domain, steps 6 and 7 in the geocentric domain. Steps 6 and 7 may be implemented in one operation using CT code 8970.','EPSG','4267','EPSG','7789',0.2,'IOGP-Usa GoM non-legacy',0);
INSERT INTO "usage" VALUES('EPSG','10918','concatenated_operation','EPSG','9104','EPSG','3357','EPSG','1136');
INSERT INTO "concatenated_operation" VALUES('EPSG','9336','NAD27 to NAD83(CSRS)v4 (3)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 8585.','EPSG','4267','EPSG','8246',2.5,'EPSG-Can AB',0);
INSERT INTO "usage" VALUES('EPSG','14011','concatenated_operation','EPSG','9336','EPSG','2376','EPSG','1151');
INSERT INTO "concatenated_operation" VALUES('EPSG','9337','NTF (Paris) to RGF93 v1 (1)','See transformation code 7811 for an alternative which uses the NTv2 method as an emulation of the geocentric interpolation in the second step.','EPSG','4807','EPSG','4171',1.0,'IOGP-Fra',0);
@@ -437,5 +463,73 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','9731','ETRS89 to ETRS89 + Ca
INSERT INTO "usage" VALUES('EPSG','15285','concatenated_operation','EPSG','9731','EPSG','2340','EPSG','1270');
INSERT INTO "concatenated_operation" VALUES('EPSG','9750','ETRS89 to Catania 1965 height (1)','','EPSG','4937','EPSG','9721',0.035,'IGM-Ita 2005 Sicily',0);
INSERT INTO "usage" VALUES('EPSG','15385','concatenated_operation','EPSG','9750','EPSG','2340','EPSG','1133');
INSERT INTO "concatenated_operation" VALUES('EPSG','10146','INAGeoid2020 v1 height to INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9471','EPSG','20036',0.2,'BIG-Idn 2022',0);
INSERT INTO "concatenated_operation" VALUES('EPSG','10146','INAGeoid2020 v1 height to INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9471','EPSG','20036',0.2,'BIG-Idn 2022',1);
INSERT INTO "usage" VALUES('EPSG','18452','concatenated_operation','EPSG','10146','EPSG','1122','EPSG','1178');
INSERT INTO "concatenated_operation" VALUES('EPSG','10392','Cascais height to ZH Portugal depth (1)','The Zero Hidrografico (CD Portugal) surface is defined to be 2.0m below the Cascais vertical reference surface off mainland Portugal and 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon (see CT 10393).','EPSG','5780','EPSG','10349',0.0,'IH-Por mainland',0);
INSERT INTO "usage" VALUES('EPSG','20319','concatenated_operation','EPSG','10392','EPSG','4691','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10393','Cascais height to ZH Portugal depth (2)','The Zero Hidrografico surface is defined to be 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon and 2.0m below the Cascais vertical reference surface offshore mainland Portugal (see CT 10392).','EPSG','5780','EPSG','10349',0.0,'IH-Por Tagus',0);
INSERT INTO "usage" VALUES('EPSG','20320','concatenated_operation','EPSG','10393','EPSG','4692','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10394','Cais da Pontinha height to ZH Portugal depth (1)','Offshore of Madeira, Desertas and Selvagens islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.4m below the Cais da Pontinha vertical reference surface.','EPSG','6178','EPSG','10349',0.0,'IH-Por Madeira',0);
INSERT INTO "usage" VALUES('EPSG','20071','concatenated_operation','EPSG','10394','EPSG','4695','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10395','Cais da Vila height to ZH Portugal depth (1)','Offshore of Porto Santo island the Zero Hidrografico (CD Portugal) surface is defined to be 1.4m below the Cais da Vila vertical reference surface.','EPSG','6179','EPSG','10349',0.0,'IH-Por Porto Santo',0);
INSERT INTO "usage" VALUES('EPSG','20105','concatenated_operation','EPSG','10395','EPSG','4696','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10396','Santa Cruz das Flores height to ZH Portugal depth (1)','Offshore of Flores and Corvo islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Santa Cruz das Flores vertical reference surface.','EPSG','6185','EPSG','10349',0.0,'IH-Por Flores',0);
INSERT INTO "usage" VALUES('EPSG','20073','concatenated_operation','EPSG','10396','EPSG','4697','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10397','Horta height to ZH Portugal depth (1)','Offshore of Faial island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Horta vertical reference surface.','EPSG','6181','EPSG','10349',0.0,'IH-Por Faial',0);
INSERT INTO "usage" VALUES('EPSG','20321','concatenated_operation','EPSG','10397','EPSG','4698','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10398','Cais da Madalena height to ZH Portugal depth (1)','Offshore of Pico island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Madalena vertical reference surface.','EPSG','6182','EPSG','10349',0.0,'IH-Por Pico',0);
INSERT INTO "usage" VALUES('EPSG','20322','concatenated_operation','EPSG','10398','EPSG','4699','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10399','Cais das Velas height to ZH Portugal depth (1)','Offshore of S. Jorge island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais das Velas vertical reference surface.','EPSG','6180','EPSG','10349',0.0,'IH-Por S Jorge',0);
INSERT INTO "usage" VALUES('EPSG','20081','concatenated_operation','EPSG','10399','EPSG','4700','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10400','Santa Cruz da Graciosa height to ZH Portugal depth (1)','Offshore of Graciosa island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Santa Cruz da Graciosa vertical reference surface.','EPSG','6183','EPSG','10349',0.0,'IH-Por Graciosa',0);
INSERT INTO "usage" VALUES('EPSG','20106','concatenated_operation','EPSG','10400','EPSG','4734','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10409','Cais da Figueirinha height to ZH Portugal depth (1)','Offshore of Terceira island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Figueirinha vertical reference surface.','EPSG','6184','EPSG','10349',0.0,'IH-Por Terceira',0);
INSERT INTO "usage" VALUES('EPSG','20077','concatenated_operation','EPSG','10409','EPSG','4735','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10410','Ponta Delgada height to ZH Portugal depth (1)','Offshore of S. Miguel island the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Ponta Delgada vertical reference surface.','EPSG','6187','EPSG','10349',0.0,'IH-Por S Miguel',0);
INSERT INTO "usage" VALUES('EPSG','20084','concatenated_operation','EPSG','10410','EPSG','4736','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10411','Cais da Vila do Porto height to ZH Portugal depth (1)','Offshore of Santa Maria and Formigas islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Vila do Porto vertical reference surface.','EPSG','6186','EPSG','10349',0.0,'IH-Por Santa Maria',0);
INSERT INTO "usage" VALUES('EPSG','20102','concatenated_operation','EPSG','10411','EPSG','4737','EPSG','1198');
INSERT INTO "concatenated_operation" VALUES('EPSG','10495','ETRS89 + DVR90(2002) height to ETRS89 + DVR90(2013) height (1)','DVR90(2002) height and DVR90(2013) height may be considered to be equivalent for applications with accuracies of 5cm or worse. At this 5cm accuracy, data referenced to either CRS may be merged without transformation. ','EPSG','10486','EPSG','10487',0.06,'SDFI-Dnk 2013',0);
INSERT INTO "usage" VALUES('EPSG','20518','concatenated_operation','EPSG','10495','EPSG','3237','EPSG','1079');
INSERT INTO "concatenated_operation" VALUES('EPSG','10496','ETRS89 + DVR90(2013) height to ETRS89 + DVR90(2023) height (1)','For applications with accuracies of 5cm or worse, DVR90(2013) height and DVR90(2023) height may be considered to be equivalent. At this 3cm accuracy, data referenced to either CRS may be merged without transformation. ','EPSG','10487','EPSG','10488',0.03,'SDFI-Dnk 2023',0);
INSERT INTO "usage" VALUES('EPSG','20516','concatenated_operation','EPSG','10496','EPSG','1080','EPSG','1273');
INSERT INTO "concatenated_operation" VALUES('EPSG','10616','SRGI2013 + INAGeoid2020 v1 height to SRGI2013 + INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9529','EPSG','20043',0.2,'BIG-Idn 2022',0);
INSERT INTO "usage" VALUES('EPSG','21321','concatenated_operation','EPSG','10616','EPSG','1122','EPSG','1178');
INSERT INTO "concatenated_operation" VALUES('EPSG','10675','BES2020 Saba to Saba height (1)','This operation is not reversible because step 2 is not reversible. For a reversible alternative see BES2020 Saba to Saba + Saba height (1) (code 10755).','EPSG','10638','EPSG','10642',0.25,'NSGI-Bes Saba 2020',0);
INSERT INTO "usage" VALUES('EPSG','21877','concatenated_operation','EPSG','10675','EPSG','4757','EPSG','1133');
INSERT INTO "concatenated_operation" VALUES('EPSG','10754','BES2020 Sint Eustatius to Sint Eustatius height (1)','This operation is not reversible because step 2 is not reversible. For a reversible alternative see BES2020 Sint Eustatius to Sint Eustatius + Sint Eustatius height (1) (code 10756).','EPSG','10738','EPSG','10740',0.25,'NSGI-Bes SEu 2020',0);
INSERT INTO "usage" VALUES('EPSG','22322','concatenated_operation','EPSG','10754','EPSG','4788','EPSG','1133');
INSERT INTO "concatenated_operation" VALUES('EPSG','10755','BES2020 Saba to Saba + Saba height (1)','Reversible alternative to BES2020 Saba to Saba height (1) (code 10675).','EPSG','10638','EPSG','10643',0.25,'NSGI-Bes Saba 2020',0);
INSERT INTO "usage" VALUES('EPSG','22323','concatenated_operation','EPSG','10755','EPSG','4757','EPSG','1270');
INSERT INTO "concatenated_operation" VALUES('EPSG','10756','BES2020 Sint Eustatius to Sint Eustatius + Sint Eustatius height (1)','Reversible alternative to BES2020 Sint Eustatius to Sint Eustatius height (1) (code 10754).','EPSG','10738','EPSG','10741',0.25,'NSGI-Bes SEu 2020',0);
INSERT INTO "usage" VALUES('EPSG','22324','concatenated_operation','EPSG','10756','EPSG','4788','EPSG','1270');
INSERT INTO "concatenated_operation" VALUES('EPSG','10778','KKJ to EUREF-FIN (3)','Recommended transformation between KKJ and EUREF-FIN. Use this in preference to transformation KKJ to EUREF-FIN (2) (code 10098).','EPSG','4123','EPSG','10690',0.03,'NLS-FIN TINshift LatLon',0);
INSERT INTO "usage" VALUES('EPSG','22361','concatenated_operation','EPSG','10778','EPSG','3333','EPSG','1273');
INSERT INTO "concatenated_operation" VALUES('EPSG','10815','ITRF2014 to NKG_ETRF14 (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined input and is used as the source epoch in step 2.','EPSG','7789','EPSG','10805',0.001,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','23998','concatenated_operation','EPSG','10815','EPSG','4795','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10816','ITRF2014 to EUREF-FIN (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined and is used as the source epoch in step 2.','EPSG','7789','EPSG','10688',0.004,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','23999','concatenated_operation','EPSG','10816','EPSG','1095','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10817','ITRF2014 to ETRS89-NOR [EUREF89] (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined and is used as the source epoch in step 2.','EPSG','7789','EPSG','10873',0.006,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24000','concatenated_operation','EPSG','10817','EPSG','1352','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10818','ITRF2014 to LKS94 (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined and is used as the source epoch in step 2.','EPSG','7789','EPSG','4950',0.013,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24001','concatenated_operation','EPSG','10818','EPSG','1145','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10824','ITRF2014 to SWEREF99 (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined and is used as the source epoch in step 2. For coordinates originating before 2021-02-07, the NKG2008 transformation should be used.','EPSG','7789','EPSG','4976',0.004,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24002','concatenated_operation','EPSG','10824','EPSG','1225','EPSG','1180');
INSERT INTO "concatenated_operation" VALUES('EPSG','10825','ITRF2014 to EST97 (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined and is used as the source epoch in step 2.','EPSG','7789','EPSG','4934',0.005,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24003','concatenated_operation','EPSG','10825','EPSG','1090','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10868','ITRF2020 to EST97 (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2020) is user-defined and is used as the source epoch in step 2.','EPSG','9988','EPSG','4934',0.005,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24004','concatenated_operation','EPSG','10868','EPSG','1090','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10869','ITRF2020 to EUREF-FIN (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2020) is user-defined and is used as the source epoch in step 2.','EPSG','9988','EPSG','10688',0.004,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24005','concatenated_operation','EPSG','10869','EPSG','1095','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10870','ITRF2020 to ETRS89-NOR [EUREF89] (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2020) is user-defined and is used as the source epoch in step 2.','EPSG','9988','EPSG','10873',0.006,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24006','concatenated_operation','EPSG','10870','EPSG','1352','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10871','ITRF2020 to LKS94 (1)','The coordinate epoch of the coordinates referenced to the source CRS (ITRF2020) is user-defined input and is used as the source epoch in step 2.','EPSG','9988','EPSG','4950',0.013,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24013','concatenated_operation','EPSG','10871','EPSG','1145','EPSG','1180');
INSERT INTO "concatenated_operation" VALUES('EPSG','10872','ITRF2020 to SWEREF99 (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2020) is user-defined and is used as the source epoch in step 2. For coordinates originating before 2021-02-07, the NKG2008 transformation should be used.','EPSG','9988','EPSG','4976',0.004,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24008','concatenated_operation','EPSG','10872','EPSG','1225','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10894','ITRF2014 to ETRS89-DNK (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2014) is user-defined input and is used as the source epoch in step 2.','EPSG','7789','EPSG','10890',0.006,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24010','concatenated_operation','EPSG','10894','EPSG','1080','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','10895','ITRF2020 to ETRS89-DNK (1)','The coordinate epoch (in years) of the coordinates referenced to the source CRS (ITRF2020) is user-defined input and is used as the source epoch in step 2.','EPSG','9988','EPSG','10890',0.006,'NKG2020',0);
INSERT INTO "usage" VALUES('EPSG','24011','concatenated_operation','EPSG','10895','EPSG','1080','EPSG','1027');
INSERT INTO "concatenated_operation" VALUES('EPSG','11005','SVD2006 height to SVD2024 height (1)','Accuracy is RMS of the accuracies of the two concatenated operation steps.','EPSG','20000','EPSG','10999',1.4,'NMA-Sjm SV',0);
INSERT INTO "usage" VALUES('EPSG','24141','concatenated_operation','EPSG','11005','EPSG','4831','EPSG','1059');
+555 -443
View File
@@ -1,445 +1,557 @@
--- This file has been generated by scripts/build_db.py. DO NOT EDIT !
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',1,'EPSG','3895');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',2,'EPSG','1618');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',1,'EPSG','3913');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',2,'EPSG','3962');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',1,'EPSG','1461');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',2,'EPSG','1495');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',1,'EPSG','1672');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',2,'EPSG','1311');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',1,'EPSG','5134');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',2,'EPSG','5189');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',1,'EPSG','5134');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',2,'EPSG','5191');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',1,'EPSG','1884');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',2,'EPSG','4836');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',1,'EPSG','5238');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',2,'EPSG','5227');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',1,'EPSG','1884');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',2,'EPSG','5239');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',1,'EPSG','1756');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',2,'EPSG','1988');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',1,'EPSG','6712');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',2,'EPSG','6713');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',2,'EPSG','1496');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',1,'EPSG','1265');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',2,'EPSG','6873');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',1,'EPSG','1763');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',2,'EPSG','15958');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',1,'EPSG','7813');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',2,'EPSG','7964');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',1,'EPSG','7813');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',2,'EPSG','7966');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',1,'EPSG','7813');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',2,'EPSG','7969');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',1,'EPSG','7813');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',2,'EPSG','7970');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',1,'EPSG','7813');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',2,'EPSG','7971');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',1,'EPSG','7812');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',2,'EPSG','7977');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',1,'EPSG','7980');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',2,'EPSG','7812');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',1,'EPSG','7980');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',2,'EPSG','7812');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',3,'EPSG','7813');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',1,'EPSG','1147');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',2,'EPSG','1146');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',1,'EPSG','1763');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',2,'EPSG','1193');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',1,'EPSG','1755');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',2,'EPSG','1125');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',1,'EPSG','1262');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',2,'EPSG','1169');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',1,'EPSG','1265');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',2,'EPSG','1227');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',1,'EPSG','1759');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',2,'EPSG','8452');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',1,'EPSG','1273');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',1,'EPSG','1763');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',2,'EPSG','1276');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',1,'EPSG','1763');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',2,'EPSG','1277');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',1,'EPSG','1278');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',1,'EPSG','1279');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',1,'EPSG','1280');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',1,'EPSG','1437');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',1,'EPSG','1274');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',2,'EPSG','1283');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',1,'EPSG','1266');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',2,'EPSG','1294');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',1,'EPSG','1297');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',2,'EPSG','1302');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',1,'EPSG','1298');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',2,'EPSG','1302');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',1,'EPSG','1299');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',2,'EPSG','1302');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',1,'EPSG','1300');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',2,'EPSG','1302');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',1,'EPSG','1301');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',2,'EPSG','1302');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',1,'EPSG','1309');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',1,'EPSG','1310');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',1,'EPSG','1312');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',1,'EPSG','1313');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',1,'EPSG','1757');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',2,'EPSG','1306');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',1,'EPSG','8361');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',2,'EPSG','8362');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',1,'EPSG','1454');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',1,'EPSG','1455');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',1,'EPSG','1456');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',1,'EPSG','1457');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',1,'EPSG','1451');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',1,'EPSG','1458');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',1,'EPSG','1459');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',1,'EPSG','1460');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',1,'EPSG','1461');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',1,'EPSG','1462');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',1,'EPSG','1463');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',1,'EPSG','1464');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',1,'EPSG','1472');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',2,'EPSG','1473');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',1,'EPSG','1599');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',2,'EPSG','1473');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',1,'EPSG','1600');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',2,'EPSG','1473');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',1,'EPSG','1601');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',2,'EPSG','1473');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',1,'EPSG','1602');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',2,'EPSG','1473');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',1,'EPSG','8365');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',2,'EPSG','8364');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',1,'EPSG','8364');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',2,'EPSG','8367');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',1,'EPSG','1506');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',1,'EPSG','1507');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',1,'EPSG','1509');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',2,'EPSG','1511');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',2,'EPSG','1474');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',2,'EPSG','1475');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',2,'EPSG','1476');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',2,'EPSG','1477');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',2,'EPSG','1478');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',2,'EPSG','1479');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',2,'EPSG','1480');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',2,'EPSG','1481');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',2,'EPSG','1482');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',2,'EPSG','1483');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',2,'EPSG','1484');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',2,'EPSG','1485');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',2,'EPSG','1486');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',2,'EPSG','1487');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',2,'EPSG','1488');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',2,'EPSG','1489');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',2,'EPSG','1490');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',2,'EPSG','1491');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',2,'EPSG','1492');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',2,'EPSG','1493');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',2,'EPSG','1494');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',2,'EPSG','1495');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',1,'EPSG','1747');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',2,'EPSG','1496');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',2,'EPSG','1497');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',2,'EPSG','1498');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',2,'EPSG','1499');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',2,'EPSG','1500');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',2,'EPSG','1501');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',2,'EPSG','1502');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',2,'EPSG','1503');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',2,'EPSG','1515');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',1,'EPSG','1243');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',2,'EPSG','1515');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',1,'EPSG','1454');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',2,'EPSG','1520');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',2,'EPSG','1521');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',2,'EPSG','1522');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',2,'EPSG','1523');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',2,'EPSG','1524');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',2,'EPSG','1525');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',2,'EPSG','1526');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',1,'EPSG','1528');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',2,'EPSG','1527');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',1,'EPSG','1539');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',2,'EPSG','1540');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',1,'EPSG','1541');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',1,'EPSG','1545');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',2,'EPSG','1237');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',2,'EPSG','1553');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',2,'EPSG','1554');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',1,'EPSG','1559');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',1,'EPSG','1560');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',1,'EPSG','1568');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',2,'EPSG','1565');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',1,'EPSG','1576');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',2,'EPSG','1473');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',1,'EPSG','1574');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',1,'EPSG','1572');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',2,'EPSG','1188');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',1,'EPSG','1584');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',1,'EPSG','1588');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',1,'EPSG','1570');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',1,'EPSG','1571');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',1,'EPSG','1591');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',1,'EPSG','1578');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',2,'EPSG','1580');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',1,'EPSG','1579');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',2,'EPSG','1580');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',1,'EPSG','1594');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',1,'EPSG','1595');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',1,'EPSG','1596');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',1,'EPSG','1593');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',2,'EPSG','1150');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',1,'EPSG','1611');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',2,'EPSG','1149');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',1,'EPSG','1616');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',2,'EPSG','1237');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',1,'EPSG','1454');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',2,'EPSG','1741');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',1,'EPSG','1461');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',2,'EPSG','1731');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',1,'EPSG','1313');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',2,'EPSG','1752');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',1,'EPSG','1313');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',2,'EPSG','1702');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',2,'EPSG','1704');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',2,'EPSG','1705');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',2,'EPSG','1706');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',2,'EPSG','1707');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',2,'EPSG','1717');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',2,'EPSG','1728');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',2,'EPSG','1708');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',2,'EPSG','1739');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',2,'EPSG','1750');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',2,'EPSG','1712');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',2,'EPSG','1714');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',2,'EPSG','1713');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',2,'EPSG','1748');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',2,'EPSG','1742');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',2,'EPSG','1709');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',2,'EPSG','1743');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',2,'EPSG','1718');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',2,'EPSG','1719');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',2,'EPSG','1721');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',2,'EPSG','1720');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',2,'EPSG','1725');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',2,'EPSG','1722');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',2,'EPSG','1710');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',2,'EPSG','1723');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',2,'EPSG','1711');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',2,'EPSG','1715');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',2,'EPSG','1716');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',2,'EPSG','1724');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',2,'EPSG','1744');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',2,'EPSG','1749');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',2,'EPSG','1726');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',2,'EPSG','1727');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',2,'EPSG','1729');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',2,'EPSG','1745');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',2,'EPSG','1730');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',2,'EPSG','1737');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',2,'EPSG','1732');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',2,'EPSG','1733');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',2,'EPSG','1734');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',2,'EPSG','1735');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',2,'EPSG','1746');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',2,'EPSG','1736');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',2,'EPSG','1747');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',2,'EPSG','1738');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',2,'EPSG','1740');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',1,'EPSG','1805');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',1,'EPSG','1806');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',1,'EPSG','1828');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',2,'EPSG','1238');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',1,'EPSG','1839');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',1,'EPSG','1313');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',2,'EPSG','1849');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',1,'EPSG','1881');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',2,'EPSG','1130');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',1,'EPSG','1756');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',2,'EPSG','1944');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',1,'EPSG','1260');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',2,'EPSG','1837');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',1,'EPSG','1762');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',2,'EPSG','1654');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',1,'EPSG','1882');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',2,'EPSG','1253');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',1,'EPSG','1883');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',2,'EPSG','1897');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',1,'EPSG','1884');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',2,'EPSG','1623');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',1,'EPSG','1891');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',2,'EPSG','1272');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',1,'EPSG','1761');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',2,'EPSG','1891');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',3,'EPSG','1272');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',1,'EPSG','1757');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',2,'EPSG','1618');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',1,'EPSG','1902');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',1,'EPSG','1313');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',2,'EPSG','1950');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',3,'EPSG','1946');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',1,'EPSG','1991');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',2,'EPSG','1986');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',1,'EPSG','1991');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',2,'EPSG','1990');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',1,'EPSG','1071');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',2,'EPSG','1073');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',1,'EPSG','1063');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',2,'EPSG','1065');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',1,'EPSG','1064');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',2,'EPSG','1065');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',1,'EPSG','1902');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',1,'EPSG','15790');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',1,'EPSG','15792');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',2,'EPSG','1240');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',1,'EPSG','15896');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',2,'EPSG','1158');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',1,'EPSG','1241');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',2,'EPSG','8971');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',3,'EPSG','7807');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',4,'EPSG','7790');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',1,'EPSG','1313');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',2,'EPSG','9244');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',1,'EPSG','1763');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',2,'EPSG','9327');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',1,'EPSG','9276');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',2,'EPSG','9275');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',1,'EPSG','8049');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',2,'EPSG','8447');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',1,'EPSG','9459');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',2,'EPSG','8447');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',1,'EPSG','8447');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',2,'EPSG','8448');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',1,'EPSG','9729');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',2,'EPSG','9726');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',1,'EPSG','9727');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',2,'EPSG','9726');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',1,'EPSG','9629');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',2,'EPSG','10145');
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',1,'EPSG','3895',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',2,'EPSG','1618',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',1,'EPSG','3913',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',2,'EPSG','3962',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',1,'EPSG','1461',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',2,'EPSG','1495',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',1,'EPSG','1672',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',2,'EPSG','1311',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',1,'EPSG','5134',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',2,'EPSG','5189',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',1,'EPSG','5134',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',2,'EPSG','5191',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',1,'EPSG','1884',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',2,'EPSG','4836',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',1,'EPSG','5238',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',2,'EPSG','5227',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',1,'EPSG','1884',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',2,'EPSG','5239',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',1,'EPSG','1756',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',2,'EPSG','1988',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',1,'EPSG','6712',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',2,'EPSG','6713',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',2,'EPSG','1496',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',1,'EPSG','1265',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',2,'EPSG','6873',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',1,'EPSG','1763',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',2,'EPSG','15958',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',1,'EPSG','7813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',2,'EPSG','7964',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',1,'EPSG','7813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',2,'EPSG','7966',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',1,'EPSG','7813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',2,'EPSG','7969',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',1,'EPSG','7813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',2,'EPSG','7970',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',1,'EPSG','7813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',2,'EPSG','7971',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',2,'EPSG','7977',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',1,'EPSG','7980',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',2,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',1,'EPSG','7980',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',2,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',3,'EPSG','7813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',1,'EPSG','1147',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',2,'EPSG','1146',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',1,'EPSG','1763',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',2,'EPSG','1193',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',1,'EPSG','1755',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',2,'EPSG','1125',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',1,'EPSG','1262',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',2,'EPSG','1169',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',1,'EPSG','1265',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',2,'EPSG','1227',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',1,'EPSG','1759',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',2,'EPSG','8452',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',1,'EPSG','1273',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',1,'EPSG','1763',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',2,'EPSG','1276',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',1,'EPSG','1763',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',2,'EPSG','1277',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',1,'EPSG','1278',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',1,'EPSG','1279',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',1,'EPSG','1280',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',1,'EPSG','1437',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',1,'EPSG','1274',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',2,'EPSG','1283',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',1,'EPSG','1266',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',2,'EPSG','1294',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',1,'EPSG','1297',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',2,'EPSG','1302',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',1,'EPSG','1298',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',2,'EPSG','1302',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',1,'EPSG','1299',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',2,'EPSG','1302',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',1,'EPSG','1300',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',2,'EPSG','1302',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',1,'EPSG','1301',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',2,'EPSG','1302',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',1,'EPSG','1309',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',1,'EPSG','1310',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',1,'EPSG','1312',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',1,'EPSG','1313',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',1,'EPSG','1757',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',2,'EPSG','1306',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',1,'EPSG','8361',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',2,'EPSG','8362',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',1,'EPSG','1454',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',1,'EPSG','1455',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',1,'EPSG','1456',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',1,'EPSG','1457',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',1,'EPSG','1451',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',1,'EPSG','1458',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',1,'EPSG','1459',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',1,'EPSG','1460',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',1,'EPSG','1461',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',1,'EPSG','1462',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',1,'EPSG','1463',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',1,'EPSG','1464',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',1,'EPSG','1472',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',2,'EPSG','1473',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',1,'EPSG','1599',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',2,'EPSG','1473',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',1,'EPSG','1600',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',2,'EPSG','1473',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',1,'EPSG','1601',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',2,'EPSG','1473',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',1,'EPSG','1602',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',2,'EPSG','1473',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',1,'EPSG','8365',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',2,'EPSG','8364',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',1,'EPSG','8364',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',2,'EPSG','8367',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',1,'EPSG','1506',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',1,'EPSG','1507',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',1,'EPSG','1509',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',2,'EPSG','1511',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',2,'EPSG','1474',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',2,'EPSG','1475',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',2,'EPSG','1476',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',2,'EPSG','1477',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',2,'EPSG','1478',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',2,'EPSG','1479',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',2,'EPSG','1480',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',2,'EPSG','1481',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',2,'EPSG','1482',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',2,'EPSG','1483',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',2,'EPSG','1484',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',2,'EPSG','1485',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',2,'EPSG','1486',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',2,'EPSG','1487',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',2,'EPSG','1488',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',2,'EPSG','1489',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',2,'EPSG','1490',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',2,'EPSG','1491',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',2,'EPSG','1492',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',2,'EPSG','1493',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',2,'EPSG','1494',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',2,'EPSG','1495',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',1,'EPSG','1747',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',2,'EPSG','1496',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',2,'EPSG','1497',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',2,'EPSG','1498',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',2,'EPSG','1499',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',2,'EPSG','1500',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',2,'EPSG','1501',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',2,'EPSG','1502',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',2,'EPSG','1503',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',2,'EPSG','1515',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',1,'EPSG','1243',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',2,'EPSG','1515',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',1,'EPSG','1454',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',2,'EPSG','1520',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',2,'EPSG','1521',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',2,'EPSG','1522',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',2,'EPSG','1523',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',2,'EPSG','1524',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',2,'EPSG','1525',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',2,'EPSG','1526',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',1,'EPSG','1528',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',2,'EPSG','1527',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',1,'EPSG','1539',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',2,'EPSG','1540',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',1,'EPSG','1541',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',1,'EPSG','1545',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',2,'EPSG','1237',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',2,'EPSG','1553',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',2,'EPSG','1554',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',1,'EPSG','1559',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',1,'EPSG','1560',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',1,'EPSG','1568',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',2,'EPSG','1565',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',1,'EPSG','1576',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',2,'EPSG','1473',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',1,'EPSG','1574',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',1,'EPSG','1572',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',2,'EPSG','1188',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',1,'EPSG','1584',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',1,'EPSG','1588',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',1,'EPSG','1570',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',1,'EPSG','1571',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',1,'EPSG','1591',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',1,'EPSG','1578',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',2,'EPSG','1580',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',1,'EPSG','1579',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',2,'EPSG','1580',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',1,'EPSG','1594',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',1,'EPSG','1595',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',1,'EPSG','1596',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',1,'EPSG','1593',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',2,'EPSG','1150',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',1,'EPSG','1611',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',2,'EPSG','1149',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',1,'EPSG','1616',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',2,'EPSG','1237',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',1,'EPSG','1454',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',2,'EPSG','1741',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',1,'EPSG','1461',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',2,'EPSG','1731',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',1,'EPSG','1313',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',2,'EPSG','1752',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',1,'EPSG','1313',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',2,'EPSG','1702',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',2,'EPSG','1704',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',2,'EPSG','1705',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',2,'EPSG','1706',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',2,'EPSG','1707',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',2,'EPSG','1717',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',2,'EPSG','1728',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',2,'EPSG','1708',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',2,'EPSG','1739',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',2,'EPSG','1750',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',2,'EPSG','1712',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',2,'EPSG','1714',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',2,'EPSG','1713',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',2,'EPSG','1748',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',2,'EPSG','1742',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',2,'EPSG','1709',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',2,'EPSG','1743',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',2,'EPSG','1718',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',2,'EPSG','1719',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',2,'EPSG','1721',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',2,'EPSG','1720',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',2,'EPSG','1725',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',2,'EPSG','1722',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',2,'EPSG','1710',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',2,'EPSG','1723',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',2,'EPSG','1711',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',2,'EPSG','1715',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',2,'EPSG','1716',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',2,'EPSG','1724',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',2,'EPSG','1744',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',2,'EPSG','1749',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',2,'EPSG','1726',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',2,'EPSG','1727',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',2,'EPSG','1729',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',2,'EPSG','1745',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',2,'EPSG','1730',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',2,'EPSG','1737',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',2,'EPSG','1732',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',2,'EPSG','1733',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',2,'EPSG','1734',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',2,'EPSG','1735',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',2,'EPSG','1746',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',2,'EPSG','1736',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',2,'EPSG','1747',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',2,'EPSG','1738',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',2,'EPSG','1740',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',1,'EPSG','1805',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',1,'EPSG','1806',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',1,'EPSG','1828',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',2,'EPSG','1238',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',1,'EPSG','1839',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',1,'EPSG','1313',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',2,'EPSG','1849',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',1,'EPSG','1881',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',2,'EPSG','1130',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',1,'EPSG','1756',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',2,'EPSG','1944',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',1,'EPSG','1260',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',2,'EPSG','1837',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',1,'EPSG','1762',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',2,'EPSG','1654',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',1,'EPSG','1882',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',2,'EPSG','1253',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',1,'EPSG','1883',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',2,'EPSG','1897',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',1,'EPSG','1884',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',2,'EPSG','1623',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',1,'EPSG','1891',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',2,'EPSG','1272',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',1,'EPSG','1761',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',2,'EPSG','1891',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',3,'EPSG','1272',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',1,'EPSG','1757',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',2,'EPSG','1618',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',1,'EPSG','1902',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',1,'EPSG','1313',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',2,'EPSG','1950',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',3,'EPSG','1946',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',1,'EPSG','1991',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',2,'EPSG','1986',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',1,'EPSG','1991',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',2,'EPSG','1990',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',1,'EPSG','1071',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',2,'EPSG','1073',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',1,'EPSG','1063',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',2,'EPSG','1065',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',1,'EPSG','1064',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',2,'EPSG','1065',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',1,'EPSG','1902',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',1,'EPSG','15790',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',1,'EPSG','15792',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',2,'EPSG','1240',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',1,'EPSG','15896',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',2,'EPSG','1158',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',1,'EPSG','9079',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',2,'EPSG','9084',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',1,'EPSG','9080',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',2,'EPSG','9084',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',1,'EPSG','9081',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',2,'EPSG','9084',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',1,'EPSG','9082',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',2,'EPSG','9084',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',1,'EPSG','9082',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',2,'EPSG','9085',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',1,'EPSG','9082',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',2,'EPSG','9086',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',1,'EPSG','9082',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',2,'EPSG','9087',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',1,'EPSG','9082',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',2,'EPSG','9088',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',1,'EPSG','9082',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',2,'EPSG','9089',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',1,'EPSG','9083',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',2,'EPSG','9088',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',1,'EPSG','9083',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',2,'EPSG','9089',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',1,'EPSG','9083',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',2,'EPSG','9090',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',1,'EPSG','1241',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',2,'EPSG','8971',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',3,'EPSG','7807',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',4,'EPSG','7790',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',1,'EPSG','8555',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',2,'EPSG','8556',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',3,'EPSG','8861',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',4,'EPSG','8862',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',5,'EPSG','8559',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',6,'EPSG','7807',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',7,'EPSG','7790',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',1,'EPSG','1313',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',2,'EPSG','9244',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',1,'EPSG','1763',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',2,'EPSG','9327',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',1,'EPSG','9276',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',2,'EPSG','9275',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',1,'EPSG','8049',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',2,'EPSG','8447',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',1,'EPSG','9459',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',2,'EPSG','8447',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',1,'EPSG','8447',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',2,'EPSG','8448',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',1,'EPSG','9729',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',2,'EPSG','9726',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',1,'EPSG','9727',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',2,'EPSG','9726',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',1,'EPSG','9629',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',2,'EPSG','10145',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',2,'EPSG','10380',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',2,'EPSG','10381',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',2,'EPSG','10382',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',2,'EPSG','10383',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',2,'EPSG','10384',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',2,'EPSG','10385',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',2,'EPSG','10386',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',2,'EPSG','10387',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',2,'EPSG','10388',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',2,'EPSG','10389',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',2,'EPSG','10390',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',1,'EPSG','7812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',2,'EPSG','10391',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',1,'EPSG','10490',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',2,'EPSG','10492',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',1,'EPSG','10492',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',2,'EPSG','10494',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',1,'EPSG','9629',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',2,'EPSG','10145',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10675',1,'EPSG','10646',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10675',2,'EPSG','10657',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10754',1,'EPSG','10750',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10754',2,'EPSG','10752',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10755',1,'EPSG','10646',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10755',2,'EPSG','10658',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10756',1,'EPSG','10750',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10756',2,'EPSG','10753',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10778',1,'EPSG','18193',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10778',2,'EPSG','10703',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10778',3,'EPSG','16065',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10815',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10815',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10816',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10816',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10816',3,'EPSG','10810',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10817',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10817',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10817',3,'EPSG','10811',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10818',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10818',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10818',3,'EPSG','10812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10824',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10824',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10824',3,'EPSG','10813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10825',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10825',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10825',3,'EPSG','10814',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10868',1,'EPSG','10587',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10868',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10868',3,'EPSG','10814',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10869',1,'EPSG','10587',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10869',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10869',3,'EPSG','10810',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10870',1,'EPSG','10587',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10870',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10870',3,'EPSG','10811',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10871',1,'EPSG','10587',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10871',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10871',3,'EPSG','10812',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10872',1,'EPSG','10587',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10872',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10872',3,'EPSG','10813',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10894',1,'EPSG','8880',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10894',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10894',3,'EPSG','10893',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10895',1,'EPSG','10587',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10895',2,'EPSG','10809',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','10895',3,'EPSG','10893',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','11005',1,'EPSG','10107',NULL);
INSERT INTO "concatenated_operation_step" VALUES('EPSG','11005',2,'EPSG','11004',NULL);
+704
View File
@@ -0,0 +1,704 @@
-- Insertion triggers that implement consistency checks across tables
CREATE TRIGGER ellipsoid_insert_trigger
BEFORE INSERT ON ellipsoid
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on ellipsoid violates constraint: uom should be of type ''length''')
WHERE (SELECT type FROM unit_of_measure WHERE auth_name = NEW.uom_auth_name AND code = NEW.uom_code) != 'length';
END;
CREATE TRIGGER usage_insert_trigger
BEFORE INSERT ON usage
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on usage violates constraint: new entry refers to unexisting code')
WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.object_table_name AND o.auth_name = NEW.object_auth_name AND o.code = NEW.object_code);
SELECT RAISE(ABORT, 'insert on usage violates constraint: extent must not be deprecated when object is not deprecated')
WHERE EXISTS (
SELECT 1 FROM extent JOIN object_view o WHERE
NOT (o.table_name IN ('projected_crs', 'vertical_crs', 'vertical_datum', 'conversion') AND o.auth_name = 'ESRI') AND
o.table_name = NEW.object_table_name AND
o.auth_name = NEW.object_auth_name AND
o.code = NEW.object_code AND
extent.auth_name = NEW.extent_auth_name AND
extent.code = NEW.extent_code AND
extent.deprecated = 1 AND
o.deprecated = 0);
END;
CREATE TRIGGER prime_meridian_insert_trigger
BEFORE INSERT ON prime_meridian
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on prime_meridian violates constraint: uom should be of type ''angle''')
WHERE (SELECT type FROM unit_of_measure WHERE auth_name = NEW.uom_auth_name AND code = NEW.uom_code) != 'angle';
END;
CREATE TRIGGER geodetic_datum_insert_trigger
BEFORE INSERT ON geodetic_datum
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on geodetic_datum violates constraint: ellipsoid must not be deprecated when geodetic_datum is not deprecated')
WHERE EXISTS(SELECT 1 FROM ellipsoid WHERE ellipsoid.auth_name = NEW.ellipsoid_auth_name AND ellipsoid.code = NEW.ellipsoid_code AND ellipsoid.deprecated != 0) AND NEW.deprecated = 0 AND NEW.auth_name != 'ESRI';
SELECT RAISE(ABORT, 'insert on geodetic_datum violates constraint: prime_meridian must not be deprecated when geodetic_datum is not deprecated')
WHERE EXISTS(SELECT 1 FROM prime_meridian WHERE prime_meridian.auth_name = NEW.prime_meridian_auth_name AND prime_meridian.code = NEW.prime_meridian_code AND prime_meridian.deprecated != 0) AND NEW.deprecated = 0;
SELECT RAISE(ABORT, 'frame_reference_epoch and ensemble_accuracy are mutually exclusive')
WHERE NEW.frame_reference_epoch IS NOT NULL AND NEW.ensemble_accuracy IS NOT NULL;
END;
CREATE TRIGGER axis_insert_trigger
BEFORE INSERT ON axis
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on axis violates constraint: coordinate_system_order should be <= coordinate_system.dimension')
WHERE NEW.coordinate_system_order > (SELECT dimension FROM coordinate_system WHERE auth_name = NEW.coordinate_system_auth_name AND code = NEW.coordinate_system_code);
SELECT RAISE(ABORT, 'insert on axis violates constraint: uom should be defined unless the coordinate system is ordinal')
WHERE EXISTS(SELECT 1 FROM coordinate_system cs WHERE cs.type != 'ordinal' AND (NEW.uom_auth_name IS NULL OR NEW.uom_code IS NULL) AND cs.auth_name = NEW.coordinate_system_auth_name AND cs.code = NEW.coordinate_system_code);
END;
CREATE TRIGGER geodetic_crs_insert_trigger
BEFORE INSERT ON geodetic_crs
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: (auth_name, code) must not already exist in crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code);
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: datum must not be deprecated when geodetic_crs is not deprecated')
WHERE EXISTS(SELECT 1 FROM geodetic_datum datum WHERE datum.auth_name = NEW.datum_auth_name AND datum.code = NEW.datum_code AND datum.deprecated != 0) AND NEW.deprecated = 0 AND NEW.text_definition IS NOT NULL;
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.dimension must be 3 for type = ''geocentric''')
WHERE NEW.type = 'geocentric' AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 3;
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.type must be ''Cartesian'' for type = ''geocentric''')
WHERE NEW.type = 'geocentric' AND (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'Cartesian';
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.type must be ''ellipsoidal'' for type = ''geographic 2D'' or ''geographic 3D''')
WHERE NEW.type IN ('geographic 2D', 'geographic 3D') AND (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'ellipsoidal';
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.dimension must be 2 for type = ''geographic 2D''')
WHERE NEW.type = 'geographic 2D' AND NEW.deprecated != 1 AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 2;
SELECT RAISE(ABORT, 'insert on geodetic_crs violates constraint: coordinate_system.dimension must be 3 for type = ''geographic 3D''')
WHERE NEW.type = 'geographic 3D' AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 3;
END;
CREATE TRIGGER vertical_crs_insert_trigger
BEFORE INSERT ON vertical_crs
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: (auth_name, code) must not already exist in crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code);
SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
AND NOT(NEW.auth_name = 'ESRI' and crs_view.table_name = 'geodetic_crs') -- some ESRI vertical CRS are an ellipsoidal height CRS derived from a geodetic CRS
);
SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: datum must not be deprecated when vertical_crs is not deprecated')
WHERE EXISTS(SELECT 1 FROM vertical_crs datum WHERE datum.auth_name = NEW.datum_auth_name AND datum.code = NEW.datum_code AND datum.deprecated != 0) AND NEW.deprecated = 0;
SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: coordinate_system.type must be ''vertical''')
WHERE (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'vertical';
SELECT RAISE(ABORT, 'insert on vertical_crs violates constraint: coordinate_system.dimension must be 1')
WHERE (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 1;
END;
CREATE TRIGGER engineering_crs_insert_trigger
BEFORE INSERT ON engineering_crs
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: (auth_name, code) must not already exist in crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code);
SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0
);
SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: datum must not be deprecated when engineering_crs is not deprecated')
WHERE EXISTS(SELECT 1 FROM engineering_crs datum WHERE datum.auth_name = NEW.datum_auth_name AND datum.code = NEW.datum_code AND datum.deprecated != 0) AND NEW.deprecated = 0;
SELECT RAISE(ABORT, 'insert on engineering_crs violates constraint: coordinate_system.dimension must be 2 or 3')
WHERE (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) NOT IN (2, 3);
END;
CREATE TRIGGER conversion_method_insert_trigger
BEFORE INSERT ON conversion_method
BEGIN
SELECT RAISE(ABORT, 'insert on conversion violates constraint: method should be known')
WHERE (NEW.auth_name || '_' || NEW.code || '_' || NEW.name) NOT IN (
'EPSG_1024_Popular Visualisation Pseudo Mercator',
'EPSG_1026_Mercator (Spherical)',
'EPSG_1027_Lambert Azimuthal Equal Area (Spherical)',
'EPSG_1028_Equidistant Cylindrical',
'EPSG_1029_Equidistant Cylindrical (Spherical)',
'EPSG_1041_Krovak (North Orientated)',
'EPSG_1042_Krovak Modified',
'EPSG_1043_Krovak Modified (North Orientated)',
'EPSG_1051_Lambert Conic Conformal (2SP Michigan)',
'EPSG_1052_Colombia Urban',
'EPSG_1068_Height Depth Reversal',
'EPSG_1069_Change of Vertical Unit',
'EPSG_1104_Change of Vertical Unit',
'EPSG_1078_Equal Earth',
'EPSG_1102_Lambert Conic Conformal (1SP variant B)',
'EPSG_1111_Transverse Mercator 3D',
'EPSG_1119_Equidistant Conic',
'EPSG_1125_Azimuthal Equidistant',
'EPSG_1130_Local Orthographic',
'EPSG_9602_Geographic/geocentric conversions',
'EPSG_9659_Geographic3D to 2D conversion',
'EPSG_9801_Lambert Conic Conformal (1SP)',
'EPSG_9802_Lambert Conic Conformal (2SP)',
'EPSG_9803_Lambert Conic Conformal (2SP Belgium)',
'EPSG_9804_Mercator (variant A)',
'EPSG_9805_Mercator (variant B)',
'EPSG_9806_Cassini-Soldner',
'EPSG_9807_Transverse Mercator',
'EPSG_9808_Transverse Mercator (South Orientated)',
'EPSG_9809_Oblique Stereographic',
'EPSG_9810_Polar Stereographic (variant A)',
'EPSG_9811_New Zealand Map Grid',
'EPSG_9812_Hotine Oblique Mercator (variant A)',
'EPSG_9813_Laborde Oblique Mercator',
'EPSG_9815_Hotine Oblique Mercator (variant B)',
'EPSG_9816_Tunisia Mining Grid',
'EPSG_9817_Lambert Conic Near-Conformal',
'EPSG_9818_American Polyconic',
'EPSG_9819_Krovak',
'EPSG_9820_Lambert Azimuthal Equal Area',
'EPSG_9821_Lambert Azimuthal Equal Area (Spherical)',
'EPSG_9822_Albers Equal Area',
'EPSG_9823_Equidistant Cylindrical (Spherical)',
'EPSG_9824_Transverse Mercator Zoned Grid System',
'EPSG_9826_Lambert Conic Conformal (West Orientated)',
'EPSG_9828_Bonne (South Orientated)',
'EPSG_9829_Polar Stereographic (variant B)',
'EPSG_9830_Polar Stereographic (variant C)',
'EPSG_9831_Guam Projection',
'EPSG_9832_Modified Azimuthal Equidistant',
'EPSG_9833_Hyperbolic Cassini-Soldner',
'EPSG_9834_Lambert Cylindrical Equal Area (Spherical)',
'EPSG_9835_Lambert Cylindrical Equal Area',
'EPSG_9836_Geocentric/topocentric conversions',
'EPSG_9837_Geographic/topocentric conversions',
'EPSG_9838_Vertical Perspective',
'EPSG_9840_Orthographic',
'EPSG_9841_Mercator (1SP) (Spherical)',
'EPSG_9842_Equidistant Cylindrical',
'EPSG_9843_Axis Order Reversal (2D)',
'EPSG_9844_Axis Order Reversal (Geographic3D horizontal)',
'EPSG_9827_Bonne') AND NEW.auth_name != 'PROJ';
END;
CREATE TRIGGER conversion_table_insert_trigger
BEFORE INSERT ON conversion_table
BEGIN
SELECT RAISE(ABORT, 'insert on conversion_table violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code);
END;
CREATE TRIGGER projected_crs_insert_trigger
BEFORE INSERT ON projected_crs
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: (auth_name, code) must not already exist in crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code);
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name NOT IN ('IGNF', 'ESRI'))
);
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: geodetic_crs must not be deprecated when projected_crs is not deprecated')
WHERE EXISTS(SELECT 1 FROM geodetic_crs WHERE geodetic_crs.auth_name = NEW.geodetic_crs_auth_name AND geodetic_crs.code = NEW.geodetic_crs_code AND geodetic_crs.deprecated != 0 AND geodetic_crs.name NOT LIKE 'Unknown datum%' AND geodetic_crs.name NOT LIKE 'Unspecified datum%') AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI' AND NEW.geodetic_crs_auth_name != 'ESRI');
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: conversion must exist when text_definition is NULL')
WHERE NOT EXISTS(SELECT 1 FROM conversion WHERE conversion.auth_name = NEW.conversion_auth_name AND conversion.code = NEW.conversion_code) AND NEW.text_definition IS NULL;
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: conversion must not be deprecated when projected_crs is not deprecated')
WHERE EXISTS(SELECT 1 FROM conversion WHERE conversion.auth_name = NEW.conversion_auth_name AND conversion.code = NEW.conversion_code AND conversion.deprecated != 0) AND NEW.deprecated = 0;
--SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: geodetic_crs must NOT be defined when text_definition is NOT NULL')
-- WHERE (NOT(NEW.geodetic_crs_auth_name IS NULL OR NEW.geodetic_crs_code IS NULL)) AND NEW.text_definition IS NOT NULL;
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.type must be ''cartesian''')
WHERE (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'Cartesian';
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.dimension must be 2 or 3')
-- EPSG:4461 is topocentric
WHERE NOT(NEW.coordinate_system_auth_name = 'EPSG' AND NEW.coordinate_system_code = '4461') AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) NOT IN (2,3);
END;
CREATE TRIGGER compound_crs_insert_trigger
BEFORE INSERT ON compound_crs
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: (auth_name, code) must not already exist in crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.auth_name AND crs_view.code = NEW.code);
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
);
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: horiz_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.horiz_crs_auth_name AND crs_view.code = NEW.horiz_crs_code);
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: horiz_crs must be equal to ''geographic 2D'', ''projected'' or ''engineering''')
WHERE (SELECT type FROM crs_view WHERE crs_view.auth_name = NEW.horiz_crs_auth_name AND crs_view.code = NEW.horiz_crs_code) NOT IN ('geographic 2D', 'projected', 'engineering');
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: vertical_crs must be equal to ''vertical''')
WHERE (SELECT type FROM crs_view WHERE crs_view.auth_name = NEW.vertical_crs_auth_name AND crs_view.code = NEW.vertical_crs_code) NOT IN ('vertical');
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: horiz_crs must not be deprecated when compound_crs is not deprecated')
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.horiz_crs_auth_name AND crs_view.code = NEW.horiz_crs_code AND crs_view.deprecated != 0) AND NEW.deprecated = 0;
SELECT RAISE(ABORT, 'insert on compound_crs violates constraint: vertical_crs must not be deprecated when compound_crs is not deprecated')
WHERE EXISTS (SELECT 1 FROM vertical_crs WHERE vertical_crs.auth_name = NEW.vertical_crs_auth_name AND vertical_crs.code = NEW.vertical_crs_code AND vertical_crs.deprecated != 0) AND NEW.deprecated = 0;
END;
CREATE TRIGGER coordinate_metadata_insert_trigger
BEFORE INSERT ON coordinate_metadata
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on coordinate_metadata violates constraint: (crs_auth_name, crs_code) must already exist in crs_view')
WHERE NOT EXISTS (
SELECT 1 FROM crs_view WHERE
NEW.crs_auth_name IS NOT NULL AND
crs_view.auth_name = NEW.crs_auth_name AND
crs_view.code = NEW.crs_code
UNION ALL SELECT 1 WHERE NEW.crs_auth_name IS NULL);
SELECT RAISE(ABORT, 'insert on coordinate_metadata violates constraint: (crs_auth_name, crs_code) and crs_text_definition are mutually exclusive')
WHERE NEW.crs_auth_name IS NOT NULL AND NEW.crs_text_definition IS NOT NULL;
SELECT RAISE(ABORT, 'insert on coordinate_metadata violates constraint: one of (crs_auth_name, crs_code) or crs_text_definition must be set')
WHERE NEW.crs_auth_name IS NULL AND NEW.crs_text_definition IS NULL;
END;
CREATE TRIGGER helmert_transformation_insert_trigger
BEFORE INSERT ON helmert_transformation_table
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code);
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
);
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: translation_uom.type must be ''length''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.translation_uom_auth_name AND unit_of_measure.code = NEW.translation_uom_code) != 'length';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rotation_uom.type must be ''angle''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rotation_uom_auth_name AND unit_of_measure.code = NEW.rotation_uom_code) != 'angle';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: scale_difference_uom.type must be ''scale''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.scale_difference_uom_auth_name AND unit_of_measure.code = NEW.scale_difference_uom_code) != 'scale';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rate_translation_uom.type must be ''length''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rate_translation_uom_auth_name AND unit_of_measure.code = NEW.rate_translation_uom_code) != 'length';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rate_rotation_uom.type must be ''angle''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rate_rotation_uom_auth_name AND unit_of_measure.code = NEW.rate_rotation_uom_code) != 'angle';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: rate_scale_difference_uom.type must be ''scale''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.rate_scale_difference_uom_auth_name AND unit_of_measure.code = NEW.rate_scale_difference_uom_code) != 'scale';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: epoch_uom.type must be ''time''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.epoch_uom_auth_name AND unit_of_measure.code = NEW.epoch_uom_code) != 'time';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: pivot_uom.type must be ''length''')
WHERE (SELECT type FROM unit_of_measure WHERE unit_of_measure.auth_name = NEW.pivot_uom_auth_name AND unit_of_measure.code = NEW.pivot_uom_code) != 'length';
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: source_crs must not be deprecated when helmert_transformation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: target_crs must not be deprecated when helmert_transformation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: target_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code);
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: target_crs must be geodetic or compound')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code AND crs_view.type IN ('geographic 2D', 'geographic 3D', 'geocentric', 'compound'));
-- check that source and target of the same nature
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: source CRS and target CRS must have consistent geodetic_crs.type')
WHERE EXISTS (SELECT 1 FROM crs_view crs1, crs_view crs2 WHERE
crs1.auth_name = NEW.source_crs_auth_name AND crs1.code = NEW.source_crs_code
AND crs2.auth_name = NEW.target_crs_auth_name AND crs2.code = NEW.target_crs_code
AND NEW.deprecated = 0 AND (
NOT ((crs1.type = crs2.type AND crs1.type IN ('geographic 2D', 'geographic 3D', 'geocentric') AND
NOT(NEW.method_auth_name = 'EPSG' AND NEW.method_code = 1149)) OR
(crs1.type = 'geographic 3D' and crs2.type = 'compound' AND
NEW.method_auth_name = 'EPSG' AND NEW.method_code = 1149))));
-- check that the method used by a Helmert transformation is consistent with the dimensionality of the CRS
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: the domain of the method of helmert_transformation should be consistent with the dimensionality of the CRS')
WHERE NEW.deprecated = 0 AND
(NOT(NEW.method_auth_name = 'EPSG' AND NEW.method_code = 1149) AND EXISTS (SELECT 1 FROM geodetic_crs crs
LEFT JOIN coordinate_operation_method m ON
NEW.method_auth_name = m.auth_name AND NEW.method_code = m.code
WHERE
crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND
((m.name LIKE '%geog2D domain%' AND crs.type != 'geographic 2D') OR
(m.name LIKE '%geog3D domain%' AND crs.type != 'geographic 3D') OR
(m.name LIKE '%geocentric domain%' AND crs.type != 'geocentric')))
OR (NEW.method_auth_name = 'EPSG' AND NEW.method_code = 1149 AND EXISTS (SELECT 1 FROM compound_crs crs
LEFT JOIN coordinate_operation_method m ON
NEW.method_auth_name = m.auth_name AND NEW.method_code = m.code
WHERE
crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND
m.name NOT LIKE '%geog3D domain%')));
-- check that a time-dependent Helmert transformation has its source or target CRS being dynamic
SELECT RAISE(ABORT, 'insert on helmert_transformation violates constraint: a time-dependent Helmert transformations should have at least one of its source or target CRS dynamic')
WHERE NEW.deprecated = 0
AND EXISTS (SELECT 1 FROM coordinate_operation_method m
WHERE NEW.method_auth_name = m.auth_name AND NEW.method_code = m.code AND
m.name LIKE 'Time-dependent%')
AND EXISTS (
SELECT 1 FROM geodetic_crs crs
JOIN geodetic_datum gd ON
gd.auth_name = crs.datum_auth_name AND gd.code = crs.datum_code
WHERE crs.auth_name = NEW.source_crs_auth_name AND
crs.code = NEW.source_crs_code AND
gd.frame_reference_epoch IS NULL)
AND EXISTS (
SELECT 1 FROM geodetic_crs crs
JOIN geodetic_datum gd ON
gd.auth_name = crs.datum_auth_name AND gd.code = crs.datum_code
WHERE crs.auth_name = NEW.target_crs_auth_name AND
crs.code = NEW.target_crs_code AND
gd.frame_reference_epoch IS NULL);
END;
CREATE TRIGGER grid_transformation_insert_trigger
BEFORE INSERT ON grid_transformation
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
AND NOT (NEW.description LIKE 'Reversible alternative to%' AND covwv.description NOT LIKE 'Reversible alternative to%')
AND NEW.code NOT LIKE '%_WITH_NAD83CSRSV7_INTERPOLATION'
);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: source_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.source_crs_auth_name AND crs_view.code = NEW.source_crs_code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: target_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: interpolation_crs(auth_name, code) not found')
WHERE NEW.interpolation_crs_code IS NOT NULL AND NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.interpolation_crs_auth_name AND crs_view.code = NEW.interpolation_crs_code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: interpolation_crs must be a GeodeticCRS on non-TIN shift based files')
WHERE NEW.method_name NOT LIKE '%JSON%' AND NEW.interpolation_crs_code IS NOT NULL AND NOT EXISTS (SELECT 1 FROM geodetic_crs WHERE geodetic_crs.auth_name = NEW.interpolation_crs_auth_name AND geodetic_crs.code = NEW.interpolation_crs_code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: source_crs must not be deprecated when grid_transformation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: target_crs must not be deprecated when grid_transformation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
-- check that grids with NTv2 method are properly registered
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with NTv2 must have its source_crs in geodetic_crs table with type = ''geographic 2D''')
WHERE NEW.method_name = 'NTv2' AND
NOT EXISTS (SELECT 1 FROM geodetic_crs crs WHERE
NEW.source_crs_auth_name = crs.auth_name AND
NEW.source_crs_code = crs.code AND
crs.type = 'geographic 2D');
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with NTv2 has have its target_crs in geodetic_crs table with type = ''geographic 2D''')
WHERE NEW.method_name = 'NTv2' AND
NOT EXISTS (SELECT 1 FROM geodetic_crs crs WHERE
NEW.target_crs_auth_name = crs.auth_name AND
NEW.target_crs_code = crs.code AND
crs.type = 'geographic 2D');
-- check that grids with Geographic3D to GravityRelatedHeight method are properly registered
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Geographic3D to GravityRelatedHeight must have its target_crs in vertical_crs table')
WHERE NEW.deprecated = 0 AND
NEW.method_name LIKE 'Geographic3D to GravityRelatedHeight%' AND
NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE
NEW.target_crs_auth_name = crs.auth_name AND
NEW.target_crs_code = crs.code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Geographic3D to GravityRelatedHeight or Geog3D to Geog2D+XXX must have its source_crs in geodetic_crs table with type = ''geographic 3D''')
WHERE NEW.deprecated = 0 AND
(NEW.method_name LIKE 'Geographic3D to %' OR NEW.method_name LIKE 'Geog3D to %') AND
NOT EXISTS (SELECT 1 FROM geodetic_crs crs WHERE
NEW.source_crs_auth_name = crs.auth_name AND
NEW.source_crs_code = crs.code AND
crs.type = 'geographic 3D');
-- check that transformations with Geog3D to Geog2D+GravityRelatedHeight/Depth family of methods are properly registered
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: a transformation Geog3D to Geog2D+GravityRelatedHeight/Depth must have a geog3D CRS as source')
WHERE NEW.deprecated = 0 AND
NEW.method_name LIKE 'Geog3D to Geog2D+%' AND
NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE
gcrs.auth_name = NEW.source_crs_auth_name AND gcrs.code = NEW.source_crs_code
AND gcrs.type = 'geographic 3D');
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: a transformation Geog3D to Geog2D+GravityRelatedHeight/Depth must have a compound CRS with a geog2D CRS as target')
WHERE NEW.deprecated = 0 AND
NEW.method_name LIKE 'Geog3D to Geog2D+%' AND
NOT EXISTS (SELECT 1 FROM compound_crs ccrs
LEFT JOIN geodetic_crs gcrs ON
gcrs.auth_name = horiz_crs_auth_name AND gcrs.code = horiz_crs_code
WHERE
ccrs.auth_name = NEW.target_crs_auth_name AND ccrs.code = NEW.target_crs_code
AND gcrs.type = 'geographic 2D');
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: a transformation Geog3D to Geog2D+GravityRelatedHeight/Depth must use the same geodetic datum for the source and target CRS')
WHERE NEW.deprecated = 0 AND
NEW.method_name LIKE 'Geog3D to Geog2D+%' AND
NOT EXISTS (SELECT 1 FROM compound_crs ccrs
LEFT JOIN geodetic_crs target_gcrs ON
target_gcrs.auth_name = horiz_crs_auth_name AND target_gcrs.code = horiz_crs_code
LEFT JOIN geodetic_crs source_gcrs ON
source_gcrs.auth_name = NEW.source_crs_auth_name AND source_gcrs.code = NEW.source_crs_code
WHERE
ccrs.auth_name = NEW.target_crs_auth_name AND ccrs.code = NEW.target_crs_code
AND source_gcrs.name = target_gcrs.name);
-- check that grids with 'Vertical Offset by Grid Interpolation' methods are properly registered
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Vertical Offset by Grid Interpolation must have its source_crs in vertical_crs table')
WHERE NEW.method_name LIKE 'Vertical Offset by Grid Interpolation%' AND
NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE
NEW.source_crs_auth_name = crs.auth_name AND
NEW.source_crs_code = crs.code);
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: grid_transformation with Vertical Offset by Grid Interpolation must have its target_crs in vertical_crs table')
WHERE NEW.method_name LIKE 'Vertical Offset by Grid Interpolation%' AND
NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE
NEW.target_crs_auth_name = crs.auth_name AND
NEW.target_crs_code = crs.code);
-- check that grids with 'Geocentric translations using NEU velocity grid (gtg)' method are properly registered
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: source_crs(auth_name, code) must be Geocentric')
WHERE NEW.method_name IN ('Geocentric translations using NEU velocity grid (gtg)') AND NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE gcrs.auth_name = NEW.source_crs_auth_name AND gcrs.code = NEW.source_crs_code AND type = 'geocentric');
SELECT RAISE(ABORT, 'insert on grid_transformation violates constraint: target_crs(auth_name, code) must be Geocentric')
WHERE NEW.method_name IN ('Geocentric translations using NEU velocity grid (gtg)') AND NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE gcrs.auth_name = NEW.target_crs_auth_name AND gcrs.code = NEW.target_crs_code AND type = 'geocentric');
END;
CREATE TRIGGER grid_packages_insert_trigger
BEFORE INSERT ON grid_packages
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on grid_packages violates constraint: open_license must be set when url is not NULL')
WHERE NEW.open_license IS NULL AND NEW.url IS NOT NULL;
SELECT RAISE(ABORT, 'insert on grid_packages violates constraint: direct_download must be set when url is not NULL')
WHERE NEW.direct_download IS NULL AND NEW.url IS NOT NULL;
END;
CREATE TRIGGER grid_alternatives_insert_trigger
BEFORE INSERT ON grid_alternatives
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on grid_alternatives violates constraint: original_grid_name must be referenced in grid_transformation.grid_name or in other_transformation.method_name')
WHERE NEW.original_grid_name NOT LIKE 'NOT-YET-IN-GRID-TRANSFORMATION-%' AND
NOT EXISTS (
SELECT 1 FROM grid_transformation WHERE grid_name = NEW.original_grid_name
UNION ALL
SELECT 1 FROM other_transformation WHERE
(method_auth_name = 'PROJ' AND
method_name LIKE '%' || NEW.original_grid_name || '%') OR grid_name = NEW.original_grid_name);
END;
CREATE TRIGGER other_transformation_insert_trigger
BEFORE INSERT ON other_transformation
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code);
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
);
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: source_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.source_crs_auth_name AND crs_view.code = NEW.source_crs_code);
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: target_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code);
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: source_crs must not be deprecated when other_transformation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: target_crs must not be deprecated when other_transformation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
-- check that transformations operations between vertical CRS are from/into a vertical CRS
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: transformation operating on vertical CRS must have a source CRS being a vertical CRS')
WHERE NEW.deprecated = 0 AND
NEW.method_name IN ('Vertical Offset', 'Height Depth Reversal', 'Change of Vertical Unit') AND
NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE
crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code);
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: transformation operating on vertical CRS must have a target CRS being a vertical CRS')
WHERE NEW.deprecated = 0 AND
NEW.method_name IN ('Vertical Offset', 'Height Depth Reversal', 'Change of Vertical Unit') AND
NOT EXISTS (SELECT 1 FROM vertical_crs crs WHERE
crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code);
-- check that 'Geographic2D with Height Offsets' transformations have a compound CRS with a geog2D as source
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: a transformation Geographic2D with Height Offsets must have a compound CRS with a geog2D as source')
WHERE NEW.deprecated = 0 AND
NEW.method_name = 'Geographic2D with Height Offsets' AND
NOT EXISTS (SELECT 1 FROM compound_crs ccrs
LEFT JOIN geodetic_crs gcrs ON
gcrs.auth_name = horiz_crs_auth_name AND gcrs.code = horiz_crs_code
WHERE
ccrs.auth_name = NEW.source_crs_auth_name AND ccrs.code = NEW.source_crs_code
AND gcrs.type = 'geographic 2D');
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: a transformation Geographic2D with Height Offsets must have a geographic 3D CRS as target')
WHERE NEW.deprecated = 0 AND
NEW.method_name = 'Geographic2D with Height Offsets' AND
NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE
gcrs.auth_name = NEW.target_crs_auth_name AND gcrs.code = NEW.target_crs_code
AND gcrs.type = 'geographic 3D');
-- check that operations with 'Geocen translations by grid (gtg) & Geocen translations NEU velocities (gtg)' and 'Position Vector (geocen) & Geocen translations NEU velocities (gtg)' methods are properly registered
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: source_crs(auth_name, code) must be Geocentric')
WHERE NEW.method_name IN ('Geocen translations by grid (gtg) & Geocen translations NEU velocities (gtg)', 'Position Vector (geocen) & Geocen translations NEU velocities (gtg)') AND NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE gcrs.auth_name = NEW.source_crs_auth_name AND gcrs.code = NEW.source_crs_code AND type = 'geocentric');
SELECT RAISE(ABORT, 'insert on other_transformation violates constraint: target_crs(auth_name, code) must be Geocentric')
WHERE NEW.method_name IN ('Geocen translations by grid (gtg) & Geocen translations NEU velocities (gtg)', 'Position Vector (geocen) & Geocen translations NEU velocities (gtg)') AND NOT EXISTS (SELECT 1 FROM geodetic_crs gcrs WHERE gcrs.auth_name = NEW.target_crs_auth_name AND gcrs.code = NEW.target_crs_code AND type = 'geocentric');
END;
CREATE TRIGGER concatenated_operation_insert_trigger
BEFORE INSERT ON concatenated_operation
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: (auth_name, code) must not already exist in coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.auth_name AND covwv.code = NEW.code);
SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) coordinate_operation_with_conversion_view')
WHERE EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.name = NEW.name AND covwv.deprecated = 0 AND NEW.deprecated = 0
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
);
SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: source_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.source_crs_auth_name AND crs_view.code = NEW.source_crs_code);
SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: target_crs(auth_name, code) not found')
WHERE NOT EXISTS (SELECT 1 FROM crs_view WHERE crs_view.auth_name = NEW.target_crs_auth_name AND crs_view.code = NEW.target_crs_code);
SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: source_crs must not be deprecated when concatenated_operation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.source_crs_auth_name AND crs.code = NEW.source_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
SELECT RAISE(ABORT, 'insert on concatenated_operation violates constraint: target_crs must not be deprecated when concatenated_operation is not deprecated')
WHERE EXISTS(SELECT 1 FROM crs_view crs WHERE crs.auth_name = NEW.target_crs_auth_name AND crs.code = NEW.target_crs_code AND crs.deprecated != 0) AND NEW.deprecated = 0 AND NOT (NEW.auth_name = 'ESRI');
END;
CREATE TRIGGER concatenated_operation_step_insert_trigger
BEFORE INSERT ON concatenated_operation_step
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on concatenated_operation_step violates constraint: (step_auth_name, step_code) must already exist in coordinate_operation_with_conversion_view')
WHERE NOT EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.step_auth_name AND covwv.code = NEW.step_code);
SELECT RAISE(ABORT, 'insert on concatenated_operation_step violates constraint: step should not be a concatenated_operation')
WHERE EXISTS(SELECT 1 FROM concatenated_operation WHERE auth_name = NEW.step_auth_name AND code = NEW.step_code);
-- NOTE: it would be good to be able to do the same for the last step, but
-- we don't know at INSERT time which one is going to be the last one...
SELECT RAISE(ABORT, 'insert on concatenated_operation_step violates constraint: step 1 must be a conversion or its source_crs or target_crs must be the source_crs of the concatenated_operation')
WHERE
NEW.step_number = 1
-- skip deprecated concatenated operations, or some blocklisted EPSG operations
AND NOT EXISTS (
SELECT 1 FROM concatenated_operation concat_op WHERE
concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code
AND concat_op.deprecated = 1)
-- check if source_crs of step 1 is the source_crs of the concatenated_operation (by CRS code)
AND NOT EXISTS (
SELECT 1 FROM coordinate_operation_view step_op
LEFT JOIN concatenated_operation concat_op ON
concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code
WHERE concat_op.deprecated = 0
AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code
AND concat_op.source_crs_auth_name = step_op.source_crs_auth_name
AND concat_op.source_crs_code = step_op.source_crs_code)
-- same as above, but check by CRS name, and only for geodetic CRS.
-- For example the concatenated operation EPSG:9683 ("ITRF2014 to GDA94 (2)")
-- has EPSG:9000 "ITRF2014" (geographic 2D) as source CRS
-- but its first step is EPSG:8049 ("ITRF2014 to GDA2020 (1)") which has
-- EPSG:7789 "ITRF2014" (geocentric) as source CRS !
AND NOT EXISTS (
SELECT 1 FROM coordinate_operation_view step_op
LEFT JOIN concatenated_operation concat_op ON
concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code
LEFT JOIN geodetic_crs concat_op_source_crs ON
concat_op_source_crs.auth_name = concat_op.source_crs_auth_name
AND concat_op_source_crs.code = concat_op.source_crs_code
LEFT JOIN geodetic_crs step_op_source_crs ON
step_op_source_crs.auth_name = step_op.source_crs_auth_name
AND step_op_source_crs.code = step_op.source_crs_code
WHERE concat_op.deprecated = 0
AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code
AND concat_op_source_crs.name = step_op_source_crs.name)
-- case for EPSG:10146 "INAGeoid2020 v1 height to INAGeoid v2 height (1)"
-- that has EPSG:9471 "INAGeoid2020 v1 height" as source CRS
-- but its first step is EPSG:9629 "SRGI2013 to SRGI2013 + INAGeoid2020 v1 height (1)"
-- that has EPSG:9529 "SRGI2013 + INAGeoid2020 v1 height" as target CRS
AND NOT EXISTS (
SELECT 1 FROM coordinate_operation_view step_op
LEFT JOIN concatenated_operation concat_op ON
concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code
LEFT JOIN vertical_crs concat_op_source_crs ON
concat_op_source_crs.auth_name = concat_op.source_crs_auth_name
AND concat_op_source_crs.code = concat_op.source_crs_code
LEFT JOIN compound_crs step_op_target_crs ON
step_op_target_crs.auth_name = step_op.target_crs_auth_name
AND step_op_target_crs.code = step_op.target_crs_code
WHERE concat_op.deprecated = 0
AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code
AND step_op_target_crs.name LIKE '% + '|| concat_op_source_crs.name)
-- or if source_crs of step 1 is the target_crs of the concatenated_operation
AND NOT EXISTS (
SELECT 1 FROM coordinate_operation_view step_op
LEFT JOIN concatenated_operation concat_op ON
concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code
WHERE concat_op.deprecated = 0
AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code
AND concat_op.source_crs_auth_name = step_op.target_crs_auth_name
AND concat_op.source_crs_code = step_op.target_crs_code)
-- or if source_crs of step 1 is a conversion
AND NOT EXISTS (
SELECT 1 FROM conversion_table step_op
LEFT JOIN concatenated_operation concat_op ON
concat_op.auth_name = NEW.operation_auth_name AND concat_op.code = NEW.operation_code
WHERE concat_op.deprecated = 0
AND step_op.auth_name = NEW.step_auth_name AND step_op.code = NEW.step_code)
;
END;
CREATE TRIGGER geoid_model_insert_trigger
BEFORE INSERT ON geoid_model
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on geoid_model violates constraint: (operation_auth_name, operation_code) must already exist in coordinate_operation_with_conversion_view')
WHERE NOT EXISTS (SELECT 1 FROM coordinate_operation_with_conversion_view covwv WHERE covwv.auth_name = NEW.operation_auth_name AND covwv.code = NEW.operation_code);
END;
CREATE TRIGGER alias_name_insert_trigger
BEFORE INSERT ON alias_name
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on alias_name violates constraint: new entry refers to unexisting code')
WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.auth_name AND o.code = NEW.code);
END;
CREATE TRIGGER supersession_insert_trigger
BEFORE INSERT ON supersession
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on supersession violates constraint: superseded entry refers to unexisting code')
WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.superseded_table_name AND o.auth_name = NEW.superseded_auth_name AND o.code = NEW.superseded_code);
SELECT RAISE(ABORT, 'insert on supersession violates constraint: replacement entry refers to unexisting code')
WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.replacement_table_name AND o.auth_name = NEW.replacement_auth_name AND o.code = NEW.replacement_code);
END;
CREATE TRIGGER deprecation_insert_trigger
BEFORE INSERT ON deprecation
FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on deprecation violates constraint: deprecated entry refers to unexisting code')
WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.deprecated_auth_name AND o.code = NEW.deprecated_code);
SELECT RAISE(ABORT, 'insert on deprecation violates constraint: replacement entry refers to unexisting code')
WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.replacement_auth_name AND o.code = NEW.replacement_code);
END;
+647 -412
View File
File diff suppressed because it is too large. Load diff
+12 -3
View File
@@ -71,7 +71,7 @@ BEGIN
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1052' AND (NEW.method_name != 'Colombia Urban' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '1039' OR NEW.param5_name != 'Projection plane origin height' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Hotine Oblique Mercator (variant A)')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9812' AND (NEW.method_name != 'Hotine Oblique Mercator (variant A)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth of initial line' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8814' OR NEW.param4_name != 'Angle from Rectified to Skew Grid' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8815' OR NEW.param5_name != 'Scale factor on initial line' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length');
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9812' AND (NEW.method_name != 'Hotine Oblique Mercator (variant A)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8814' OR NEW.param4_name != 'Angle from Rectified to Skew Grid' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8815' OR NEW.param5_name != 'Scale factor at projection centre' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8806' OR NEW.param6_name != 'False easting' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8807' OR NEW.param7_name != 'False northing' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length');
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Cylindrical Equal Area')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9835' AND (NEW.method_name != 'Lambert Cylindrical Equal Area' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8823' OR NEW.param1_name != 'Latitude of 1st standard parallel' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
@@ -86,17 +86,23 @@ BEGIN
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1104' AND (NEW.method_name != 'Change of Vertical Unit' OR NEW.param1_auth_name IS NOT NULL OR NEW.param1_code IS NOT NULL OR NEW.param1_name IS NOT NULL OR NEW.param1_value IS NOT NULL OR NEW.param1_uom_auth_name IS NOT NULL OR NEW.param1_uom_code IS NOT NULL OR NEW.param2_auth_name IS NOT NULL OR NEW.param2_code IS NOT NULL OR NEW.param2_name IS NOT NULL OR NEW.param2_value IS NOT NULL OR NEW.param2_uom_auth_name IS NOT NULL OR NEW.param2_uom_code IS NOT NULL OR NEW.param3_auth_name IS NOT NULL OR NEW.param3_code IS NOT NULL OR NEW.param3_name IS NOT NULL OR NEW.param3_value IS NOT NULL OR NEW.param3_uom_auth_name IS NOT NULL OR NEW.param3_uom_code IS NOT NULL OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Hotine Oblique Mercator (variant B)')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9815' AND (NEW.method_name != 'Hotine Oblique Mercator (variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth of initial line' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8814' OR NEW.param4_name != 'Angle from Rectified to Skew Grid' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8815' OR NEW.param5_name != 'Scale factor on initial line' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8816' OR NEW.param6_name != 'Easting at projection centre' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8817' OR NEW.param7_name != 'Northing at projection centre' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length');
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9815' AND (NEW.method_name != 'Hotine Oblique Mercator (variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8814' OR NEW.param4_name != 'Angle from Rectified to Skew Grid' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8815' OR NEW.param5_name != 'Scale factor at projection centre' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'scale' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8816' OR NEW.param6_name != 'Easting at projection centre' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name != 'EPSG' OR NEW.param7_code != '8817' OR NEW.param7_name != 'Northing at projection centre' OR NEW.param7_value IS NULL OR NEW.param7_uom_auth_name IS NULL OR NEW.param7_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param7_uom_auth_name AND code = NEW.param7_uom_code) != 'length');
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Laborde Oblique Mercator')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9813' AND (NEW.method_name != 'Laborde Oblique Mercator' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth of initial line' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8815' OR NEW.param4_name != 'Scale factor on initial line' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'scale' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8806' OR NEW.param5_name != 'False easting' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8807' OR NEW.param6_name != 'False northing' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9813' AND (NEW.method_name != 'Laborde Oblique Mercator' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8815' OR NEW.param4_name != 'Scale factor at projection centre' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'scale' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8806' OR NEW.param5_name != 'False easting' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8807' OR NEW.param6_name != 'False northing' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equal Earth')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1078' AND (NEW.method_name != 'Equal Earth' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8802' OR NEW.param1_name != 'Longitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8806' OR NEW.param2_name != 'False easting' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'length' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8807' OR NEW.param3_name != 'False northing' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (1SP variant B)')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1102' AND (NEW.method_name != 'Lambert Conic Conformal (1SP variant B)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8805' OR NEW.param2_name != 'Scale factor at natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'scale' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8821' OR NEW.param3_name != 'Latitude of false origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8822' OR NEW.param4_name != 'Longitude of false origin' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'angle' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8826' OR NEW.param5_name != 'Easting at false origin' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8827' OR NEW.param6_name != 'Northing at false origin' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator 3D')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1111' AND (NEW.method_name != 'Transverse Mercator 3D' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Local Orthographic')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1130' AND (NEW.method_name != 'Local Orthographic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8811' OR NEW.param1_name != 'Latitude of projection centre' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8812' OR NEW.param2_name != 'Longitude of projection centre' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8813' OR NEW.param3_name != 'Azimuth at projection centre' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'angle' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8815' OR NEW.param4_name != 'Scale factor at projection centre' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'scale' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8816' OR NEW.param5_name != 'Easting at projection centre' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name != 'EPSG' OR NEW.param6_code != '8817' OR NEW.param6_name != 'Northing at projection centre' OR NEW.param6_value IS NULL OR NEW.param6_uom_auth_name IS NULL OR NEW.param6_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param6_uom_auth_name AND code = NEW.param6_uom_code) != 'length' OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Modified Azimuthal Equidistant')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9832' AND (NEW.method_name != 'Modified Azimuthal Equidistant' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
@@ -127,6 +133,9 @@ BEGIN
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator (South Orientated)')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9808' AND (NEW.method_name != 'Transverse Mercator (South Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Azimuthal Equidistant')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1125' AND (NEW.method_name != 'Azimuthal Equidistant' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Lambert Conic Conformal (West Orientated)')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9826' AND (NEW.method_name != 'Lambert Conic Conformal (West Orientated)' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
@@ -0,0 +1,9 @@
CREATE TRIGGER conversion_method_check_insert_trigger_orthographic
INSTEAD OF INSERT ON conversion
BEGIN
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Orthographic')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9840' AND (NEW.method_name != 'Orthographic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
END;
+2
View File
@@ -27,6 +27,8 @@ INSERT INTO "coordinate_system" VALUES('EPSG','1047','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','1048','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','1049','vertical',1);
INSERT INTO "coordinate_system" VALUES('EPSG','1050','vertical',1);
INSERT INTO "coordinate_system" VALUES('EPSG','1053','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','1054','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','4400','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','4401','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','4402','Cartesian',2);
+391 -5
View File
@@ -68,7 +68,7 @@ INSERT INTO "usage" VALUES(
'EPSG','1024' -- unknown
);
INSERT INTO "other_transformation" VALUES('PROJ','CRS84_TO_EPSG_4326','OGC:CRS84 to WGS 84',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS84','EPSG','4326',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "other_transformation" VALUES('PROJ','CRS84_TO_EPSG_4326','OGC:CRS84 to WGS 84',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS84','EPSG','4326',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES(
'PROJ',
'CRS84_TO_EPSG_4326_USAGE',
@@ -79,7 +79,7 @@ INSERT INTO "usage" VALUES(
'EPSG','1024' -- unknown
);
INSERT INTO "other_transformation" VALUES('PROJ','CRS27_TO_EPSG_4267','OGC:CRS27 to NAD27',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS27','EPSG','4267',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "other_transformation" VALUES('PROJ','CRS27_TO_EPSG_4267','OGC:CRS27 to NAD27',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS27','EPSG','4267',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES(
'PROJ',
'CRS27_TO_EPSG_4267_USAGE',
@@ -90,7 +90,7 @@ INSERT INTO "usage" VALUES(
'EPSG','1024' -- unknown
);
INSERT INTO "other_transformation" VALUES('PROJ','CRS83_TO_EPSG_4269','OGC:CRS83 to NAD83',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS83','EPSG','4269',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "other_transformation" VALUES('PROJ','CRS83_TO_EPSG_4269','OGC:CRS83 to NAD83',NULL,'EPSG','9843','Axis Order Reversal (2D)','OGC','CRS83','EPSG','4269',0.0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES(
'PROJ',
'CRS83_TO_EPSG_4269_USAGE',
@@ -135,7 +135,7 @@ UPDATE grid_transformation SET interpolation_crs_auth_name = 'EPSG',
-- EPSG:1312 'NAD27 to NAD83 (3)' / NTv1_0.gsb has a accuracy of 1m whereas
-- EPSG:1313 'NAD27 to NAD83 (4)' / NTv2_0.gsb has a accuracy of 1.5m
-- so we will never select automatically NTv2_0.gsb. Worse the advertize
-- so we will never select automatically NTv2_0.gsb. Worse the advertise
-- accuracy of the NTv1 method
UPDATE grid_transformation SET accuracy = 2.0 WHERE auth_name = 'EPSG' AND code = '1312';
@@ -170,6 +170,18 @@ INSERT INTO grid_transformation SELECT
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
interpolation_crs_auth_name,
interpolation_crs_code,
operation_version,
@@ -188,6 +200,308 @@ INSERT INTO usage SELECT
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '9123';
-- Canadian transformations: duplicate EPSG:10518, 10519, 10520, 10116, 10117, 10118 with NAD83(CSRS)v7 as interpolation CRS
INSERT INTO grid_transformation SELECT
'PROJ' AS auth_name,
'EPSG_10518_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
name,
description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description,
method_auth_name,
method_code,
method_name,
source_crs_auth_name,
source_crs_code,
target_crs_auth_name,
target_crs_code,
accuracy,
grid_param_auth_name,
grid_param_code,
grid_param_name,
grid_name,
grid2_param_auth_name,
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
'EPSG' AS interpolation_crs_auth_name,
8255 AS interpolation_crs_code,
operation_version,
0 AS deprecated
FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10518';
INSERT INTO usage SELECT
'PROJ' AS auth_name,
'USAGE_PROJ_EPSG_1058_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
object_table_name,
'PROJ' AS object_auth_name,
'EPSG_10518_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code,
extent_auth_name,
extent_code,
scope_auth_name,
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10518';
INSERT INTO grid_transformation SELECT
'PROJ' AS auth_name,
'EPSG_10519_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
name,
description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description,
method_auth_name,
method_code,
method_name,
source_crs_auth_name,
source_crs_code,
target_crs_auth_name,
target_crs_code,
accuracy,
grid_param_auth_name,
grid_param_code,
grid_param_name,
grid_name,
grid2_param_auth_name,
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
'EPSG' AS interpolation_crs_auth_name,
8255 AS interpolation_crs_code,
operation_version,
0 AS deprecated
FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10519';
INSERT INTO usage SELECT
'PROJ' AS auth_name,
'USAGE_PROJ_EPSG_10519_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
object_table_name,
'PROJ' AS object_auth_name,
'EPSG_10519_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code,
extent_auth_name,
extent_code,
scope_auth_name,
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10519';
INSERT INTO grid_transformation SELECT
'PROJ' AS auth_name,
'EPSG_10520_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
name,
description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description,
method_auth_name,
method_code,
method_name,
source_crs_auth_name,
source_crs_code,
target_crs_auth_name,
target_crs_code,
accuracy,
grid_param_auth_name,
grid_param_code,
grid_param_name,
grid_name,
grid2_param_auth_name,
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
'EPSG' AS interpolation_crs_auth_name,
8255 AS interpolation_crs_code,
operation_version,
0 AS deprecated
FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10520';
INSERT INTO usage SELECT
'PROJ' AS auth_name,
'USAGE_PROJ_EPSG_10520_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
object_table_name,
'PROJ' AS object_auth_name,
'EPSG_10520_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code,
extent_auth_name,
extent_code,
scope_auth_name,
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10520';
INSERT INTO grid_transformation SELECT
'PROJ' AS auth_name,
'EPSG_10116_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
name,
description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description,
method_auth_name,
method_code,
method_name,
source_crs_auth_name,
source_crs_code,
target_crs_auth_name,
target_crs_code,
accuracy,
grid_param_auth_name,
grid_param_code,
grid_param_name,
grid_name,
grid2_param_auth_name,
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
'EPSG' AS interpolation_crs_auth_name,
8255 AS interpolation_crs_code,
operation_version,
0 AS deprecated
FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10116';
INSERT INTO usage SELECT
'PROJ' AS auth_name,
'USAGE_PROJ_EPSG_10116_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
object_table_name,
'PROJ' AS object_auth_name,
'EPSG_10116_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code,
extent_auth_name,
extent_code,
scope_auth_name,
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10116';
INSERT INTO grid_transformation SELECT
'PROJ' AS auth_name,
'EPSG_10117_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
name,
description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description,
method_auth_name,
method_code,
method_name,
source_crs_auth_name,
source_crs_code,
target_crs_auth_name,
target_crs_code,
accuracy,
grid_param_auth_name,
grid_param_code,
grid_param_name,
grid_name,
grid2_param_auth_name,
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
'EPSG' AS interpolation_crs_auth_name,
8255 AS interpolation_crs_code,
operation_version,
0 AS deprecated
FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10117';
INSERT INTO usage SELECT
'PROJ' AS auth_name,
'USAGE_PROJ_EPSG_10117_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
object_table_name,
'PROJ' AS object_auth_name,
'EPSG_10117_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code,
extent_auth_name,
extent_code,
scope_auth_name,
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10117';
INSERT INTO grid_transformation SELECT
'PROJ' AS auth_name,
'EPSG_10118_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
name,
description || ' Specifies NAD83(CSRS)v7 (code 8255) as interpolation CRS.' AS description,
method_auth_name,
method_code,
method_name,
source_crs_auth_name,
source_crs_code,
target_crs_auth_name,
target_crs_code,
accuracy,
grid_param_auth_name,
grid_param_code,
grid_param_name,
grid_name,
grid2_param_auth_name,
grid2_param_code,
grid2_param_name,
grid2_name,
param1_auth_name,
param1_code,
param1_name,
param1_value,
param1_uom_auth_name,
param1_uom_code,
param2_auth_name,
param2_code,
param2_name,
param2_value,
param2_uom_auth_name,
param2_uom_code,
'EPSG' AS interpolation_crs_auth_name,
8255 AS interpolation_crs_code,
operation_version,
0 AS deprecated
FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '10118';
INSERT INTO usage SELECT
'PROJ' AS auth_name,
'USAGE_PROJ_EPSG_10118_WITH_NAD83CSRSV7_INTERPOLATION' AS code,
object_table_name,
'PROJ' AS object_auth_name,
'EPSG_10118_WITH_NAD83CSRSV7_INTERPOLATION' AS object_code,
extent_auth_name,
extent_code,
scope_auth_name,
scope_code
FROM usage WHERE object_table_name = 'grid_transformation' AND object_auth_name = 'EPSG' AND object_code = '10118';
-- Define the allowed authorities, and their precedence, when researching a
-- coordinate operation
@@ -324,6 +638,18 @@ SELECT
gt.grid2_param_code,
gt.grid2_param_name,
gt.grid2_name,
gt.param1_auth_name,
gt.param1_code,
gt.param1_name,
gt.param1_value,
gt.param1_uom_auth_name,
gt.param1_uom_code,
gt.param2_auth_name,
gt.param2_code,
gt.param2_name,
gt.param2_value,
gt.param2_uom_auth_name,
gt.param2_uom_code,
gt.interpolation_crs_auth_name,
gt.interpolation_crs_code,
gt.operation_version,
@@ -333,7 +659,7 @@ JOIN compound_crs c ON gt.target_crs_code = c.code AND gt.target_crs_auth_name =
JOIN geodetic_crs gcrs ON gt.source_crs_auth_name = gcrs.auth_name AND gt.source_crs_code = gcrs.code
JOIN vertical_crs vcrs on vcrs.auth_name = c.vertical_crs_auth_name AND vcrs.code = c.vertical_crs_code
WHERE method_auth_name = 'EPSG' AND method_name LIKE 'Geog3D to Geog2D+%'
AND NOT EXISTS (SELECT 1 FROM grid_transformation gt2 WHERE gt2.method_name LIKE 'Geographic3D to%' AND gt2.source_crs_auth_name = gt.source_crs_auth_name AND gt2.source_crs_code = gt.source_crs_code AND gt2.target_crs_auth_name = vcrs.auth_name AND gt2.target_crs_code = vcrs.code)
AND NOT EXISTS (SELECT 1 FROM grid_transformation gt2 WHERE gt2.method_name LIKE 'Geographic3D to%' AND gt2.source_crs_auth_name = gt.source_crs_auth_name AND gt2.source_crs_code = gt.source_crs_code AND gt2.target_crs_auth_name = vcrs.auth_name AND gt2.target_crs_code = vcrs.code AND gt2.grid_name = gt.grid_name)
AND gt.deprecated = 0;
INSERT INTO "usage"
@@ -351,3 +677,63 @@ FROM grid_transformation gt
JOIN usage u ON u.object_auth_name = gt.auth_name AND u.object_code = gt.code AND u.object_table_name = 'grid_transformation'
WHERE method_auth_name = 'EPSG' AND method_name LIKE 'Geog3D to Geog2D+%'
AND EXISTS (SELECT 1 FROM grid_transformation gt2 WHERE gt2.auth_name = 'PROJ' AND gt2.code = gt.auth_name || '_' || gt.code || '_RESTRICTED_TO_VERTCRS');
-- Add records corresponding to EGM2008 grid for WGS 84 realizations
INSERT INTO "grid_transformation"
SELECT
'PROJ' AS auth_name,
replace(replace(replace(gcrs.name, ' ', '_'), '(', ''), ')', '') || '_TO_EGM2008',
gcrs.name || ' to EGM2008 height (from ' || gt.name || ')' AS name,
gt.description,
gt.method_auth_name,
gt.method_code,
gt.method_name,
gcrs.auth_name,
gcrs.code,
gt.target_crs_auth_name,
gt.target_crs_code,
gt.accuracy,
gt.grid_param_auth_name,
gt.grid_param_code,
gt.grid_param_name,
gt.grid_name,
gt.grid2_param_auth_name,
gt.grid2_param_code,
gt.grid2_param_name,
gt.grid2_name,
gt.param1_auth_name,
gt.param1_code,
gt.param1_name,
gt.param1_value,
gt.param1_uom_auth_name,
gt.param1_uom_code,
gt.param2_auth_name,
gt.param2_code,
gt.param2_name,
gt.param2_value,
gt.param2_uom_auth_name,
gt.param2_uom_code,
gt.interpolation_crs_auth_name,
gt.interpolation_crs_code,
gt.operation_version,
gt.deprecated
FROM grid_transformation gt, geodetic_crs gcrs
WHERE gt.name = 'WGS 84 to EGM2008 height (1)'
AND gcrs.auth_name = 'EPSG' AND gcrs.name LIKE 'WGS 84 (G%' AND gcrs.type='geographic 3D' and gcrs.deprecated=0;
INSERT INTO "usage"
SELECT
'PROJ' AS auth_name,
'USAGE_' || replace(replace(replace(gcrs.name, ' ', '_'), '(', ''), ')', '') || '_TO_EGM2008' AS code,
'grid_transformation' AS object_table_name,
'PROJ' AS object_auth_name,
replace(replace(replace(gcrs.name, ' ', '_'), '(', ''), ')', '') || '_TO_EGM2008' AS object_code,
u.extent_auth_name,
u.extent_code,
u.scope_auth_name,
u.scope_code
FROM grid_transformation gt, geodetic_crs gcrs
JOIN usage u ON u.object_auth_name = gt.auth_name AND u.object_code = gt.code AND u.object_table_name = 'grid_transformation'
WHERE gt.name = 'WGS 84 to EGM2008 height (1)'
AND gcrs.auth_name = 'EPSG' AND gcrs.name LIKE 'WGS 84 (G%' AND gcrs.type='geographic 3D' and gcrs.deprecated=0;
-9
View File
@@ -6,12 +6,3 @@ INSERT INTO "scope" VALUES('PROJ','SCOPE_UNKNOWN','Not known.',0);
INSERT INTO celestial_body VALUES('PROJ', 'EARTH', 'Earth', 6378137.0);
INSERT INTO versioned_auth_name_mapping VALUES ('IAU_2015', 'IAU', '2015', 1);
CREATE TRIGGER conversion_method_check_insert_trigger_orthographic
INSTEAD OF INSERT ON conversion
BEGIN
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Orthographic')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9840' AND (NEW.method_name != 'Orthographic' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
END;
+2 -5
View File
@@ -457,14 +457,11 @@ INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','8449','EPSG','8860','EPS
INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4280','EPSG','4211','EPSG');
INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4808','EPSG','4813','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2163','EPSG','9311','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3408','EPSG','6931','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3409','EPSG','6932','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3410','EPSG','6933','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3411','EPSG','3413','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3412','EPSG','3976','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4088','EPSG','4087','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7804','EPSG','9391','EPSG');
INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5832','EPSG','9928','EPSG');
INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5833','EPSG','9929','EPSG');
INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5834','EPSG','9930','EPSG');
INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5835','EPSG','9931','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','10480','EPSG','10481','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','10788','EPSG','10820','EPSG');
+612
View File
@@ -0,0 +1,612 @@
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uml="http://schema.omg.org/spec/UML/2.1">
<xmi:Documentation exporter="umbrello uml modeller 2.35.0 (Applications 22.08.0) http://umbrello.kde.org" exporterVersion="2.0.4"/>
<uml:Model xmi:id="m1" name="Modèle UML">
<packagedElement xmi:type="uml:Stereotype" xmi:id="folder" name="folder"/>
<packagedElement xmi:type="uml:Stereotype" xmi:id="dataType" name="dataType"/>
<packagedElement xmi:type="uml:Stereotype" xmi:id="interface" name="interface"/>
<packagedElement xmi:type="uml:Model" xmi:id="Logical_View" name="Logical View">
<uml:Package xmi:id="Datatypes" name="Datatypes" stereotype="folder">
<packagedElement xmi:type="uml:DataType" xmi:id="un10q3RAZh9YU" name="char" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uAynv6TbgG11Z" name="int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="ucOVt2J1fTMkF" name="float" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uiXGLFrfkCoBN" name="double" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uM3vdo8djgFgC" name="bool" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uhL8F851fQQyq" name="string" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="utJAws36TUGWD" name="unsigned char" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="unKRfzLu0XGvb" name="signed char" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="u95deU2ow68b1" name="unsigned int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uLpP90F2P3CjD" name="signed int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="u4xSDe1bTIp4y" name="short int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="ujAtUquSJ4ymf" name="unsigned short int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uQJ6caew3c0pr" name="signed short int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="u0pTHqeM9ZjOn" name="long int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uHILGaUoMVqSP" name="signed long int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uMQGXdDcGxXwm" name="unsigned long int" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uGU1cu1WWxGTK" name="long double" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uxDmw01nt3l8h" name="wchar_t" stereotype="dataType"/>
<packagedElement xmi:type="uml:DataType" xmi:id="uoLfrpRTKO5H9" name="celestial_body" stereotype="dataType" isActive="false"/>
</uml:Package>
<packagedElement xmi:type="uml:Class" xmi:id="usFiDnmfbJFfx" name="celestial_body"/>
<packagedElement xmi:type="uml:Class" xmi:id="uObC58hPo02ai" name="ellipsoid"/>
<packagedElement xmi:type="uml:Class" xmi:id="uxIdWYUj1tC89" name="extent"/>
<packagedElement xmi:type="uml:Class" xmi:id="uJg1To66U2yLo" name="scope"/>
<packagedElement xmi:type="uml:Class" xmi:id="u7xVpU72itjoO" name="usage"/>
<packagedElement xmi:type="uml:Class" xmi:id="uyKfofPnOJBBz" name="prime_meridian"/>
<packagedElement xmi:type="uml:Class" xmi:id="uXIw9hpV4Laec" name="geodetic_datum"/>
<packagedElement xmi:type="uml:Class" xmi:id="uZFrn4Xpu0xx2" name="geodetic_datum_ensemble_member"/>
<packagedElement xmi:type="uml:Association" xmi:id="u2iZnV3lQo8VV" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uIclTFwqf3Qzm" name="" type="uObC58hPo02ai" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ubctbZ3lLchnR" name="" type="usFiDnmfbJFfx" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uVfxEzXLrb5Rx" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="udba8A00mJCH4" name="" type="usFiDnmfbJFfx" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u4UKCzMwHfe5W" name="" type="uObC58hPo02ai" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uxGY0deqShuSF" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="usTC48tt9lcUM" name="" type="u7xVpU72itjoO" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uGh6TFBFzznNi" name="" type="uJg1To66U2yLo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uNmyoVwUTXMDb" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uRJkZIVlNqBJ8" name="" type="u7xVpU72itjoO" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u4nTLk0C5WkOO" name="" type="uxIdWYUj1tC89" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="u0flfhTWustUM" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uCa7re6vVEGdT" name="" type="uObC58hPo02ai" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="us7QbDcUitYdi" name="" type="uXIw9hpV4Laec" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uPn9DTm3O4C2C" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="unUPWkhkiuSqv" name="" type="usFiDnmfbJFfx" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="umXR5RGTZy9Bm" name="" type="uObC58hPo02ai" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uKCie6nj32jNj" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ul9s5PfHcwHi9" name="" type="uObC58hPo02ai" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uJGMUUu3aUdnD" name="" type="usFiDnmfbJFfx" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ucUcuKZl9wulS" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u9hlMKrXk5IIg" name="" type="uXIw9hpV4Laec" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uUYM4WW4jdn8k" name="" type="uObC58hPo02ai" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uqmMELyDiHgbZ" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uRSTymCE2VAqd" name="" type="uXIw9hpV4Laec" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="upwscO1GgZUwK" name="" type="uyKfofPnOJBBz" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uhhqgJpi7OTNv" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uAhG7f7lOZDjw" name="" type="uZFrn4Xpu0xx2" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uMVzlQTUTpWaP" name="" type="uXIw9hpV4Laec" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="utMrJMUbU32wJ" name="coordinate_system"/>
<packagedElement xmi:type="uml:Class" xmi:id="u0B5HltcEv058" name="axis"/>
<packagedElement xmi:type="uml:Association" xmi:id="ub524vi7o2MQs" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uG3CflRilOpLF" name="" type="u0B5HltcEv058" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uvWqs7Gvj2623" name="" type="utMrJMUbU32wJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uICv8VZ7ridbA" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u1qF7rQfnlpJY" name="" type="utMrJMUbU32wJ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u4Q97lZKWq2lT" name="" type="u0B5HltcEv058" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uaj1PqppIwcJM" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="upl40aCxoShlE" name="" type="utMrJMUbU32wJ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uDFrgIldp3PvY" name="" type="u0B5HltcEv058" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="uBBUUxy1ciMcJ" name="vertical_datum"/>
<packagedElement xmi:type="uml:Class" xmi:id="uyjoPy6DRbPA4" name="vertical_datum_ensemble_member"/>
<packagedElement xmi:type="uml:Class" xmi:id="uGyT73jCULmlG" name="geodetic_crs"/>
<packagedElement xmi:type="uml:Association" xmi:id="uzgX0FJyw7lFO" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uL9l3B5uNr8x7" name="" type="uGyT73jCULmlG" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u21uRcpRMJXas" name="" type="uXIw9hpV4Laec" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uDA52qncCXvlM" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uWZJXd5PxK0v9" name="" type="uGyT73jCULmlG" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uvOEO2TnPi5Sf" name="" type="utMrJMUbU32wJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uqmjTn3jgUi3v" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u3os39y38Ok0x" name="" type="uGyT73jCULmlG" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uqLzmqQeXfOeD" name="" type="u7xVpU72itjoO" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="uaNvEyeKUaDUQ" name="vertical_crs"/>
<packagedElement xmi:type="uml:Class" xmi:id="uF1TLmuLJtlVj" name="unit_of_measure"/>
<packagedElement xmi:type="uml:Association" xmi:id="uHGGZSuHhrnIU" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uj4370zCys8pO" name="" type="u0B5HltcEv058" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uU41D2bzT8NWS" name="" type="uF1TLmuLJtlVj" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="u25L1YUK3aNvZ" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uewTRFLTUoCDX" name="" type="uBBUUxy1ciMcJ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ux5bkjkvacrsX" name="" type="uaNvEyeKUaDUQ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ukSvQYmStkMCb" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u1TUDRfuF5nf4" name="" type="uBBUUxy1ciMcJ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uYuFkkxVGtvVm" name="" type="uaNvEyeKUaDUQ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="u0vCAwaM6wOIT" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="upf6QJ4elmkVN" name="" type="uaNvEyeKUaDUQ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uCD4usquL7e3R" name="" type="uBBUUxy1ciMcJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uFYTHrYnhGxji" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uCtxpIJqEUdlI" name="" type="uaNvEyeKUaDUQ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uoVylRS0TwDSD" name="" type="utMrJMUbU32wJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uSVHHvwBxQSrq" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ubdep3WXQC0tf" name="" type="uaNvEyeKUaDUQ" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uXj3ZkhJ4jpDh" name="" type="u7xVpU72itjoO" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="u8NpszsCtPwog" name="conversion"/>
<packagedElement xmi:type="uml:Class" xmi:id="u6Mx5ikYdLO6g" name="projected_crs"/>
<packagedElement xmi:type="uml:Association" xmi:id="uf2iKfQ1gbEHG" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uu49xwJ8zo4B7" name="" type="u6Mx5ikYdLO6g" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ud17hibkUBpBY" name="" type="uGyT73jCULmlG" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ujhNRvn4TLezM" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="umXAyVN6hB28J" name="" type="u6Mx5ikYdLO6g" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uxvOHxqWG1prq" name="" type="u8NpszsCtPwog" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uKY6ijA9G37v4" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uQZm5sCJjahvT" name="" type="u6Mx5ikYdLO6g" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uuXFCYoz4xFFw" name="" type="utMrJMUbU32wJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ul2lN2OKAIDYf" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uemGlZVVj4z7e" name="" type="u6Mx5ikYdLO6g" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ussKvy1UDMruJ" name="" type="u7xVpU72itjoO" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Interface" xmi:id="u5BghmDXUkrxB" name="CRS" isAbstract="true" stereotype="interface"/>
<packagedElement xmi:type="uml:Interface" xmi:id="umFTWBZY3sT1t" name="horizontal_crs" isAbstract="true" stereotype="interface"/>
<packagedElement xmi:type="uml:Association" xmi:id="uxlafigrj7dPB" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uZev0Oqtg0P9I" name="" type="uGyT73jCULmlG" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uuEtFcVNefM4a" name="" type="umFTWBZY3sT1t" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uOGESIiV1lUWR" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uvMDc1BneKqzU" name="" type="u6Mx5ikYdLO6g" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uVuB81gENCakM" name="" type="umFTWBZY3sT1t" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="uyyIBNbwTXz8Y" name="compound_crs"/>
<packagedElement xmi:type="uml:Association" xmi:id="uVmMIfTWfhhtz" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ufWb8BVBiApKZ" name="" type="uyyIBNbwTXz8Y" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uirBkX3LK38PS" name="" type="umFTWBZY3sT1t" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uLcwRFeyrXoYI" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u4ac4Rbyy6T1c" name="" type="uyyIBNbwTXz8Y" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u8LvbhzYcD0t0" name="" type="uaNvEyeKUaDUQ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="uxsXx7eblI25W" name="helmert_transformation"/>
<packagedElement xmi:type="uml:Class" xmi:id="uRgOG0gxyXHen" name="grid_transformation"/>
<packagedElement xmi:type="uml:Class" xmi:id="ueG4mAO9OIIjR" name="grid_alternatives"/>
<packagedElement xmi:type="uml:Class" xmi:id="uKZXCWxhPhOED" name="other_transformation"/>
<packagedElement xmi:type="uml:Class" xmi:id="uS8pYe6W1TbbV" name="concatenated_operation"/>
<packagedElement xmi:type="uml:Class" xmi:id="utLTCBJh0isMw" name="concatenated_operation_step"/>
<packagedElement xmi:type="uml:Class" xmi:id="uthCBXfzNVdWl" name="geoid_model"/>
<packagedElement xmi:type="uml:Class" xmi:id="u1P4Ek5lBEvCq" name="alias_name"/>
<packagedElement xmi:type="uml:Class" xmi:id="uBbOK5nnocONP" name="supersession"/>
<packagedElement xmi:type="uml:Class" xmi:id="uECCtbU6r1Dl2" name="deprecation"/>
<packagedElement xmi:type="uml:Interface" xmi:id="uvKHM8bb9hdJo" name="coordinate_operation_view" isAbstract="true" stereotype="interface"/>
<packagedElement xmi:type="uml:Association" xmi:id="uDLBTtfmmpy0I" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u58BWrcYoyDzA" name="" type="u8NpszsCtPwog" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uJsm3ogOZZZqs" name="" type="u7xVpU72itjoO" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uqeoRajY1FPQy" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uTv44pAdrI0ky" name="" type="uyyIBNbwTXz8Y" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u7ltOXnMiCU4P" name="" type="u7xVpU72itjoO" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uDQy82RrAbccG" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uAZj0Bxj10Ver" name="" type="u5BghmDXUkrxB" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uOFDVFgYPPXdv" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uuiecxJhCPEvO" name="target_crs">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uKrykRrmsOJcf" name="target_crs" type="uvKHM8bb9hdJo" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uOnbDosY1YM4S" name="" type="u5BghmDXUkrxB" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uHaQTAVxi5e4O" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uXEl4xBNl1sUi" name="target_crs" type="uvKHM8bb9hdJo" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="urxH3Z5eiAva2" name="" type="u5BghmDXUkrxB" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uUCcxG5D8Rkrs" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uXdJx3yR9vn4v" name="source_crs" type="uvKHM8bb9hdJo" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uQ50yb32weyb7" name="" type="u5BghmDXUkrxB" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uR78sm66CrD8b" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u95kbTTjQ8XgJ" name="target_crs" type="uvKHM8bb9hdJo" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uc8W2plMCS3sr" name="" type="u5BghmDXUkrxB" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uihRS82NbmZEs" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uSurihb4JiVsr" name="target_crs" type="uvKHM8bb9hdJo" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uN7484LtfWKo7" name="" type="u5BghmDXUkrxB" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ucfurEKNx9d1o" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uxJQwax33ycVo" name="" type="uRgOG0gxyXHen" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uAb8OGLn3zv1v" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uAAQFL3kNJRPy" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uxylhmjFul2Wb" name="" type="uRgOG0gxyXHen" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uQC46ajWmwrJB" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uXwScx6KWydSm" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uFsqqoIYw3nm8" name="" type="uxsXx7eblI25W" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uQZfLqrTiaHQy" name="" type="uxsXx7eblI25W" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uZQKUjkh1Kd80" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uvfM9sFpkRe8D" name="" type="uxsXx7eblI25W" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uPzY3jhCCUbYp" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uM8GLBwvBTyof" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u3eAG9tJsAFpW" name="" type="uKZXCWxhPhOED" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uojCvTXm08l6q" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uC9cOTQW4qHhH" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uXGJTJ0sMyqfe" name="" type="uS8pYe6W1TbbV" aggregation="none" isNavigable="false" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uSmK5eDuTwJoc" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="urp6VgZbsPpuf" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u4azzucGtnnZ3" name="" type="uS8pYe6W1TbbV" aggregation="composite" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uwHTXL4yteAeZ" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="upU79bBdZeqNt" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ux4Gd38ZgsI6Z" name="operation" type="utLTCBJh0isMw" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u3mWQPFThYIU4" name="" type="uS8pYe6W1TbbV" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ukLdcpun6whGn" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uiaaS2VZw0zI8" name="steps" type="utLTCBJh0isMw" multiplicity="2..*" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uWpHoYwL4vJZm" name="" type="uvKHM8bb9hdJo" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="ukeMqqqHuDxV8" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="ulhOABCj0wB46" name="member" type="uZFrn4Xpu0xx2" multiplicity="1..*" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u6e7k7W7XgDxy" name="" type="uXIw9hpV4Laec" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="u7hSFXvDh1F4A" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uoUL9BM6nJ8ca" name="member" type="uyjoPy6DRbPA4" multiplicity="1..*" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="usBc4YO7v8ws3" name="" type="uBBUUxy1ciMcJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="uvTttS4A9izaK" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="u7VX1ZIV8yiLS" name="ensemble" type="uZFrn4Xpu0xx2" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uzsNkuWxBT34b" name="" type="uXIw9hpV4Laec" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="upU7nuwAKothA" name="">
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="uNmaAHkBLQnpD" name="ensemble" type="uyjoPy6DRbPA4" aggregation="aggregate" isNavigable="true" changeability="changeable"/>
<ownedEnd xmi:type="uml:AssociationEnd" xmi:id="umCrLhPuRqKWg" name="" type="uBBUUxy1ciMcJ" aggregation="none" isNavigable="true" changeability="changeable"/>
</packagedElement>
<xmi:Extension extender="umbrello">
<diagrams resolution="96">
<diagram xmi.id="uhRWDcb50cJGi" name="CRS" type="1" documentation="" backgroundcolor="#ffffff" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" griddotcolor="#d3d3d3" linecolor="#990000" linewidth="0" textcolor="#000000" usefillcolor="1" showattribassocs="1" showatts="1" showattsig="1" showops="1" showopsig="1" showpackage="1" showpubliconly="0" showscope="1" showstereotype="2" localid="-1" showgrid="0" snapgrid="0" snapcsgrid="0" snapx="25" snapy="25" zoom="115" canvasheight="800" canvaswidth="1100" isopen="1">
<widgets>
<classwidget xmi.id="uJg1To66U2yLo" localid="um3Woizf9tJfa" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="675" y="121" width="50" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uxIdWYUj1tC89" localid="uDtGrAaNA4U2E" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="754" y="120" width="54" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uyKfofPnOJBBz" localid="unOwcPMA87WHO" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="385" y="192" width="116" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="u1P4Ek5lBEvCq" localid="uxJZQo6P2x7xO" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="73" y="259" width="85" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uObC58hPo02ai" localid="ujoBH6gtV9Wvq" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="273" y="191" width="68" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uBbOK5nnocONP" localid="u1sGx2RBu2Do3" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="73" y="201" width="99" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="u7xVpU72itjoO" localid="uLboalyAJhqf6" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="720" y="190" width="51" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="usFiDnmfbJFfx" localid="uKlBLV0UElMUg" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="253" y="105" width="106" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uXIw9hpV4Laec" localid="u1saeYruHtZ1T" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="248" y="289" width="119" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uZFrn4Xpu0xx2" localid="uVSndXk8FBg1M" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="0" x="23" y="452" width="251" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uF1TLmuLJtlVj" localid="uVqjtAY461nOT" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="541" y="43" width="121" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="utMrJMUbU32wJ" localid="uWIzhT61I6HHL" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="535" y="197" width="138" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<interfacewidget xmi.id="umFTWBZY3sT1t" localid="umDcz2kF8o1sO" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="431" y="367.13" width="105" height="35" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="0" showattsigs="601" drawascircle="0"/>
<classwidget xmi.id="u8NpszsCtPwog" localid="uIy0iKynNyv01" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="593" y="411" width="84" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uyjoPy6DRbPA4" localid="uFfif7LcmqYAU" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="805" y="456" width="244" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uGyT73jCULmlG" localid="uRPKt5kxhV0ik" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="258" y="399" width="95" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="u6Mx5ikYdLO6g" localid="uzuca1OOB9I3O" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="436" y="506" width="101" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="u0B5HltcEv058" localid="u9JQOokGIuBwn" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="583" y="119" width="38" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uBBUUxy1ciMcJ" localid="uufK51OlynST7" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="781" y="295" width="111" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uaNvEyeKUaDUQ" localid="u0QM38nSYHuMl" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="715" y="500" width="88" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uyyIBNbwTXz8Y" localid="uzBuX2RUFnAkw" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="599" y="600" width="107" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uECCtbU6r1Dl2" localid="ufo3O2iJ3R37l" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="73" y="149" width="92" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
</widgets>
<messages/>
<associations>
<assocwidget xmi.id="ucUcuKZl9wulS" localid="uG5A8dXr4ptuQ" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uXIw9hpV4Laec" widgetbid="uObC58hPo02ai" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="307.429" starty="289"/>
<endpoint endx="307.071" endy="219"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uOGESIiV1lUWR" localid="uItkUlCNCgmId" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="512" widgetaid="u6Mx5ikYdLO6g" widgetbid="umFTWBZY3sT1t" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="486.19" starty="506"/>
<endpoint endx="483.888" endy="402.13"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uKCie6nj32jNj" localid="uz76hz3D3NMgU" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uObC58hPo02ai" widgetbid="usFiDnmfbJFfx" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="306.837" starty="191"/>
<endpoint endx="306.163" endy="133"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uxGY0deqShuSF" localid="uH0EYRqn2Lwpy" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u7xVpU72itjoO" widgetbid="uJg1To66U2yLo" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="736.268" starty="190"/>
<endpoint endx="709.232" endy="149"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ujhNRvn4TLezM" localid="uBdE0IxTGsntz" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u6Mx5ikYdLO6g" widgetbid="u8NpszsCtPwog" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="508.384" starty="506"/>
<endpoint endx="613.116" endy="439"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uvTttS4A9izaK" localid="uB8eqDI9r8Tvh" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uZFrn4Xpu0xx2" widgetbid="uXIw9hpV4Laec" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="uJTT6faChkdCx" localid="uK5qiY2RLA0AF" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="188.994" y="432" width="77" height="18" isinstance="0" showstereotype="2" text="ensemble" pretext="+" posttext="" role="709"/>
<linepath layout="Polyline">
<startpoint startx="168.593" starty="452"/>
<endpoint endx="297.032" endy="317"/>
<point x="226" y="412"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uNmyoVwUTXMDb" localid="uqraqvRr5X6Ph" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u7xVpU72itjoO" widgetbid="uxIdWYUj1tC89" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="752.6" starty="190"/>
<endpoint endx="773.9" endy="148"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ukeMqqqHuDxV8" localid="uD4BmT3DPdj8U" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uZFrn4Xpu0xx2" widgetbid="uXIw9hpV4Laec" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="u7Xpl1pp3dZRT" localid="uIjc6x7qDuUXQ" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="116.006" y="418.079" width="29" height="18" isinstance="0" showstereotype="2" text="1..*" pretext="" posttext="" role="701"/>
<floatingtext xmi.id="uiGd8EdVUaF4k" localid="unk24DNnkZ09O" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="73.7037" y="432.5" width="69" height="18" isinstance="0" showstereotype="2" text="member" pretext="+" posttext="" role="709"/>
<linepath layout="Polyline">
<startpoint startx="148.762" starty="452"/>
<endpoint endx="280.934" endy="317"/>
<point x="150" y="386"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uzgX0FJyw7lFO" localid="uhtr9AACb1I94" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uGyT73jCULmlG" widgetbid="uXIw9hpV4Laec" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="305.755" starty="399"/>
<endpoint endx="307.245" endy="317"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uHGGZSuHhrnIU" localid="uPc04hGlrrM6r" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u0B5HltcEv058" widgetbid="uF1TLmuLJtlVj" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="601.908" starty="119"/>
<endpoint endx="601.592" endy="71"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uxlafigrj7dPB" localid="ujMoBFYWTMM5E" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="512" widgetaid="uGyT73jCULmlG" widgetbid="umFTWBZY3sT1t" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="431" starty="392.998"/>
<endpoint endx="353" endy="405.429"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uqmMELyDiHgbZ" localid="uWKIHcQd7U9bq" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uXIw9hpV4Laec" widgetbid="uyKfofPnOJBBz" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="327.057" starty="289"/>
<endpoint endx="423.443" endy="220"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ul2lN2OKAIDYf" localid="uOfgy3I312rcW" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u6Mx5ikYdLO6g" widgetbid="u7xVpU72itjoO" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="497.975" starty="506"/>
<endpoint endx="734.025" endy="218"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uKY6ijA9G37v4" localid="uuR1rFpcd9GPz" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u6Mx5ikYdLO6g" widgetbid="utMrJMUbU32wJ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="491.824" starty="506"/>
<endpoint endx="598.676" endy="225"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uLcwRFeyrXoYI" localid="uMhwVTs0yws9w" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uyyIBNbwTXz8Y" widgetbid="uaNvEyeKUaDUQ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="667.41" starty="600"/>
<endpoint endx="744.09" endy="528"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uVmMIfTWfhhtz" localid="ueA80KQgI0i5L" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uyyIBNbwTXz8Y" widgetbid="umFTWBZY3sT1t" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="642.185" starty="600"/>
<endpoint endx="496.394" endy="402.13"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uFYTHrYnhGxji" localid="uzv82lgr6HcYe" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uaNvEyeKUaDUQ" widgetbid="utMrJMUbU32wJ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="751.838" starty="500"/>
<endpoint endx="611.162" endy="225"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uSVHHvwBxQSrq" localid="upFaNi2SnbldZ" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uaNvEyeKUaDUQ" widgetbid="u7xVpU72itjoO" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="758.39" starty="500"/>
<endpoint endx="746.11" endy="218"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uDA52qncCXvlM" localid="u2o8RW3IOKF04" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uGyT73jCULmlG" widgetbid="utMrJMUbU32wJ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="326.188" starty="399"/>
<endpoint endx="583.312" endy="225"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="u0vCAwaM6wOIT" localid="u2MzIfZDtTgIq" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uaNvEyeKUaDUQ" widgetbid="uBBUUxy1ciMcJ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="764.293" starty="500"/>
<endpoint endx="831.207" endy="323"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uf2iKfQ1gbEHG" localid="u8b6sCt7LB9du" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u6Mx5ikYdLO6g" widgetbid="uGyT73jCULmlG" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="462.818" starty="506"/>
<endpoint endx="329.182" endy="427"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="u7hSFXvDh1F4A" localid="uYYh924ri6t6G" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uyjoPy6DRbPA4" widgetbid="uBBUUxy1ciMcJ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="uVxuH9MAs4KAa" localid="uwakwbIl2CPo0" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="850.137" y="420.391" width="29" height="18" isinstance="0" showstereotype="2" text="1..*" pretext="" posttext="" role="701"/>
<floatingtext xmi.id="uRouwIogXnsLU" localid="uGaZVOInAaFqc" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="810.174" y="437.739" width="69" height="18" isinstance="0" showstereotype="2" text="member" pretext="+" posttext="" role="709"/>
<linepath layout="Polyline">
<startpoint startx="913.099" starty="456"/>
<endpoint endx="841.221" endy="323"/>
<point x="872.174" y="414.783"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uaj1PqppIwcJM" localid="ujZle0tkmbWn3" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="utMrJMUbU32wJ" widgetbid="u0B5HltcEv058" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="603.641" starty="197"/>
<endpoint endx="602.359" endy="147"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uqmjTn3jgUi3v" localid="u77m7M873mSKV" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uGyT73jCULmlG" widgetbid="u7xVpU72itjoO" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="334.974" starty="399"/>
<endpoint endx="720" endy="216.113"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uDLBTtfmmpy0I" localid="uBB2vq7eUTBz1" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="u8NpszsCtPwog" widgetbid="u7xVpU72itjoO" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="642" starty="411"/>
<endpoint endx="738.5" endy="218"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uqeoRajY1FPQy" localid="uWVpetcVmRbfw" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uyyIBNbwTXz8Y" widgetbid="u7xVpU72itjoO" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="655.676" starty="600"/>
<endpoint endx="742.324" endy="218"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="upU7nuwAKothA" localid="umX2zL5BOZfIT" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="uyjoPy6DRbPA4" widgetbid="uBBUUxy1ciMcJ" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="uXrql08EjHItm" localid="us5vetosNrtkL" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="932.739" y="435.13" width="77" height="18" isinstance="0" showstereotype="2" text="ensemble" pretext="+" posttext="" role="709"/>
<linepath layout="Polyline">
<startpoint startx="926.317" starty="456"/>
<endpoint endx="848.032" endy="323"/>
<point x="924.348" y="415.652"/>
</linepath>
</assocwidget>
</associations>
</diagram>
<diagram xmi.id="uLa8bk62duhDT" name="Transformations" type="1" documentation="" backgroundcolor="#ffffff" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" griddotcolor="#d3d3d3" linecolor="#990000" linewidth="0" textcolor="#000000" usefillcolor="1" showattribassocs="1" showatts="1" showattsig="1" showops="1" showopsig="1" showpackage="1" showpubliconly="0" showscope="1" showstereotype="2" localid="-1" showgrid="0" snapgrid="0" snapcsgrid="0" snapx="25" snapy="25" zoom="100" canvasheight="813" canvaswidth="1086" isopen="1">
<widgets>
<interfacewidget xmi.id="u5BghmDXUkrxB" localid="u0iOMQc48A8ui" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="354" y="70" width="87" height="35" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="0" showscope="1" showattributes="0" showattsigs="601" drawascircle="0"/>
<classwidget xmi.id="utLTCBJh0isMw" localid="u1Yi2Azrfm068" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="663" y="370" width="210" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uRgOG0gxyXHen" localid="u6PnghQcoxIEn" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="22" y="288" width="146" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uxsXx7eblI25W" localid="uqhYrC8OA4YoG" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="188" y="285" width="171" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uS8pYe6W1TbbV" localid="ui21ynkFBrL8e" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="678" y="285" width="174" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="uKZXCWxhPhOED" localid="uqEW5xNn1H9K2" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="377" y="285" width="155" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<classwidget xmi.id="ueG4mAO9OIIjR" localid="us14okeSxbdQS" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="36" y="369" width="125" height="28" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="1" showattsigs="601"/>
<interfacewidget xmi.id="uvKHM8bb9hdJo" localid="uyx5AQn5q5U5h" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="0" usesdiagramusefillcolor="0" fillcolor="#ffffc0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="307.905" y="199.293" width="193" height="35" isinstance="0" showstereotype="2" showoperations="1" showpubliconly="0" showopsigs="601" showpackage="1" showscope="1" showattributes="0" showattsigs="601" drawascircle="0"/>
</widgets>
<messages/>
<associations>
<assocwidget xmi.id="upU79bBdZeqNt" localid="uP6qpMRa4zD1m" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="utLTCBJh0isMw" widgetbid="uS8pYe6W1TbbV" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="ubSf4vR8y9mWu" localid="uo3ahNRjUBHG0" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="774.506" y="348" width="76" height="18" isinstance="0" showstereotype="2" text="operation" pretext="+" posttext="" role="709"/>
<linepath layout="Direct">
<startpoint startx="767.506" starty="370"/>
<endpoint endx="765.494" endy="313"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uM8GLBwvBTyof" localid="uNnd7XdPZJomh" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="512" widgetaid="uKZXCWxhPhOED" widgetbid="uvKHM8bb9hdJo" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="445.969" starty="285"/>
<endpoint endx="415.069" endy="234.293"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uAAQFL3kNJRPy" localid="uDr9tQwCW3LIW" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="512" widgetaid="uRgOG0gxyXHen" widgetbid="uvKHM8bb9hdJo" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="145.837" starty="288"/>
<endpoint endx="340.859" endy="234.293"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uZQKUjkh1Kd80" localid="uK89JkfWajCgs" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="512" widgetaid="uxsXx7eblI25W" widgetbid="uvKHM8bb9hdJo" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="295.793" starty="285"/>
<endpoint endx="376.538" endy="234.293"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uC9cOTQW4qHhH" localid="uNs9cOeSNg9yI" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="512" widgetaid="uS8pYe6W1TbbV" widgetbid="uvKHM8bb9hdJo" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<linepath layout="Direct">
<startpoint startx="703.59" starty="285"/>
<endpoint endx="481.167" endy="234.293"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="ukLdcpun6whGn" localid="uVCUJOqTsKcl0" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="501" widgetaid="utLTCBJh0isMw" widgetbid="uvKHM8bb9hdJo" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="uR6DqpJGcZiA4" localid="uBpmlFtAKyKcp" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="713.694" y="343.552" width="29" height="18" isinstance="0" showstereotype="2" text="2..*" pretext="" posttext="" role="701"/>
<floatingtext xmi.id="uICoecWqBxBu3" localid="ukpHrPZQ09jnB" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="657.75" y="350.853" width="50" height="18" isinstance="0" showstereotype="2" text="steps" pretext="+" posttext="" role="709"/>
<linepath layout="Direct">
<startpoint startx="737.557" starty="370"/>
<endpoint endx="442.459" endy="234.293"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uihRS82NbmZEs" localid="uxmC5Iq6uXfmO" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="510" widgetaid="uvKHM8bb9hdJo" widgetbid="u5BghmDXUkrxB" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="uYJzY8EsweHrf" localid="uHm3PIFZRlTZW" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="422.991" y="160.293" width="78" height="18" isinstance="0" showstereotype="2" text="target_crs" pretext="+" posttext="" role="709"/>
<linepath layout="Polyline">
<startpoint startx="409.99" starty="199.293"/>
<endpoint endx="406.325" endy="105"/>
<point x="427" y="146"/>
</linepath>
</assocwidget>
<assocwidget xmi.id="uUCcxG5D8Rkrs" localid="uSDOWqI77RXZG" textcolor="#000000" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" seqnum="" type="510" widgetaid="uvKHM8bb9hdJo" widgetbid="u5BghmDXUkrxB" indexa="0" totalcounta="0" indexb="0" totalcountb="0">
<floatingtext xmi.id="udCeDALUprRei" localid="u6SMTgNQSz54I" textcolor="none" linecolor="#990000" linewidth="0" usefillcolor="1" usesdiagramfillcolor="1" usesdiagramusefillcolor="1" fillcolor="none" font="Sans Serif,9,-1,5,50,0,0,0,0,0" autoresize="1" x="300.009" y="155" width="82" height="18" isinstance="0" showstereotype="2" text="source_crs" pretext="+" posttext="" role="709"/>
<linepath layout="Polyline">
<startpoint startx="396.461" starty="199.293"/>
<endpoint endx="388.505" endy="105"/>
<point x="370" y="141"/>
</linepath>
</assocwidget>
</associations>
</diagram>
</diagrams>
</xmi:Extension>
</packagedElement>
<packagedElement xmi:type="uml:Model" xmi:id="Use_Case_View" name="Use Case View"/>
<packagedElement xmi:type="uml:Model" xmi:id="Component_View" name="Component View"/>
<packagedElement xmi:type="uml:Model" xmi:id="Deployment_View" name="Deployment View"/>
<packagedElement xmi:type="uml:Model" xmi:id="Entity_Relationship_Model" name="Entity Relationship Model"/>
</uml:Model>
<xmi:Extension extender="umbrello">
<docsettings viewid="uhRWDcb50cJGi" documentation="" uniqueid="uwakwbIl2CPo0"/>
<listview>
<listitem id="Views" type="800" open="1">
<listitem id="Entity_Relationship_Model" type="836" open="1"/>
<listitem id="Use_Case_View" type="802" open="1"/>
<listitem id="Component_View" type="821" open="1"/>
<listitem id="Deployment_View" type="827" open="1"/>
<listitem id="Logical_View" type="801" open="1">
<listitem id="u1P4Ek5lBEvCq" type="813" open="1"/>
<listitem id="u0B5HltcEv058" type="813" open="1"/>
<listitem id="usFiDnmfbJFfx" type="813" open="1"/>
<listitem id="uyyIBNbwTXz8Y" type="813" open="1"/>
<listitem id="uS8pYe6W1TbbV" type="813" open="1"/>
<listitem id="utLTCBJh0isMw" type="813" open="1"/>
<listitem id="u8NpszsCtPwog" type="813" open="1"/>
<listitem id="uvKHM8bb9hdJo" type="817" open="1"/>
<listitem id="utMrJMUbU32wJ" type="813" open="1"/>
<listitem id="u5BghmDXUkrxB" type="817" open="1"/>
<listitem id="uhRWDcb50cJGi" type="807" label="CRS" open="0"/>
<listitem id="uECCtbU6r1Dl2" type="813" open="1"/>
<listitem id="uObC58hPo02ai" type="813" open="1"/>
<listitem id="uxIdWYUj1tC89" type="813" open="1"/>
<listitem id="uGyT73jCULmlG" type="813" open="1"/>
<listitem id="uXIw9hpV4Laec" type="813" open="1"/>
<listitem id="uZFrn4Xpu0xx2" type="813" open="1"/>
<listitem id="uthCBXfzNVdWl" type="813" open="1"/>
<listitem id="ueG4mAO9OIIjR" type="813" open="1"/>
<listitem id="uRgOG0gxyXHen" type="813" open="1"/>
<listitem id="uxsXx7eblI25W" type="813" open="1"/>
<listitem id="umFTWBZY3sT1t" type="817" open="1"/>
<listitem id="uKZXCWxhPhOED" type="813" open="1"/>
<listitem id="uyKfofPnOJBBz" type="813" open="1"/>
<listitem id="u6Mx5ikYdLO6g" type="813" open="1"/>
<listitem id="uJg1To66U2yLo" type="813" open="1"/>
<listitem id="uBbOK5nnocONP" type="813" open="1"/>
<listitem id="uLa8bk62duhDT" type="807" label="Transformations" open="0"/>
<listitem id="Datatypes" type="830" open="0">
<listitem id="uM3vdo8djgFgC" type="829" open="0"/>
<listitem id="uiXGLFrfkCoBN" type="829" open="0"/>
<listitem id="ucOVt2J1fTMkF" type="829" open="0"/>
<listitem id="uGU1cu1WWxGTK" type="829" open="0"/>
<listitem id="u0pTHqeM9ZjOn" type="829" open="0"/>
<listitem id="u4xSDe1bTIp4y" type="829" open="0"/>
<listitem id="unKRfzLu0XGvb" type="829" open="0"/>
<listitem id="uLpP90F2P3CjD" type="829" open="0"/>
<listitem id="uHILGaUoMVqSP" type="829" open="0"/>
<listitem id="uQJ6caew3c0pr" type="829" open="0"/>
<listitem id="utJAws36TUGWD" type="829" open="0"/>
<listitem id="u95deU2ow68b1" type="829" open="0"/>
<listitem id="uMQGXdDcGxXwm" type="829" open="0"/>
<listitem id="ujAtUquSJ4ymf" type="829" open="0"/>
<listitem id="uxDmw01nt3l8h" type="829" open="0"/>
</listitem>
<listitem id="uF1TLmuLJtlVj" type="813" open="1"/>
<listitem id="u7xVpU72itjoO" type="813" open="1"/>
<listitem id="uaNvEyeKUaDUQ" type="813" open="1"/>
<listitem id="uBBUUxy1ciMcJ" type="813" open="1"/>
<listitem id="uyjoPy6DRbPA4" type="813" open="1"/>
</listitem>
</listitem>
</listview>
<codegeneration>
<codegenerator language="C++"/>
</codegeneration>
</xmi:Extension>
</xmi:XMI>
+32
View File
@@ -0,0 +1,32 @@
--- This file has been generated by scripts/build_db.py. DO NOT EDIT !
INSERT INTO "engineering_crs" VALUES('EPSG','5800','Astra Minas Grid',NULL,'EPSG','6507','EPSG','9300',0);
INSERT INTO "usage" VALUES('EPSG','4243','engineering_crs','EPSG','5800','EPSG','1265','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5801','Barcelona Grid B1',NULL,'EPSG','4500','EPSG','9301',0);
INSERT INTO "usage" VALUES('EPSG','4244','engineering_crs','EPSG','5801','EPSG','1266','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5802','Barcelona Grid B2',NULL,'EPSG','4500','EPSG','9301',0);
INSERT INTO "usage" VALUES('EPSG','4245','engineering_crs','EPSG','5802','EPSG','1266','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5803','Maturin Grid',NULL,'EPSG','4500','EPSG','9302',0);
INSERT INTO "usage" VALUES('EPSG','4246','engineering_crs','EPSG','5803','EPSG','1320','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5808','Maracaibo Cross Grid M4',NULL,'EPSG','4500','EPSG','9303',0);
INSERT INTO "usage" VALUES('EPSG','4251','engineering_crs','EPSG','5808','EPSG','1319','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5809','Maracaibo Cross Grid M5',NULL,'EPSG','4500','EPSG','9303',0);
INSERT INTO "usage" VALUES('EPSG','4252','engineering_crs','EPSG','5809','EPSG','1319','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5810','La Rosa Grid',NULL,'EPSG','4500','EPSG','9304',0);
INSERT INTO "usage" VALUES('EPSG','4253','engineering_crs','EPSG','5810','EPSG','1311','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5811','Mene Grande',NULL,'EPSG','4500','EPSG','9305',0);
INSERT INTO "usage" VALUES('EPSG','4254','engineering_crs','EPSG','5811','EPSG','1270','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5812','El Cubo',NULL,'EPSG','4500','EPSG','9306',0);
INSERT INTO "usage" VALUES('EPSG','4255','engineering_crs','EPSG','5812','EPSG','1269','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5813','Dabajuro',NULL,'EPSG','4500','EPSG','9307',0);
INSERT INTO "usage" VALUES('EPSG','4256','engineering_crs','EPSG','5813','EPSG','1268','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5814','Tucupita',NULL,'EPSG','4500','EPSG','9308',0);
INSERT INTO "usage" VALUES('EPSG','4257','engineering_crs','EPSG','5814','EPSG','1370','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5815','Santa Maria de Ipire',NULL,'EPSG','4500','EPSG','9310',0);
INSERT INTO "usage" VALUES('EPSG','4258','engineering_crs','EPSG','5815','EPSG','1371','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5816','Barinas west base',NULL,'EPSG','4500','EPSG','9311',0);
INSERT INTO "usage" VALUES('EPSG','4259','engineering_crs','EPSG','5816','EPSG','1267','EPSG','1136');
INSERT INTO "engineering_crs" VALUES('EPSG','5817','Tombak LNG plant',NULL,'EPSG','6510','EPSG','9314',0);
INSERT INTO "usage" VALUES('EPSG','4260','engineering_crs','EPSG','5817','EPSG','2362','EPSG','1029');
INSERT INTO "engineering_crs" VALUES('EPSG','6715','Christmas Island Grid 1985',NULL,'EPSG','4400','EPSG','1134',0);
INSERT INTO "usage" VALUES('EPSG','4925','engineering_crs','EPSG','6715','EPSG','4169','EPSG','1056');
+30
View File
@@ -0,0 +1,30 @@
--- This file has been generated by scripts/build_db.py. DO NOT EDIT !
INSERT INTO "engineering_datum" VALUES('EPSG','1134','Christmas Island Datum 1985','1985-01-01',NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13186','engineering_datum','EPSG','1134','EPSG','4169','EPSG','1056');
INSERT INTO "engineering_datum" VALUES('EPSG','9300','Astra Minas',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13850','engineering_datum','EPSG','9300','EPSG','1265','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9301','Barcelona',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13851','engineering_datum','EPSG','9301','EPSG','1266','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9302','Maturin',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13852','engineering_datum','EPSG','9302','EPSG','1320','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9303','Maracaibo Cross',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13853','engineering_datum','EPSG','9303','EPSG','1319','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9304','La Rosa',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13854','engineering_datum','EPSG','9304','EPSG','1311','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9305','Mene Grande',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13855','engineering_datum','EPSG','9305','EPSG','1270','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9306','El Cubo',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13856','engineering_datum','EPSG','9306','EPSG','1269','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9307','Dabajuro',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13857','engineering_datum','EPSG','9307','EPSG','1268','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9308','Tucupita',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13858','engineering_datum','EPSG','9308','EPSG','1370','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9309','El Mene',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13859','engineering_datum','EPSG','9309','EPSG','1270','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9310','Santa Maria de Ipire',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13860','engineering_datum','EPSG','9310','EPSG','1371','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9311','Barinas west base',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13861','engineering_datum','EPSG','9311','EPSG','1267','EPSG','1216');
INSERT INTO "engineering_datum" VALUES('EPSG','9314','Tombak LNG plant',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13864','engineering_datum','EPSG','9314','EPSG','2362','EPSG','1029');
+4985 -3316
View File
File diff suppressed because it is too large. Load diff
+308 -146
View File
@@ -94,7 +94,7 @@ INSERT INTO "extent" VALUES('EPSG','1114','Guyana','Guyana - onshore and offshor
INSERT INTO "extent" VALUES('EPSG','1115','Haiti','Haiti - onshore and offshore.',14.73,20.72,-75.73,-71.62,0);
INSERT INTO "extent" VALUES('EPSG','1116','Heard Island and McDonald Islands','Heard Island and McDonald Islands - onshore and offshore.',-59.02,-49.5,62.92,83.57,0);
INSERT INTO "extent" VALUES('EPSG','1117','Honduras','Honduras - onshore and offshore. Includes Swan Islands.',12.98,19.59,-89.36,-79.87,0);
INSERT INTO "extent" VALUES('EPSG','1118','China - Hong Kong','China - Hong Kong - onshore and offshore.',22.13,22.58,113.76,114.51,0);
INSERT INTO "extent" VALUES('EPSG','1118','Hong Kong','Hong Kong - onshore and offshore.',22.13,22.58,113.76,114.51,0);
INSERT INTO "extent" VALUES('EPSG','1119','Hungary','Hungary.',45.74,48.58,16.11,22.9,0);
INSERT INTO "extent" VALUES('EPSG','1120','Iceland','Iceland - onshore and offshore.',59.96,69.59,-30.87,-5.55,0);
INSERT INTO "extent" VALUES('EPSG','1121','India','India - onshore and offshore. Includes Amandivis, Laccadives, Minicoy, Andaman Islands, Nicobar Islands, and Sikkim.',3.87,35.51,65.6,97.42,0);
@@ -107,11 +107,11 @@ INSERT INTO "extent" VALUES('EPSG','1127','Italy','Italy - onshore and offshore.
INSERT INTO "extent" VALUES('EPSG','1128','Jamaica','Jamaica - onshore and offshore. Includes Morant Cays and Pedro Cays.',14.08,19.36,-80.6,-74.51,0);
INSERT INTO "extent" VALUES('EPSG','1129','Japan','Japan - onshore and offshore.',17.09,46.05,122.38,157.65,0);
INSERT INTO "extent" VALUES('EPSG','1130','Jordan','Jordan.',29.18,33.38,34.88,39.31,0);
INSERT INTO "extent" VALUES('EPSG','1131','Kazakhstan','Kazakhstan - onshore including Caspian Sea.',40.59,55.45,46.49,87.35,0);
INSERT INTO "extent" VALUES('EPSG','1131','Kazakhstan','Kazakhstan - onshore and offshore, including Caspian Sea.',40.59,55.45,46.49,87.35,0);
INSERT INTO "extent" VALUES('EPSG','1132','Kenya','Kenya - onshore and offshore.',-4.9,4.63,33.9,44.28,0);
INSERT INTO "extent" VALUES('EPSG','1133','Kiribati','Kiribati - onshore and offshore. Includes Fanning Island, Washington Island and Christmas in the Line Islands, Ocean Islands, Phoenix Islands.',-13.84,7.92,167.81,-146.82,0);
INSERT INTO "extent" VALUES('EPSG','1134','Korea, Democratic People''s Republic of (North Korea)','Democratic People''s Republic of Korea (North Korea) - onshore and offshore.',37.1,43.01,123.54,132.82,0);
INSERT INTO "extent" VALUES('EPSG','1135','Korea, Republic of (South Korea)','Republic of Korea (South Korea) - onshore and offshore.',28.6,40.27,122.71,134.28,0);
INSERT INTO "extent" VALUES('EPSG','1134','North Korea','Democratic People''s Republic of Korea (North Korea) - onshore and offshore.',37.1,43.01,123.54,132.82,0);
INSERT INTO "extent" VALUES('EPSG','1135','South Korea','Republic of Korea (South Korea) - onshore and offshore.',28.6,40.27,122.71,134.28,0);
INSERT INTO "extent" VALUES('EPSG','1136','Kuwait','Kuwait - onshore and offshore.',28.53,30.09,46.54,49.53,0);
INSERT INTO "extent" VALUES('EPSG','1137','Kyrgyzstan','Kyrgyzstan.',39.19,43.22,69.24,80.29,0);
INSERT INTO "extent" VALUES('EPSG','1138','Laos','Laos.',13.92,22.5,100.09,107.64,0);
@@ -123,7 +123,7 @@ INSERT INTO "extent" VALUES('EPSG','1143','Libya','Libya - onshore and offshore.
INSERT INTO "extent" VALUES('EPSG','1144','Liechtenstein','Liechtenstein.',47.05,47.28,9.47,9.64,0);
INSERT INTO "extent" VALUES('EPSG','1145','Lithuania','Lithuania - onshore and offshore.',53.89,56.45,19.02,26.82,0);
INSERT INTO "extent" VALUES('EPSG','1146','Luxembourg','Luxembourg.',49.44,50.19,5.73,6.53,0);
INSERT INTO "extent" VALUES('EPSG','1147','China - Macao','China - Macao - onshore and offshore.',22.06,22.23,113.52,113.68,0);
INSERT INTO "extent" VALUES('EPSG','1147','Macao','Macao - onshore and offshore.',22.06,22.23,113.52,113.68,0);
INSERT INTO "extent" VALUES('EPSG','1148','North Macedonia','North Macedonia.',40.85,42.36,20.45,23.04,0);
INSERT INTO "extent" VALUES('EPSG','1149','Madagascar - onshore and nearshore','Madagascar - onshore and nearshore.',-26.59,-11.69,42.53,51.03,0);
INSERT INTO "extent" VALUES('EPSG','1150','Malawi','Malawi.',-17.14,-9.37,32.68,35.93,0);
@@ -202,7 +202,7 @@ INSERT INTO "extent" VALUES('EPSG','1222','Suriname','Suriname - onshore and off
INSERT INTO "extent" VALUES('EPSG','1223','Svalbard and Jan Mayen','Svalbard and Jan Mayen - onshore and offshore. Includes Bear Island.',66.24,85.05,-16.22,35.02,1);
INSERT INTO "extent" VALUES('EPSG','1224','Eswatini','Eswatini (Swaziland).',-27.32,-25.72,30.79,32.14,0);
INSERT INTO "extent" VALUES('EPSG','1225','Sweden','Sweden - onshore and offshore.',54.96,69.07,10.03,24.17,0);
INSERT INTO "extent" VALUES('EPSG','1226','Switzerland','Switzerland.',45.82,47.81,5.96,10.49,0);
INSERT INTO "extent" VALUES('EPSG','1226','Switzerland','Switzerland.',45.81,47.81,5.95,10.5,0);
INSERT INTO "extent" VALUES('EPSG','1227','Syria','Syria - onshore and offshore.',32.31,37.3,34.96,42.38,0);
INSERT INTO "extent" VALUES('EPSG','1228','Taiwan','Taiwan, Republic of China - onshore and offshore - Taiwan Island, Penghu (Pescadores) Islands.',17.36,26.96,114.32,123.61,0);
INSERT INTO "extent" VALUES('EPSG','1229','Tajikistan','Tajikistan.',36.67,41.05,67.36,75.19,0);
@@ -226,7 +226,7 @@ INSERT INTO "extent" VALUES('EPSG','1246','United States Minor Outlying Islands'
INSERT INTO "extent" VALUES('EPSG','1247','Uruguay','Uruguay - onshore and offshore.',-37.77,-30.09,-58.49,-50.01,0);
INSERT INTO "extent" VALUES('EPSG','1248','Uzbekistan','Uzbekistan.',37.18,45.58,55.99,73.17,0);
INSERT INTO "extent" VALUES('EPSG','1249','Vanuatu','Vanuatu - onshore and offshore.',-21.65,-12.27,163.16,173.59,0);
INSERT INTO "extent" VALUES('EPSG','1250','Holy See (Vatican City State)','Holy See (Vatican City State).',41.9,41.91,12.44,12.46,0);
INSERT INTO "extent" VALUES('EPSG','1250','Vatican','Holy See (Vatican City State).',41.9,41.91,12.44,12.46,0);
INSERT INTO "extent" VALUES('EPSG','1251','Venezuela','Venezuela - onshore and offshore.',0.64,16.75,-73.38,-58.95,0);
INSERT INTO "extent" VALUES('EPSG','1252','Vietnam','Vietnam - onshore and offshore.',5.67,23.4,102.14,112.55,0);
INSERT INTO "extent" VALUES('EPSG','1253','Virgin Islands, British','British Virgin Islands - onshore and offshore - Anegada, Jost Van Dyke, Tortola, and Virgin Gorda.',17.96,22.09,-65.85,-63.29,0);
@@ -262,10 +262,10 @@ INSERT INTO "extent" VALUES('EPSG','1282','Australia - Tasmania','Australia - Ta
INSERT INTO "extent" VALUES('EPSG','1283','Canada - Maritime Provinces','Canada - New Brunswick; Nova Scotia; Prince Edward Island.',43.41,48.07,-69.05,-59.73,0);
INSERT INTO "extent" VALUES('EPSG','1284','Europe - FSU, Czechoslovakia - onshore','Armenia; Azerbaijan; Belarus; Czechia; Estonia - onshore; Georgia - onshore; Kazakhstan; Kyrgyzstan; Latvia - onshore; Lithuania - onshore; Moldova; Russian Federation - onshore; Slovakia; Tajikistan; Turkmenistan; Ukraine - onshore; Uzbekistan.',35.14,77.79,12.09,-169.57,0);
INSERT INTO "extent" VALUES('EPSG','1285','Indonesia - Bali, Java and western Sumatra onshore','Indonesia - onshore - Bali, Java and western Sumatra.',-8.91,5.97,95.16,115.77,0);
INSERT INTO "extent" VALUES('EPSG','1286','Europe - Liechtenstein and Switzerland','Liechtenstein; Switzerland.',45.82,47.81,5.96,10.49,0);
INSERT INTO "extent" VALUES('EPSG','1286','Europe - Liechtenstein and Switzerland','Liechtenstein; Switzerland.',45.81,47.81,5.95,10.5,0);
INSERT INTO "extent" VALUES('EPSG','1287','Indonesia - Banga & Belitung Islands','Indonesia - Banga and Belitung Islands.',-3.3,-1.44,105.07,108.35,0);
INSERT INTO "extent" VALUES('EPSG','1288','Angola - Angola proper','Angola - Angola proper - onshore and offshore.',-18.02,-5.82,8.2,24.09,0);
INSERT INTO "extent" VALUES('EPSG','1289','Canada - CGVD28','Canada - onshore - Alberta; British Columbia; Manitoba south of 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 "extent" VALUES('EPSG','1289','Canada - CGVD28','Canada - onshore - Alberta; British Columbia; Manitoba south of 59°N; New Brunswick; Newfoundland, Labrador between 52°50’N and 54°30’N; Northwest Territories south west of a line between 60°40’N, 110°W and the coast at 132°W; Nova Scotia; Ontario south of 52°20''N; Prince Edward Island; Quebec - mainland south of 55°N and west of 64°W, north of 55°N between 70°W and 66°W, coastal area between 66°W and 64°W, and Anticosta island; Saskatchewan south of 58°30’N; Yukon.',41.67,69.81,-141.01,-52.54,0);
INSERT INTO "extent" VALUES('EPSG','1290','Africa - Botswana, Eswatini, Lesotho and South Africa','Botswana; Eswatini (Swaziland); Lesotho; South Africa - mainland.',-34.88,-17.78,16.45,32.95,0);
INSERT INTO "extent" VALUES('EPSG','1291','Asia - FSU - Caspian Sea','Azerbaijan - offshore; Kazakhstan - offshore; Russian Federation - Caspian Sea; Turkmenistan - offshore.',37.35,46.97,46.95,53.93,0);
INSERT INTO "extent" VALUES('EPSG','1292','Argentina - Neuquen province','Argentina - Neuquen province.',-40.17,-34.26,-71.19,-66.52,0);
@@ -274,8 +274,8 @@ INSERT INTO "extent" VALUES('EPSG','1294','Portugal - mainland - onshore','Portu
INSERT INTO "extent" VALUES('EPSG','1295','Germany - DHDN','Germany - onshore - Baden-Wurtemberg, Bayern, Hessen, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Schleswig-Holstein. Also former DDR states of Sachsen and Thuringen by transformation.',47.27,55.06,5.87,15.03,1);
INSERT INTO "extent" VALUES('EPSG','1296','Europe - ED50 by country','Europe - west: Andorra; Cyprus; Denmark - onshore and offshore; Faroe Islands - onshore; France - offshore; Germany - offshore North Sea; Gibraltar; Greece - offshore; Israel - offshore; Italy including San Marino and Vatican City State; Ireland offshore; Malta; Netherlands - offshore; North Sea; Norway including Svalbard - onshore and offshore; Portugal - mainland - offshore; Spain - onshore; Türkiye (Turkey) - onshore and offshore; United Kingdom - UKCS offshore east of 6°W including Channel Islands (Guernsey and Jersey). Egypt - Western Desert; Iraq - onshore; Jordan.',25.71,84.73,-16.1,48.61,0);
INSERT INTO "extent" VALUES('EPSG','1297','Europe - west','Europe - west.',34.88,84.73,-10.56,38.01,0);
INSERT INTO "extent" VALUES('EPSG','1298','Europe - ETRF by country','Europe - onshore and offshore: Albania; Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Cyprus; Czechia; Denmark; Estonia; Faroe Islands; Finland; France; Germany; Gibraltar; Greece; Hungary; Ireland; Italy; Kosovo; Latvia; Liechtenstein; Lithuania; Luxembourg; Malta; Moldova; Monaco; Montenegro; Netherlands; North Macedonia; Norway including Svalbard and Jan Mayen; Poland; Portugal; Romania; San Marino; Serbia; Slovakia; Slovenia; Spain; Sweden; Switzerland; United Kingdom (UK) including Channel Islands and Isle of Man; Vatican City State.',32.88,84.73,-16.1,40.18,0);
INSERT INTO "extent" VALUES('EPSG','1299','Europe - EVRF2000','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar; Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.21,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','1298','Europe - ETRF','Europe - onshore and offshore - ETRF extent - approximately 16°W to 33°E and 33°N to 84°N.',33.26,84.73,-16.1,38.01,0);
INSERT INTO "extent" VALUES('EPSG','1299','Europe - EVRF2000','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar; Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.24,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','1300','Iran - FD58','Iran - Arwaz area and onshore Gulf coast west of 54°E, Lavan Island, offshore Balal field and South Pars blocks 2 and 3.',26.21,33.22,47.13,53.61,0);
INSERT INTO "extent" VALUES('EPSG','1301','Portugal - Azores C - onshore','Portugal - central Azores onshore - Faial, Graciosa, Pico, Sao Jorge, Terceira.',38.32,39.14,-28.9,-26.97,0);
INSERT INTO "extent" VALUES('EPSG','1302','Asia - Cambodia and Vietnam - mainland','Cambodia - mainland onshore; Vietnam - mainland onshore.',8.33,23.4,102.14,109.53,0);
@@ -328,11 +328,11 @@ INSERT INTO "extent" VALUES('EPSG','1348','South America - PSAD56 by country','A
INSERT INTO "extent" VALUES('EPSG','1349','North America - NAD27','North and central America: Antigua and Barbuda - onshore. Bahamas - onshore plus offshore over internal continental shelf only. Belize - onshore. British Virgin Islands - onshore. Canada onshore - Alberta, British Columbia, Manitoba, New Brunswick, Newfoundland and Labrador, Northwest Territories, Nova Scotia, Nunavut, Ontario, Prince Edward Island, Quebec, Saskatchewan and Yukon - plus offshore east coast. Cuba - onshore and offshore. El Salvador - onshore. Guatemala - onshore. Honduras - onshore. Panama - onshore. Puerto Rico - onshore. Mexico - onshore plus offshore east coast. Nicaragua - onshore. United States (USA) onshore and offshore - Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin and Wyoming - plus offshore . US Virgin Islands - onshore.',7.15,83.17,167.65,-47.74,0);
INSERT INTO "extent" VALUES('EPSG','1350','North America - NAD83','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Hawaii; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Virgin Islands. British Virgin Islands.',14.92,86.45,167.65,-40.73,0);
INSERT INTO "extent" VALUES('EPSG','1351','Asia - Middle East - Qatar offshore and UAE','Arabian Gulf; Qatar - offshore; United Arab Emirates (UAE) - Abu Dhabi; Dubai; Sharjah; Ajman; Fujairah; Ras Al Kaimah; Umm Al Qaiwain - onshore and offshore.',22.63,27.05,50.55,57.13,0);
INSERT INTO "extent" VALUES('EPSG','1352','Norway - onshore','Norway - onshore.',57.93,71.21,4.68,31.22,0);
INSERT INTO "extent" VALUES('EPSG','1352','Norway - onshore','Norway - onshore.',57.9,71.24,4.39,31.32,0);
INSERT INTO "extent" VALUES('EPSG','1353','France - onshore','France - onshore.',NULL,NULL,NULL,NULL,1);
INSERT INTO "extent" VALUES('EPSG','1354','Europe - British Isles - UK and Ireland onshore','Ireland - onshore. United Kingdom (UK) - onshore - England; Scotland; Wales; Northern Ireland. Isle of Man.',49.81,60.9,-10.56,1.84,0);
INSERT INTO "extent" VALUES('EPSG','1355','Indonesia - Sumatra','Indonesia - Sumatra.',-5.99,5.97,95.16,106.13,0);
INSERT INTO "extent" VALUES('EPSG','1356','Asia - Middle East - Israel, Jordan and Palestine onshore','Israel - onshore; Jordan; Palestine Territory - onshore.',29.18,33.38,34.17,39.31,0);
INSERT INTO "extent" VALUES('EPSG','1356','Asia - Middle East - Israel, Jordan and Palestine onshore','Israel - onshore; Jordan; Palestine - onshore.',29.18,33.38,34.17,39.31,0);
INSERT INTO "extent" VALUES('EPSG','1357','Europe - eastern and FSU','Albania; Bulgaria; Czech Republic; Germany (former DDR); Hungary; Poland; Romania; Slovakia. Armenia; Azerbaijan; Belarus; Estonia; Georgia; Kazakhstan; Kyrgyzstan; Latvia; Lithuania; Moldova; Russian Federation; Tajikistan; Turkmenistan; Ukraine; Uzbekistan.',35.1,78.0,9.87,-169.73,1);
INSERT INTO "extent" VALUES('EPSG','1358','South America - SAD69 by country','Brazil - onshore and offshore. In rest of South America - onshore north of approximately 45°S and Tierra del Fuego.',-55.96,12.52,-91.72,-25.28,0);
INSERT INTO "extent" VALUES('EPSG','1359','Indonesia - Kalimantan SE','Indonesia - Kalimantan - onshore southeast coastal area including Mahakam delta coastal and offshore shelf areas.',-4.24,0.0,114.55,117.99,0);
@@ -340,7 +340,7 @@ INSERT INTO "extent" VALUES('EPSG','1360','Indonesia - Kalimantan E','Indonesia
INSERT INTO "extent" VALUES('EPSG','1361','Sudan - south','Sudan - south.',NULL,NULL,NULL,NULL,1);
INSERT INTO "extent" VALUES('EPSG','1362','Asia - Brunei and East Malaysia','Brunei - onshore and offshore; Malaysia - East Malaysia (Sabah; Sarawak) - onshore and offshore.',0.85,7.67,109.31,119.61,0);
INSERT INTO "extent" VALUES('EPSG','1363','UAE - Abu Dhabi and Dubai - onshore','United Arab Emirates (UAE) - Abu Dhabi onshore and Dubai onshore.',22.63,25.34,51.56,56.03,0);
INSERT INTO "extent" VALUES('EPSG','1364','Asia - Japan and Korea','Japan - onshore; North Korea - onshore; South Korea - onshore.',20.37,45.54,122.83,154.05,0);
INSERT INTO "extent" VALUES('EPSG','1364','Asia - Japan and Korea','Japan - onshore; Democratic People''s Republic of Korea (North Korea) - onshore; Republic of Korea (South Korea) - onshore.',20.37,45.54,122.83,154.05,0);
INSERT INTO "extent" VALUES('EPSG','1365','Algeria - north of 32°N','Algeria - onshore north of 32°N.',31.99,37.14,-2.95,9.09,0);
INSERT INTO "extent" VALUES('EPSG','1366','Africa - Algeria, Morocco and Tunisia','Algeria; Morocco; Tunisia.',18.98,37.34,-13.17,11.99,1);
INSERT INTO "extent" VALUES('EPSG','1367','Canada - Ontario','Canada - Ontario.',41.67,56.9,-95.16,-74.35,0);
@@ -358,9 +358,9 @@ INSERT INTO "extent" VALUES('EPSG','1378','USA - Delaware','United States (USA)
INSERT INTO "extent" VALUES('EPSG','1379','USA - Florida','United States (USA) - Florida.',24.41,31.01,-87.63,-79.97,0);
INSERT INTO "extent" VALUES('EPSG','1380','USA - Georgia','United States (USA) - Georgia.',30.36,35.01,-85.61,-80.77,0);
INSERT INTO "extent" VALUES('EPSG','1381','USA - Idaho','United States (USA) - Idaho.',41.99,49.01,-117.24,-111.04,0);
INSERT INTO "extent" VALUES('EPSG','1382','USA - Illinois','United States (USA) - Illinois.',36.98,42.51,-91.52,-87.02,0);
INSERT INTO "extent" VALUES('EPSG','1383','USA - Indiana','United States (USA) - Indiana.',37.77,41.77,-88.06,-84.78,0);
INSERT INTO "extent" VALUES('EPSG','1384','USA - Iowa','United States (USA) - Iowa.',40.37,43.51,-96.65,-90.14,0);
INSERT INTO "extent" VALUES('EPSG','1382','USA - Illinois','United States (USA) - Illinois.',36.97,42.51,-91.52,-87.02,0);
INSERT INTO "extent" VALUES('EPSG','1383','USA - Indiana','United States (USA) - Indiana.',37.77,41.77,-88.1,-84.78,0);
INSERT INTO "extent" VALUES('EPSG','1384','USA - Iowa','United States (USA) - Iowa.',40.36,43.51,-96.65,-90.14,0);
INSERT INTO "extent" VALUES('EPSG','1385','USA - Kansas','United States (USA) - Kansas.',36.99,40.01,-102.06,-94.58,0);
INSERT INTO "extent" VALUES('EPSG','1386','USA - Kentucky','United States (USA) - Kentucky.',36.49,39.15,-89.57,-81.95,0);
INSERT INTO "extent" VALUES('EPSG','1387','USA - Louisiana','United States (USA) - Louisiana.',28.85,33.03,-94.05,-88.75,0);
@@ -472,9 +472,9 @@ INSERT INTO "extent" VALUES('EPSG','1492','Yemen - South Yemen - mainland west o
INSERT INTO "extent" VALUES('EPSG','1493','Yemen - South Yemen - mainland east of 48°E','Yemen - South Yemen onshore mainland east of 48°E.',13.94,19.0,48.0,53.14,0);
INSERT INTO "extent" VALUES('EPSG','1494','Vietnam - onshore Vung Tau area','Vietnam - onshore Vung Tau area.',9.03,11.04,105.49,107.58,0);
INSERT INTO "extent" VALUES('EPSG','1495','Vietnam - offshore Cuu Long basin','Vietnam - offshore - Cuu Long basin and northwestern part of Nam Con Son basin.',7.99,11.15,106.54,110.0,0);
INSERT INTO "extent" VALUES('EPSG','1496','Korea, Republic of (South Korea) - east of 128°E onshore','Republic of Korea (South Korea) - onshore east of 128°E.',34.49,38.64,128.0,129.65,0);
INSERT INTO "extent" VALUES('EPSG','1497','Korea, Republic of (South Korea) - 126°E to 128°E onshore','Republic of Korea (South Korea) - onshore between 126°E and 128°E.',33.14,38.33,126.0,128.0,0);
INSERT INTO "extent" VALUES('EPSG','1498','Korea, Republic of (South Korea) - 124°E to 126°E onshore','Republic of Korea (South Korea) - onshore between 124°E and 126°E.',33.99,38.04,124.53,126.0,0);
INSERT INTO "extent" VALUES('EPSG','1496','South Korea - 128°E to 130°E onshore','Republic of Korea (South Korea) - onshore between 128°E and 130°E.',34.49,38.64,128.0,129.65,0);
INSERT INTO "extent" VALUES('EPSG','1497','South Korea - 126°E to 128°E onshore','Republic of Korea (South Korea) - onshore between 126°E and 128°E.',33.14,38.33,126.0,128.0,0);
INSERT INTO "extent" VALUES('EPSG','1498','South Korea - 124°E to 126°E onshore','Republic of Korea (South Korea) - onshore between 124°E and 126°E.',33.99,38.04,124.53,126.0,0);
INSERT INTO "extent" VALUES('EPSG','1499','Venezuela - Maracaibo - blocks I II and III','Venezuela - Maracaibo area offshore blocks I, II and III.',10.0,10.51,-71.5,-71.17,0);
INSERT INTO "extent" VALUES('EPSG','1500','New Zealand - North Island','New Zealand - North Island.',-41.67,-34.1,171.99,178.63,0);
INSERT INTO "extent" VALUES('EPSG','1501','New Zealand - South Island','New Zealand - South Island.',-46.86,-40.44,166.37,174.46,0);
@@ -574,10 +574,10 @@ INSERT INTO "extent" VALUES('EPSG','1594','China - 114°E to 120°E onshore','Ch
INSERT INTO "extent" VALUES('EPSG','1595','China - 120°E to 126°E onshore','China - onshore between 120°E and 126°E.',26.34,53.56,120.0,126.0,0);
INSERT INTO "extent" VALUES('EPSG','1596','China - 126°E to 132°E onshore','China - onshore between 126°E and 132°E.',40.89,52.79,126.0,132.0,0);
INSERT INTO "extent" VALUES('EPSG','1597','China - east of 132°E','China - east of 132°E.',45.02,48.4,132.0,134.77,0);
INSERT INTO "extent" VALUES('EPSG','1598','Colombia - west of 75°35''W','Colombia - mainland onshore west of 1°30''W of Bogota (75°34''51.30"W of Greenwich).',0.03,10.21,-79.1,-75.58,0);
INSERT INTO "extent" VALUES('EPSG','1599','Colombia - 75°35''W to 72°35''W','Colombia - onshore between 1°30''W and 1°30''E of Bogota (75°35''W and 72°35''W of Greenwich).',-2.51,11.82,-75.59,-72.58,0);
INSERT INTO "extent" VALUES('EPSG','1600','Colombia - 72°35''W to 69°35''W','Colombia - onshore between 1°30''E and 4°30''E of Bogota (72°35''W and 69°34''W of Greenwich).',-4.23,12.52,-72.59,-69.58,0);
INSERT INTO "extent" VALUES('EPSG','1601','Colombia - east of 69°35''W','Colombia - east of 4°30''E of Bogota (69°34''51.3"W of Greenwich).',-2.25,6.31,-69.59,-66.87,0);
INSERT INTO "extent" VALUES('EPSG','1598','Colombia - west of 75°35''W','Colombia - mainland onshore west of 1°30''W of Bogota (approximately 75°35''W of Greenwich).',0.03,10.21,-79.1,-75.58,0);
INSERT INTO "extent" VALUES('EPSG','1599','Colombia - 75°35''W to 72°35''W','Colombia - onshore between 1°30''W and 1°30''E of Bogota (approximately 75°35''W and 72°35''W of Greenwich).',-2.51,11.82,-75.59,-72.58,0);
INSERT INTO "extent" VALUES('EPSG','1600','Colombia - 72°35''W to 69°35''W','Colombia - onshore between 1°30''E and 4°30''E of Bogota (approximately 72°35''W and 69°35''W of Greenwich).',-4.23,12.52,-72.59,-69.58,0);
INSERT INTO "extent" VALUES('EPSG','1601','Colombia - east of 69°35''W','Colombia - east of 4°30''E of Bogota (approximately 69°35''W of Greenwich).',-2.25,6.31,-69.59,-66.87,0);
INSERT INTO "extent" VALUES('EPSG','1602','Colombia - offshore west of 78°W','Colombia - offshore west of 78°W of Greenwich.',NULL,NULL,NULL,NULL,1);
INSERT INTO "extent" VALUES('EPSG','1603','Colombia - offshore Caribbean west of 72°W','Colombia - offshore Caribbean west of 72°W of Greenwich.',7.9,13.68,-77.37,-72.0,0);
INSERT INTO "extent" VALUES('EPSG','1604','Angola - Angola proper - offshore','Angola - Angola proper - offshore.',-17.26,-6.01,8.2,13.86,0);
@@ -600,18 +600,18 @@ INSERT INTO "extent" VALUES('EPSG','1620','Tunisia - south of 34°39''N','Tunisi
INSERT INTO "extent" VALUES('EPSG','1621','Brazil - Corrego Alegre - west of 42°W','Brazil - NE coastal area between 45°W and 42°W.',-3.9,-1.5,-45.0,-42.0,1);
INSERT INTO "extent" VALUES('EPSG','1622','Brazil - Corrego Alegre - east of 42°W','Brazil - NE coastal area between 42°W and 40°W.',-4.0,-2.7,-42.0,-40.0,1);
INSERT INTO "extent" VALUES('EPSG','1623','Asia - Middle East - Lebanon and Syria onshore','Lebanon - onshore. Syrian Arab Republic - onshore.',32.31,37.3,35.04,42.38,0);
INSERT INTO "extent" VALUES('EPSG','1624','Germany - West Germany - west of 7.5°E','Germany - former West Germany onshore west of 7°30''E - states of Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland.',49.11,53.81,5.86,7.5,0);
INSERT INTO "extent" VALUES('EPSG','1624','Germany - West Germany - west of 7.5°E','Germany - former West Germany onshore west of 7°30''E - states of Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland.',49.11,53.81,5.86,7.51,0);
INSERT INTO "extent" VALUES('EPSG','1625','Germany - West-Germany - 7.5°E to 10.5°E','Germany - former West Germany onshore between 7°30''E and 10°30''E - states of Baden-Wurtemberg, Bayern, Bremen, Hamberg, Hessen, Niedersachsen, Nordrhein-Westfalen, Rhineland-Pfalz, Schleswig-Holstein.',47.27,55.09,7.5,10.51,0);
INSERT INTO "extent" VALUES('EPSG','1626','Germany - West Germany - 10.5°E to 13.5°E','Germany - former West Germany onshore between 10°30''E and 13°30''E - states of Bayern, Berlin, Niedersachsen, Schleswig-Holstein.',47.39,54.59,10.5,13.51,0);
INSERT INTO "extent" VALUES('EPSG','1627','Germany - West Germany - east of 13.5°E','Germany - former West Germany onshore east of 13°30''E - state of Bayern.',48.51,48.98,13.5,13.84,0);
INSERT INTO "extent" VALUES('EPSG','1628','Germany - west of 4.5°E','Germany - onshore - west of 4°30''E.',NULL,NULL,NULL,NULL,1);
INSERT INTO "extent" VALUES('EPSG','1629','UK - offshore - North Sea','United Kingdom (UK) - offshore - North Sea.',51.03,62.03,-5.05,3.4,0);
INSERT INTO "extent" VALUES('EPSG','1630','Netherlands - offshore','Netherlands - offshore North Sea.',51.45,55.77,2.53,6.41,0);
INSERT INTO "extent" VALUES('EPSG','1630','Netherlands - offshore','Netherlands - offshore North Sea.',51.44,55.77,2.53,6.37,0);
INSERT INTO "extent" VALUES('EPSG','1631','Europe - 18°W to 12°W and ED50 by country','Europe - between 18°W and 12°W - Ireland offshore.',48.43,56.57,-16.1,-12.0,0);
INSERT INTO "extent" VALUES('EPSG','1632','Europe - 12°W to 6°W and ED50 by country','Europe - between 12°W and 6°W - Faroe Islands - onshore; Spain - mainland onshore; Ireland offshore.',36.13,62.41,-12.0,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','1633','Europe - 6°W to 0°W and ED50 by country','Europe - between 6°W and 0°W - Channel Islands (Jersey, Guernsey); France offshore; Gibraltar; Ireland offshore; Norway including Svalbard - offshore; Spain - onshore; United Kingdom - UKCS offshore.',35.26,80.49,-6.0,0.01,0);
INSERT INTO "extent" VALUES('EPSG','1634','Europe - 0°E to 6°E and ED50 by country','Europe - between 0°E and 6°E - Andorra; Denmark (North Sea); Germany offshore; Netherlands offshore; Norway including Svalbard - onshore and offshore; Spain - onshore (mainland and Balearic Islands); United Kingdom (UKCS) offshore.',38.56,82.45,0.0,6.01,0);
INSERT INTO "extent" VALUES('EPSG','1635','Europe - 6°E to 12°E and ED50 by country','Europe - between 6°E and 12°E - Denmark - onshore and offshore; France - offshore; Germany offshore; Italy - onshore and offshore; Netherlands offshore; Norway including Svalbard - onshore and offshore.',36.53,84.33,5.99,12.01,0);
INSERT INTO "extent" VALUES('EPSG','1634','Europe - 0°E to 6°E and ED50 by country','Europe - between 0°E and 6°E - Andorra; Denmark (North Sea); France - offshore; Germany - offshore; Netherlands - offshore; Norway including Svalbard - onshore and offshore; Spain - onshore (mainland and Balearic Islands); United Kingdom - offshore UKCS.',38.56,82.45,0.0,6.0,0);
INSERT INTO "extent" VALUES('EPSG','1635','Europe - 6°E to 12°E and ED50 by country','Europe - between 6°E and 12°E - Denmark - onshore and offshore; France - offshore; Germany offshore; Italy - onshore and offshore; Netherlands offshore; Norway including Svalbard - onshore and offshore.',36.53,84.33,5.99,12.0,0);
INSERT INTO "extent" VALUES('EPSG','1636','Europe - 12°E to 18°E and ED50 by country','Europe - between 12°E and 18°E onshore and offshore - Denmark (including Bornholm); Italy including San Marino and Vatican City State; Malta; Norway including Svalbard.',34.49,84.42,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','1637','Europe - 18°E to 24°E and ED50 by country','Europe - between 18°E and 24°E - Greece - offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',33.59,84.54,17.99,24.01,0);
INSERT INTO "extent" VALUES('EPSG','1638','Europe - 24°E to 30°E and ED50 by country','Europe - between 24°E and 30°E - Greece - offshore; Norway including Svalbard - onshore and offshore; Türkiye (Turkey) - onshore and offshore. Egypt - Western Desert.',25.71,84.73,24.0,30.01,0);
@@ -717,14 +717,14 @@ INSERT INTO "extent" VALUES('EPSG','1737','Algeria - 0°E to 6°E onshore','Alge
INSERT INTO "extent" VALUES('EPSG','1738','Algeria - east of 6°E onshore','Algeria - onshore east of 6°E (of Greenwich).',19.6,37.14,6.0,11.99,0);
INSERT INTO "extent" VALUES('EPSG','1739','Kuwait - west of 48°E onshore','Kuwait - onshore west of 48°E.',28.53,30.09,46.54,48.0,0);
INSERT INTO "extent" VALUES('EPSG','1740','Kuwait - east of 48°E onshore','Kuwait - onshore east of 48°E.',28.54,30.04,48.0,48.48,0);
INSERT INTO "extent" VALUES('EPSG','1741','Norway - zone I','Norway - west of 3°30''W of Oslo (7°13''22.5"E of Greenwich).',57.93,63.06,4.68,7.23,0);
INSERT INTO "extent" VALUES('EPSG','1742','Norway - zone II','Norway - between 3°30''W and 1°10'' W of Oslo (7°13''22.5"E and 9°33''22.5"E of Greenwich).',57.95,63.87,7.22,9.56,0);
INSERT INTO "extent" VALUES('EPSG','1743','Norway - zone III','Norway - between 1°10''W and 1°15''E of Oslo (9°33''22.5"E and 11°58''22.5"E of Greenwich).',58.84,65.76,9.55,11.98,0);
INSERT INTO "extent" VALUES('EPSG','1744','Norway - zone IV','Norway - between 1°15''E and 4°20''E of Oslo (11°58''22.5"E and 15°03''22.5"E of Greenwich).',59.88,69.06,11.97,15.06,0);
INSERT INTO "extent" VALUES('EPSG','1745','Norway - zone V','Norway - between 4°20''E and 8°10''E of Oslo (15°03''22.5"E and 18°53''22.5"E of Greenwich).',66.15,70.19,15.05,18.89,0);
INSERT INTO "extent" VALUES('EPSG','1746','Norway - zone VI','Norway - between 8°10''E and 12°10''E of Oslo (18°53''22.5"E and 22°53''22.5"E of Greenwich).',68.33,70.81,18.88,22.89,0);
INSERT INTO "extent" VALUES('EPSG','1747','Norway - zone VII','Norway - between 12°10''E and 16°15''E of Oslo (22°53''22.5"E and 26°58''22.5"E of Greenwich).',68.58,71.21,22.88,26.98,0);
INSERT INTO "extent" VALUES('EPSG','1748','Norway - zone VIII','Norway - east of 16°15''E of Oslo (26°58''22.5"E of Greenwich).',69.02,71.17,26.97,31.22,0);
INSERT INTO "extent" VALUES('EPSG','1741','Norway - zone I','Norway - west of 3°30''W of Oslo (7°13''22.5"E of Greenwich).',57.92,63.17,4.39,7.23,0);
INSERT INTO "extent" VALUES('EPSG','1742','Norway - zone II','Norway - between 3°30''W and 1°10'' W of Oslo (7°13''22.5"E and 9°33''22.5"E of Greenwich).',57.9,64.23,7.22,9.56,0);
INSERT INTO "extent" VALUES('EPSG','1743','Norway - zone III','Norway - between 1°10''W and 1°15''E of Oslo (9°33''22.5"E and 11°58''22.5"E of Greenwich).',58.78,67.58,9.55,11.98,0);
INSERT INTO "extent" VALUES('EPSG','1744','Norway - zone IV','Norway - between 1°15''E and 4°20''E of Oslo (11°58''22.5"E and 15°03''22.5"E of Greenwich).',59.88,69.1,11.97,15.06,0);
INSERT INTO "extent" VALUES('EPSG','1745','Norway - zone V','Norway - between 4°20''E and 8°10''E of Oslo (15°03''22.5"E and 18°53''22.5"E of Greenwich).',66.15,70.27,15.05,18.89,0);
INSERT INTO "extent" VALUES('EPSG','1746','Norway - zone VI','Norway - between 8°10''E and 12°10''E of Oslo (18°53''22.5"E and 22°53''22.5"E of Greenwich).',68.33,70.93,18.88,22.89,0);
INSERT INTO "extent" VALUES('EPSG','1747','Norway - zone VII','Norway - between 12°10''E and 16°15''E of Oslo (22°53''22.5"E and 26°58''22.5"E of Greenwich).',68.58,71.24,22.88,26.98,0);
INSERT INTO "extent" VALUES('EPSG','1748','Norway - zone VIII','Norway - east of 16°15''E of Oslo (26°58''22.5"E of Greenwich).',69.02,71.19,26.97,31.32,0);
INSERT INTO "extent" VALUES('EPSG','1749','Asia - Middle East - Qatar offshore and UAE west of 54°E','Qatar - offshore. United Arab Emirates (UAE) - Abu Dhabi - onshore and offshore west of 54°E.',22.76,27.05,50.55,54.01,0);
INSERT INTO "extent" VALUES('EPSG','1750','UAE - east of 54°E','United Arab Emirates (UAE) onshore and offshore east of 54°E - Abu Dhabi; Dubai; Sharjah; Ajman; Fujairah; Ras Al Kaimah; Umm Al Qaiwain.',22.63,26.27,54.0,57.13,0);
INSERT INTO "extent" VALUES('EPSG','1751','Peru - east of 73°W','Peru - east of 73°W, onshore.',-18.39,-2.14,-73.0,-68.67,0);
@@ -1032,7 +1032,7 @@ INSERT INTO "extent" VALUES('EPSG','2052','World - N hemisphere - 24°W to 18°W
INSERT INTO "extent" VALUES('EPSG','2053','World - S hemisphere - 24°W to 18°W - by country','Between 24°W and 18°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-24.0,-18.0,0);
INSERT INTO "extent" VALUES('EPSG','2054','World - N hemisphere - 18°W to 12°W - by country','Between 18°W and 12°W, northern hemisphere between equator and 84°N, onshore and offshore. Gambia. Greenland. Guinea. Guinea-Bissau. Iceland. Ireland - offshore Porcupine Basin. Mauritania. Morocco. Senegal. Sierra Leone. Western Sahara.',0.0,84.0,-18.0,-12.0,0);
INSERT INTO "extent" VALUES('EPSG','2055','World - S hemisphere - 18°W to 12°W - by country','Between 18°W and 12°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-18.0,-12.0,0);
INSERT INTO "extent" VALUES('EPSG','2056','World - N hemisphere - 12°W to 6°W - by country','Between 12°W and 6°W, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Côte D''Ivoire (Ivory Coast). Faroe Islands. Guinea. Ireland. Jan Mayen. Mali. Mauritania. Morocco. Portugal. Sierra Leone. Spain. United Kingdom (UK). Western Sahara.',0.0,84.0,-12.0,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','2056','World - N hemisphere - 12°W to 6°W - by country','Between 12°W and 6°W, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Côte D''Ivoire (Ivory Coast). Faroe Islands. Guinea. Ireland. Jan Mayen. Liberia, Mali. Mauritania. Morocco. Portugal. Sierra Leone. Spain. United Kingdom (UK). Western Sahara.',0.0,84.01,-12.01,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','2057','World - S hemisphere - 12°W to 6°W - by country','Between 12°W and 6°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-12.0,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','2058','World - N hemisphere - 6°W to 0°W - by country','Between 6°W and 0°W, northern hemisphere between equator and 84°N, onshore and offshore. Algeria. Burkina Faso. Côte'' Ivoire (Ivory Coast). Faroe Islands - offshore. France. Ghana. Gibraltar. Ireland - offshore Irish Sea. Mali. Mauritania. Morocco. Spain. United Kingdom (UK).',0.0,84.0,-6.0,0.0,0);
INSERT INTO "extent" VALUES('EPSG','2059','World - S hemisphere - 6°W to 0°W - by country','Between 6°W and 0°W, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,-6.0,0.0,0);
@@ -1046,7 +1046,7 @@ INSERT INTO "extent" VALUES('EPSG','2066','World - N hemisphere - 18°E to 24°E
INSERT INTO "extent" VALUES('EPSG','2067','World - S hemisphere - 18°E to 24°E - by country','Between 18°E and 24°E, southern hemisphere between 80°S and equator, onshore and offshore. Angola. Botswana. Democratic Republic of the Congo (Zaire). Namibia. South Africa. Zambia.',-80.0,0.0,18.0,24.0,0);
INSERT INTO "extent" VALUES('EPSG','2068','World - N hemisphere - 24°E to 30°E - by country','Between 24°E and 30°E, northern hemisphere between equator and 84°N, onshore and offshore. Belarus. Bulgaria. Central African Republic. Democratic Republic of the Congo (Zaire). Egypt. Estonia. Finland. Greece. Latvia. Lesotho. Libya. Lithuania. Moldova. Norway. Poland. Romania. Russian Federation. Sudan. Svalbard. Türkiye (Turkey). Uganda. Ukraine.',0.0,84.0,24.0,30.0,0);
INSERT INTO "extent" VALUES('EPSG','2069','World - S hemisphere - 24°E to 30°E - by country','Between 24°E and 30°E, southern hemisphere between 80°S and equator, onshore and offshore. Botswana. Burundi. Democratic Republic of the Congo (Zaire). Rwanda. South Africa. Tanzania. Uganda. Zambia. Zimbabwe.',-80.0,0.0,24.0,30.0,0);
INSERT INTO "extent" VALUES('EPSG','2070','World - N hemisphere - 30°E to 36°E - by country','Between 30°E and 36°E, northern hemisphere between equator and 84°N, onshore and offshore. Belarus. Cyprus. Egypt. Ethiopia. Finland. Israel. Jordan. Kenya. Lebanon. Moldova. Norway. Russian Federation. Saudi Arabia. Sudan. Syria. Türkiye (Turkey). Uganda. Ukraine.',0.0,84.0,30.0,36.0,0);
INSERT INTO "extent" VALUES('EPSG','2070','World - N hemisphere - 30°E to 36°E - by country','Between 30°E and 36°E, northern hemisphere between equator and 84°N, onshore and offshore. Belarus. Cyprus. Egypt. Ethiopia. Finland. Israel. Jordan. Kenya. Lebanon. Moldova. Norway. Palestine. Russian Federation. Saudi Arabia. Sudan. Syria. Türkiye (Turkey). Uganda. Ukraine.',0.0,84.0,30.0,36.0,0);
INSERT INTO "extent" VALUES('EPSG','2071','World - S hemisphere - 30°E to 36°E - by country','Between 30°E and 36°E, southern hemisphere between 80°S and equator, onshore and offshore. Burundi. Eswatini (Swaziland). Kenya. Malawi. Mozambique. Rwanda. South Africa. Tanzania. Uganda. Zambia. Zimbabwe.',-80.0,0.0,30.0,36.0,0);
INSERT INTO "extent" VALUES('EPSG','2072','World - N hemisphere - 36°E to 42°E - by country','Between 36°E and 42°E, northern hemisphere between equator and 84°N, onshore and offshore. Djibouti. Egypt. Eritrea. Ethiopia. Georgia. Iraq. Jordan. Kenya. Lebanon. Russian Federation. Saudi Arabia. Somalia. Sudan. Syria. Türkiye (Turkey). Ukraine.',0.0,84.0,36.0,42.0,0);
INSERT INTO "extent" VALUES('EPSG','2073','World - S hemisphere - 36°E to 42°E - by country','Between 36°E and 42°E, southern hemisphere between 80°S and equator, onshore and offshore. Kenya. Mozambique. Tanzania.',-80.0,0.0,36.0,42.0,0);
@@ -1060,7 +1060,7 @@ INSERT INTO "extent" VALUES('EPSG','2080','World - N hemisphere - 60°E to 66°E
INSERT INTO "extent" VALUES('EPSG','2081','World - S hemisphere - 60°E to 66°E - by country','Between 60°E and 66°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,60.0,66.0,0);
INSERT INTO "extent" VALUES('EPSG','2082','World - N hemisphere - 66°E to 72°E - by country','Between 66°E and 72°E, northern hemisphere between equator and 84°N, onshore and offshore. Afghanistan. India. Kazakhstan. Kyrgyzstan. Pakistan. Russian Federation. Tajikistan. Uzbekistan.',0.0,84.0,66.0,72.0,0);
INSERT INTO "extent" VALUES('EPSG','2083','World - S hemisphere - 66°E to 72°E - by country','Between 66°E and 72°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,66.0,72.0,0);
INSERT INTO "extent" VALUES('EPSG','2084','World - N hemisphere - 72°E to 78°E - by country','Between 72°E and 78°E, northern hemisphere between equator and 84°N, onshore and offshore. China. India. Kazakhstan. Kyrgyzstan. Maldives. Pakistan. Russian Federation. Tajikistan.',0.0,84.0,72.0,78.0,0);
INSERT INTO "extent" VALUES('EPSG','2084','World - N hemisphere - 72°E to 78°E - by country','Between 72°E and 78°E, northern hemisphere between equator and 84°N, onshore and offshore. China. India. Kazakhstan. Kyrgyzstan. Maldives. Pakistan. Russian Federation. Tajikistan. Uzbekistan.',0.0,84.0,72.0,78.0,0);
INSERT INTO "extent" VALUES('EPSG','2085','World - S hemisphere - 72°E to 78°E - by country','Between 72°E and 78°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,72.0,78.0,0);
INSERT INTO "extent" VALUES('EPSG','2086','World - N hemisphere - 78°E to 84°E - by country','Between 78°E and 84°E, northern hemisphere between equator and 84°N, onshore and offshore. China. India. Kazakhstan. Kyrgyzstan. Nepal. Russian Federation. Sri Lanka.',0.0,84.0,78.0,84.0,0);
INSERT INTO "extent" VALUES('EPSG','2087','World - S hemisphere - 78°E to 84°E - by country','Between 78°E and 84°E, southern hemisphere between 80°S and equator, onshore and offshore.',-80.0,0.0,78.0,84.0,0);
@@ -1076,9 +1076,9 @@ INSERT INTO "extent" VALUES('EPSG','2096','World - N hemisphere - 108°E to 114
INSERT INTO "extent" VALUES('EPSG','2097','World - S hemisphere - 108°E to 114°E - by country','Between 108°E and 114°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia.',-80.0,0.0,108.0,114.0,0);
INSERT INTO "extent" VALUES('EPSG','2098','World - N hemisphere - 114°E to 120°E - by country','Between 114°E and 120°E, northern hemisphere between equator and 84°N, onshore and offshore. Brunei. China. Hong Kong. Indonesia. Malaysia - East Malaysia - Sarawak. Mongolia. Philippines. Russian Federation. Taiwan.',0.0,84.0,114.0,120.0,0);
INSERT INTO "extent" VALUES('EPSG','2099','World - S hemisphere - 114°E to 120°E - by country','Between 114°E and 120°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia.',-80.0,0.0,114.0,120.0,0);
INSERT INTO "extent" VALUES('EPSG','2100','World - N hemisphere - 120°E to 126°E - by country','Between 120°E and 126°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Japan. North Korea. Philippines. Russian Federation. South Korea. Taiwan.',0.0,84.0,120.0,126.0,0);
INSERT INTO "extent" VALUES('EPSG','2100','World - N hemisphere - 120°E to 126°E - by country','Between 120°E and 126°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Japan. Democratic People''s Republic of Korea (North Korea). Republic of Korea (South Korea). Philippines. Russian Federation. Taiwan.',0.0,84.0,120.0,126.0,0);
INSERT INTO "extent" VALUES('EPSG','2101','World - S hemisphere - 120°E to 126°E - by country','Between 120°E and 126°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. East Timor. Indonesia.',-80.0,0.0,120.0,126.0,0);
INSERT INTO "extent" VALUES('EPSG','2102','World - N hemisphere - 126°E to 132°E - by country','Between 126°E and 132°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Japan. North Korea. Russian Federation. South Korea.',0.0,84.0,126.0,132.0,0);
INSERT INTO "extent" VALUES('EPSG','2102','World - N hemisphere - 126°E to 132°E - by country','Between 126°E and 132°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Indonesia. Japan. Democratic People''s Republic of Korea (North Korea). Republic of Korea (South Korea). Russian Federation.',0.0,84.0,126.0,132.0,0);
INSERT INTO "extent" VALUES('EPSG','2103','World - S hemisphere - 126°E to 132°E - by country','Between 126°E and 132°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. East Timor. Indonesia.',-80.0,0.0,126.0,132.0,0);
INSERT INTO "extent" VALUES('EPSG','2104','World - N hemisphere - 132°E to 138°E - by country','Between 132°E and 138°E, northern hemisphere between equator and 84°N, onshore and offshore. China. Japan. Russian Federation.',0.0,84.0,132.0,138.0,0);
INSERT INTO "extent" VALUES('EPSG','2105','World - S hemisphere - 132°E to 138°E - by country','Between 132°E and 138°E, southern hemisphere between 80°S and equator, onshore and offshore. Australia. Indonesia.',-80.0,0.0,132.0,138.0,0);
@@ -1099,14 +1099,14 @@ INSERT INTO "extent" VALUES('EPSG','2119','World - S hemisphere - 174°E to 180
INSERT INTO "extent" VALUES('EPSG','2120','Guatemala - north of 15°51''30"N','Guatemala - north of 15°51''30"N.',15.85,17.83,-91.86,-88.34,0);
INSERT INTO "extent" VALUES('EPSG','2121','Guatemala - south of 15°51''30"N','Guatemala - south of 15°51''30"N.',13.69,15.86,-92.29,-88.19,0);
INSERT INTO "extent" VALUES('EPSG','2122','Europe - 18°W to 12°W and ETRS89 by country','Europe between 18°W and 12°W: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - offshore; Portugal - offshore mainland; Spain - offshore mainland; United Kingdom (UKCS) - offshore.',34.93,72.44,-16.1,-11.99,0);
INSERT INTO "extent" VALUES('EPSG','2123','Europe - 12°W to 6°W and ETRS89 by country','Europe between 12°W and 6°W: Faroe Islands - onshore and offshore; Ireland - offshore; Jan Mayen - onshore and offshore; Portugal - onshore and offshore; Spain - onshore and offshore; United Kingdom - UKCS offshore.',34.91,74.13,-12.0,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','2124','Europe - 6°W to 0°W and ETRS89 by country','Europe between 6°W and 0°W: Faroe Islands offshore; Ireland - offshore; Jan Mayen - offshore; Norway including Svalbard - offshore; Spain - onshore and offshore.',35.26,80.49,-6.0,0.01,0);
INSERT INTO "extent" VALUES('EPSG','2125','Europe - 0°E to 6°E and ETRS89 by country','Europe between 0°E and 6°E: Andorra; Belgium - onshore and offshore; Denmark - offshore; Germany - offshore; Jan Mayen - offshore; Norway including Svalbard - onshore and offshore; Spain - onshore and offshore.',37.0,82.45,0.0,6.01,0);
INSERT INTO "extent" VALUES('EPSG','2126','Europe - 6°E to 12°E and ETRS89 by country','Europe between 6°E and 12°E: Austria; Belgium; Denmark - onshore and offshore; Germany - onshore and offshore; Norway including - onshore and offshore; Spain - offshore.',38.76,84.33,6.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','2127','Europe - 12°E to 18°E and ETRS89 by country','Europe between 12°E and 18°E: Austria; Denmark - offshore and offshore; Germany - onshore and offshore; Norway including Svalbard - onshore and offshore.',46.4,84.42,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','2128','Europe - 18°E to 24°E and ETRS89 by country','Europe between 18°E and 24°E: Finland - onshore and offshore; Norway including Svalbard - onshore and offshore.',58.84,84.54,17.99,24.01,0);
INSERT INTO "extent" VALUES('EPSG','2129','Europe - 24°E to 30°E and ETRS89 by country','Europe between 24°E and 30°E: Finland - onshore and offshore; Norway including Svalbard - onshore and offshore.',59.64,84.73,24.0,30.01,0);
INSERT INTO "extent" VALUES('EPSG','2130','Europe - 30°E to 36°E and ETRS89 by country','Europe between 30°E and 36°E: Finland - onshore and offshore; Norway including Svalbard - onshore and offshore.',61.73,84.7,30.0,36.01,0);
INSERT INTO "extent" VALUES('EPSG','2123','Europe - 12°W to 6°W and ETRS89 by country','Europe between 12°W and 6°W: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - onshore and offshore; Portugal - mainland - onshore and offshore; Spain - mainland - onshore and offshore; United Kingdom - UKCS offshore.',34.91,74.13,-12.0,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','2124','Europe - 6°W to 0°W and ETRS89 by country','Europe between 6°W and 0°W: Faroe Islands offshore; Ireland - offshore; Jan Mayen - offshore; Norway including Svalbard - offshore; Spain - mainland - onshore and offshore.',35.26,80.49,-6.0,0.01,0);
INSERT INTO "extent" VALUES('EPSG','2125','Europe - 0°E to 6°E and ETRS89 by country','Europe between 0°E and 6°E: Andorra; Denmark - offshore; Germany - offshore; Jan Mayen - offshore; Norway including Svalbard - onshore and offshore; Spain - mainland and Balearic islands - onshore and offshore.',37.0,82.45,0.0,6.01,0);
INSERT INTO "extent" VALUES('EPSG','2126','Europe - 6°E to 12°E and ETRS89 by country','Europe between 6°E and 12°E: Austria; Denmark - onshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore; Spain - offshore.',36.53,84.01,6.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','2127','Europe - 12°E to 18°E and ETRS89 by country','Europe between 12°E and 18°E: Austria; Croatia; Denmark - offshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',34.79,84.01,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','2128','Europe - 18°E to 24°E and ETRS89 by country','Europe between 18°E and 24°E: Bulgaria; Croatia; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',34.76,84.01,18.0,24.01,0);
INSERT INTO "extent" VALUES('EPSG','2129','Europe - 24°E to 30°E and ETRS89 by country','Europe between 24°E and 30°E: Bulgaria - onshore and offshore; Norway including Svalbard - onshore and offshore.',41.24,84.01,24.0,30.01,0);
INSERT INTO "extent" VALUES('EPSG','2130','Europe - 30°E to 36°E and ETRS89 by country','Europe between 30°E and 36°E: Bulgaria - offshore; Norway including Svalbard - onshore and offshore.',42.56,84.01,30.0,36.01,0);
INSERT INTO "extent" VALUES('EPSG','2131','Europe - 36°E to 42°E and ETRS89 by country','Europe between 36°E and 42°E: Norway including Svalbard - offshore.',72.99,79.07,36.0,38.01,0);
INSERT INTO "extent" VALUES('EPSG','2132','Europe - 42°E to 48°E and ETRS89 by country','Europe - between 42°E and 48°E.',37.0,41.65,42.0,48.0,1);
INSERT INTO "extent" VALUES('EPSG','2133','USA - 168°W to 162°W - AK, OCS','United States (USA) - between 168°W and 162°W - Alaska and offshore continental shelf (OCS).',49.52,74.29,-168.0,-161.99,0);
@@ -1130,7 +1130,7 @@ INSERT INTO "extent" VALUES('EPSG','2150','North America - 66°W to 60°W and NA
INSERT INTO "extent" VALUES('EPSG','2151','Canada - 60°W to 54°W','Canada between 60°W and 54°W - Newfoundland and Labrador; Nunavut; Quebec.',38.56,84.0,-60.0,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','2152','Canada - 54°W to 48°W','Canada between 54°W and 48°W onshore and offshore - Newfoundland and Labrador.',39.5,57.65,-54.0,-47.99,0);
INSERT INTO "extent" VALUES('EPSG','2153','Canada - 48°W to 42°W','Canada offshore Atlantic - 48°W to 42°W.',39.85,54.47,-48.0,-42.0,0);
INSERT INTO "extent" VALUES('EPSG','2154','USA - Alabama - SPCS - E','United States (USA) - Alabama east of approximately 86°37''W - counties Barbour; Bullock; Calhoun; Chambers; Cherokee; Clay; Cleburne; Coffee; Coosa; Covington; Crenshaw; Dale; De Kalb; Elmore; Etowah; Geneva; Henry; Houston; Jackson; Lee; Macon; Madison; Marshall; Montgomery; Pike; Randolph; Russell; StClair; Talladega; Tallapoosa.',30.99,35.0,-86.79,-84.89,0);
INSERT INTO "extent" VALUES('EPSG','2154','USA - Alabama - SPCS - E','United States (USA) - Alabama east of approximately 86°37''W - counties Barbour; Bullock; Calhoun; Chambers; Cherokee; Clay; Cleburne; Coffee; Coosa; Covington; Crenshaw; Dale; De Kalb; Elmore; Etowah; Geneva; Henry; Houston; Jackson; Lee; Macon; Madison; Marshall; Montgomery; Pike; Randolph; Russell; St Clair; Talladega; Tallapoosa.',30.99,35.0,-86.79,-84.89,0);
INSERT INTO "extent" VALUES('EPSG','2155','USA - Alabama - SPCS - W','United States (USA) - Alabama west of approximately 86°37''W - counties Autauga; Baldwin; Bibb; Blount; Butler; Chilton; Choctaw; Clarke; Colbert; Conecuh; Cullman; Dallas; Escambia; Fayette; Franklin; Greene; Hale; Jefferson; Lamar; Lauderdale; Lawrence; Limestone; Lowndes; Marengo; Marion; Mobile; Monroe; Morgan; Perry; Pickens; Shelby; Sumter; Tuscaloosa; Walker; Washington; Wilcox; Winston.',30.14,35.02,-88.48,-86.3,0);
INSERT INTO "extent" VALUES('EPSG','2156','USA - Alaska - Panhandle','United States (USA) - Alaska - east of 141°W; i.e. Panhandle.',54.61,60.35,-141.0,-129.99,0);
INSERT INTO "extent" VALUES('EPSG','2157','USA - Alaska - Aleutian Islands','United States (USA) - Alaska - Aleutian Islands onshore.',51.3,54.34,172.42,-164.84,0);
@@ -1147,9 +1147,10 @@ INSERT INTO "extent" VALUES('EPSG','2167','USA - Arizona - SPCS - E','United Sta
INSERT INTO "extent" VALUES('EPSG','2168','USA - Arizona - SPCS - W','United States (USA) - Arizona - counties of La Paz; Mohave; Yuma.',32.05,37.0,-114.81,-112.52,0);
INSERT INTO "extent" VALUES('EPSG','2169','USA - Arkansas - SPCS - N','United States (USA) - Arkansas - counties of Baxter; Benton; Boone; Carroll; Clay; Cleburne; Conway; Craighead; Crawford; Crittenden; Cross; Faulkner; Franklin; Fulton; Greene; Independence; Izard; Jackson; Johnson; Lawrence; Logan; Madison; Marion; Mississippi; Newton; Perry; Poinsett; Pope; Randolph; Scott; Searcy; Sebastian; Sharp; St Francis; Stone; Van Buren; Washington; White; Woodruff; Yell.',34.67,36.5,-94.62,-89.64,0);
INSERT INTO "extent" VALUES('EPSG','2170','USA - Arkansas - SPCS - S','United States (USA) - Arkansas - counties Arkansas; Ashley; Bradley; Calhoun; Chicot; Clark; Cleveland; Columbia; Dallas; Desha; Drew; Garland; Grant; Hempstead; Hot Spring; Howard; Jefferson; Lafayette; Lee; Lincoln; Little River; Lonoke; Miller; Monroe; Montgomery; Nevada; Ouachita; Phillips; Pike; Polk; Prairie; Pulaski; Saline; Sevier; Union.',33.01,35.1,-94.48,-90.4,0);
INSERT INTO "extent" VALUES('EPSG','2171','USA - GoM OCS - west of 96°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) west of approximately 96°W - protraction areas Corpus Christi; Port Isabel.',25.97,28.43,-97.22,-95.87,0);
INSERT INTO "extent" VALUES('EPSG','2172','USA - GoM OCS - 96°W to 90°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) between approximately 96°W and 90°W - protraction areas East Breaks; Alaminos Canyon; Garden Banks; Keathley Canyon; Sigsbee Escarpment; Ewing Bank; Green Canyon; Walker Ridge; Amery Terrace.',25.61,29.73,-96.0,-89.86,0);
INSERT INTO "extent" VALUES('EPSG','2173','USA - GoM OCS - 90°W to 84°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) between approximately 90°W and 84°W - protraction areas Mobile; Viosca Knoll; Mississippi Canyon; Atwater Valley; Lund; Lund South; Pensacola; Destin Dome; De Soto Canyon; Lloyd Ridge; Henderson; Florida Plain; Campeche Escarpment; Apalachicola; Florida Middle Ground; The Elbow; Vernon Basin; Howell Hook; Rankin.',23.95,30.25,-90.01,-83.91,0);
INSERT INTO "extent" VALUES('EPSG','2171','USA - GoM OCS - west of 96°W','United States (USA) - Gulf of Mexico west of approximately 96°W - leasing areas Matagorda Island, Mustang Island, North Padre Island and South Padre Island; outer continental shelf (GoM OCS) protraction areas Corpus Christi, Port Isabel.',25.97,28.43,-97.22,-95.87,0);
INSERT INTO "extent" VALUES('EPSG','2172','USA - GoM OCS - 96°W to 90°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) between approximately 96°W and 90°W - leasing areas Brazos, Galveston, High Island; Sabine Pass; West Cameron, East Cameron, Vermilion, South Marsh Island, Eugene Island, Ship Shoal, South Pelto, Bay Marchand, South Timbalier, Grand Isle; protraction areas East Breaks, Alaminos Canyon, Garden Banks, Keathley Canyon, Sigsbee Escarpment, Ewing Bank, Green Canyon, Walker Ridge, Amery Terrace.
',25.61,29.73,-96.0,-89.86,0);
INSERT INTO "extent" VALUES('EPSG','2173','USA - GoM OCS - 90°W to 84°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) between approximately 90°W and 84°W - leasing areas Grand Isle, West Delta, South Pass, Breton Sound, Main Pass, Chandeleur; protraction areas Mobile, Viosca Knoll, Mississippi Canyon, Atwater Valley, Lund, Lund South, Pensacola, Destin Dome, De Soto Canyon, Lloyd Ridge, Henderson, Florida Plain, Campeche Escarpment, Apalachicola, Florida Middle Ground, The Elbow, Vernon Basin, Howell Hook, Rankin.',23.95,30.25,-90.01,-83.91,0);
INSERT INTO "extent" VALUES('EPSG','2174','USA - GoM OCS - east of 84°W','United States (USA) - Gulf of Mexico outer continental shelf (GoM OCS) east of approximately 84°W - protraction areas Gainesville; Tarpon Springs; St Petersburg; Charlotte Harbor; Pulley Ridge; Dry Tortugas; Tortugas Valley; Miami; Key West.',23.82,29.94,-84.09,-81.17,0);
INSERT INTO "extent" VALUES('EPSG','2175','USA - California - SPCS - 1','United States (USA) - California - counties Del Norte; Humboldt; Lassen; Modoc; Plumas; Shasta; Siskiyou; Tehama; Trinity.',39.59,42.01,-124.45,-119.99,0);
INSERT INTO "extent" VALUES('EPSG','2176','USA - California - SPCS - 2','United States (USA) - California - counties of Alpine; Amador; Butte; Colusa; El Dorado; Glenn; Lake; Mendocino; Napa; Nevada; Placer; Sacramento; Sierra; Solano; Sonoma; Sutter; Yolo; Yuba.',38.02,40.16,-124.06,-119.54,0);
@@ -1170,12 +1171,12 @@ INSERT INTO "extent" VALUES('EPSG','2190','USA - Georgia - SPCS - W','United Sta
INSERT INTO "extent" VALUES('EPSG','2191','USA - Idaho - SPCS - C','United States (USA) - Idaho - counties of Blaine; Butte; Camas; Cassia; Custer; Gooding; Jerome; Lemhi; Lincoln; Minidoka; Twin Falls.',41.99,45.7,-115.3,-112.67,0);
INSERT INTO "extent" VALUES('EPSG','2192','USA - Idaho - SPCS - E','United States (USA) - Idaho - counties of Bannock; Bear Lake; Bingham; Bonneville; Caribou; Clark; Franklin; Fremont; Jefferson; Madison; Oneida; Power; Teton.',41.99,44.75,-113.24,-111.04,0);
INSERT INTO "extent" VALUES('EPSG','2193','USA - Idaho - SPCS - W','United States (USA) - Idaho - counties of Ada; Adams; Benewah; Boise; Bonner; Boundary; Canyon; Clearwater; Elmore; Gem; Idaho; Kootenai; Latah; Lewis; Nez Perce; Owyhee; Payette; Shoshone; Valley; Washington.',41.99,49.01,-117.24,-114.32,0);
INSERT INTO "extent" VALUES('EPSG','2194','USA - Illinois - SPCS - E','United States (USA) - Illinois - counties of Boone; Champaign; Clark; Clay; Coles; Cook; Crawford; Cumberland; De Kalb; De Witt; Douglas; Du Page; Edgar; Edwards; Effingham; Fayette; Ford; Franklin; Gallatin; Grundy; Hamilton; Hardin; Iroquois; Jasper; Jefferson; Johnson; Kane; Kankakee; Kendall; La Salle; Lake; Lawrence; Livingston; Macon; Marion; Massac; McHenry; McLean; Moultrie; Piatt; Pope; Richland; Saline; Shelby; Vermilion; Wabash; Wayne; White; Will; Williamson.',37.06,42.5,-89.28,-87.02,0);
INSERT INTO "extent" VALUES('EPSG','2195','USA - Illinois - SPCS - W','United States (USA) - Illinois - counties of Adams; Alexander; Bond; Brown; Bureau; Calhoun; Carroll; Cass; Christian; Clinton; Fulton; Greene; Hancock; Henderson; Henry; Jackson; Jersey; Jo Daviess; Knox; Lee; Logan; Macoupin; Madison; Marshall; Mason; McDonough; Menard; Mercer; Monroe; Montgomery; Morgan; Ogle; Peoria; Perry; Pike; Pulaski; Putnam; Randolph; Rock Island; Sangamon; Schuyler; Scott; St Clair; Stark; Stephenson; Tazewell; Union; Warren; Washington; Whiteside; Winnebago; Woodford.',36.98,42.51,-91.52,-88.93,0);
INSERT INTO "extent" VALUES('EPSG','2194','USA - Illinois - SPCS - E','United States (USA) - Illinois - counties of Boone; Champaign; Clark; Clay; Coles; Cook; Crawford; Cumberland; De Kalb; De Witt; Douglas; Du Page; Edgar; Edwards; Effingham; Fayette; Ford; Franklin; Gallatin; Grundy; Hamilton; Hardin; Iroquois; Jasper; Jefferson; Johnson; Kane; Kankakee; Kendall; La Salle; Lake; Lawrence; Livingston; Macon; Marion; Massac; McHenry; McLean; Moultrie; Piatt; Pope; Richland; Saline; Shelby; Vermilion; Wabash; Wayne; White; Will; Williamson.',37.06,42.5,-89.27,-87.02,0);
INSERT INTO "extent" VALUES('EPSG','2195','USA - Illinois - SPCS - W','United States (USA) - Illinois - counties of Adams; Alexander; Bond; Brown; Bureau; Calhoun; Carroll; Cass; Christian; Clinton; Fulton; Greene; Hancock; Henderson; Henry; Jackson; Jersey; Jo Daviess; Knox; Lee; Logan; Macoupin; Madison; Marshall; Mason; McDonough; Menard; Mercer; Monroe; Montgomery; Morgan; Ogle; Peoria; Perry; Pike; Pulaski; Putnam; Randolph; Rock Island; Sangamon; Schuyler; Scott; St Clair; Stark; Stephenson; Tazewell; Union; Warren; Washington; Whiteside; Winnebago; Woodford.',36.97,42.51,-91.52,-88.92,0);
INSERT INTO "extent" VALUES('EPSG','2196','USA - Indiana - SPCS - E','United States (USA) - Indiana - counties of Adams; Allen; Bartholomew; Blackford; Brown; Cass; Clark; De Kalb; Dearborn; Decatur; Delaware; Elkhart; Fayette; Floyd; Franklin; Fulton; Grant; Hamilton; Hancock; Harrison; Henry; Howard; Huntington; Jackson; Jay; Jefferson; Jennings; Johnson; Kosciusko; Lagrange; Madison; Marion; Marshall; Miami; Noble; Ohio; Randolph; Ripley; Rush; Scott; Shelby; St Joseph; Steuben; Switzerland; Tipton; Union; Wabash; Washington; Wayne; Wells; Whitley.',37.95,41.77,-86.59,-84.78,0);
INSERT INTO "extent" VALUES('EPSG','2197','USA - Indiana - SPCS - W','United States (USA) - Indiana - counties of Benton; Boone; Carroll; Clay; Clinton; Crawford; Daviess; Dubois; Fountain; Gibson; Greene; Hendricks; Jasper; Knox; La Porte; Lake; Lawrence; Martin; Monroe; Montgomery; Morgan; Newton; Orange; Owen; Parke; Perry; Pike; Porter; Posey; Pulaski; Putnam; Spencer; Starke; Sullivan; Tippecanoe; Vanderburgh; Vermillion; Vigo; Warren; Warrick; White.',37.77,41.77,-88.06,-86.24,0);
INSERT INTO "extent" VALUES('EPSG','2197','USA - Indiana - SPCS - W','United States (USA) - Indiana - counties of Benton; Boone; Carroll; Clay; Clinton; Crawford; Daviess; Dubois; Fountain; Gibson; Greene; Hendricks; Jasper; Knox; La Porte; Lake; Lawrence; Martin; Monroe; Montgomery; Morgan; Newton; Orange; Owen; Parke; Perry; Pike; Porter; Posey; Pulaski; Putnam; Spencer; Starke; Sullivan; Tippecanoe; Vanderburgh; Vermillion; Vigo; Warren; Warrick; White.',37.77,41.77,-88.1,-86.24,0);
INSERT INTO "extent" VALUES('EPSG','2198','USA - Iowa - SPCS - N','United States (USA) - Iowa - counties of Allamakee; Benton; Black Hawk; Boone; Bremer; Buchanan; Buena Vista; Butler; Calhoun; Carroll; Cerro Gordo; Cherokee; Chickasaw; Clay; Clayton; Crawford; Delaware; Dickinson; Dubuque; Emmet; Fayette; Floyd; Franklin; Greene; Grundy; Hamilton; Hancock; Hardin; Howard; Humboldt; Ida; Jackson; Jones; Kossuth; Linn; Lyon; Marshall; Mitchell; Monona; O''Brien; Osceola; Palo Alto; Plymouth; Pocahontas; Sac; Sioux; Story; Tama; Webster; Winnebago; Winneshiek; Woodbury; Worth; Wright.',41.85,43.51,-96.65,-90.15,0);
INSERT INTO "extent" VALUES('EPSG','2199','USA - Iowa - SPCS - S','United States (USA) - Iowa - counties of Adair; Adams; Appanoose; Audubon; Cass; Cedar; Clarke; Clinton; Dallas; Davis; Decatur; Des Moines; Fremont; Guthrie; Harrison; Henry; Iowa; Jasper; Jefferson; Johnson; Keokuk; Lee; Louisa; Lucas; Madison; Mahaska; Marion; Mills; Monroe; Montgomery; Muscatine; Page; Polk; Pottawattamie; Poweshiek; Ringgold; Scott; Shelby; Taylor; Union; Van Buren; Wapello; Warren; Washington; Wayne.',40.37,42.04,-96.14,-90.14,0);
INSERT INTO "extent" VALUES('EPSG','2199','USA - Iowa - SPCS - S','United States (USA) - Iowa - counties of Adair; Adams; Appanoose; Audubon; Cass; Cedar; Clarke; Clinton; Dallas; Davis; Decatur; Des Moines; Fremont; Guthrie; Harrison; Henry; Iowa; Jasper; Jefferson; Johnson; Keokuk; Lee; Louisa; Lucas; Madison; Mahaska; Marion; Mills; Monroe; Montgomery; Muscatine; Page; Polk; Pottawattamie; Poweshiek; Ringgold; Scott; Shelby; Taylor; Union; Van Buren; Wapello; Warren; Washington; Wayne.',40.36,42.04,-96.14,-90.14,0);
INSERT INTO "extent" VALUES('EPSG','2200','USA - Kansas - SPCS - N','United States (USA) - Kansas - counties of Atchison; Brown; Cheyenne; Clay; Cloud; Decatur; Dickinson; Doniphan; Douglas; Ellis; Ellsworth; Geary; Gove; Graham; Jackson; Jefferson; Jewell; Johnson; Leavenworth; Lincoln; Logan; Marshall; Mitchell; Morris; Nemaha; Norton; Osborne; Ottawa; Phillips; Pottawatomie; Rawlins; Republic; Riley; Rooks; Russell; Saline; Shawnee; Sheridan; Sherman; Smith; Thomas; Trego; Wabaunsee; Wallace; Washington; Wyandotte.',38.52,40.01,-102.06,-94.58,0);
INSERT INTO "extent" VALUES('EPSG','2201','USA - Kansas - SPCS - S','United States (USA) - Kansas - counties of Allen; Anderson; Barber; Barton; Bourbon; Butler; Chase; Chautauqua; Cherokee; Clark; Coffey; Comanche; Cowley; Crawford; Edwards; Elk; Finney; Ford; Franklin; Grant; Gray; Greeley; Greenwood; Hamilton; Harper; Harvey; Haskell; Hodgeman; Kearny; Kingman; Kiowa; Labette; Lane; Linn; Lyon; Marion; McPherson; Meade; Miami; Montgomery; Morton; Neosho; Ness; Osage; Pawnee; Pratt; Reno; Rice; Rush; Scott; Sedgwick; Seward; Stafford; Stanton; Stevens; Sumner; Wichita; Wilson; Woodson.',36.99,38.88,-102.05,-94.6,0);
INSERT INTO "extent" VALUES('EPSG','2202','USA - Kentucky - SPCS - N','United States (USA) - Kentucky - counties of Anderson; Bath; Boone; Bourbon; Boyd; Bracken; Bullitt; Campbell; Carroll; Carter; Clark; Elliott; Fayette; Fleming; Franklin; Gallatin; Grant; Greenup; Harrison; Henry; Jefferson; Jessamine; Kenton; Lawrence; Lewis; Mason; Menifee; Montgomery; Morgan; Nicholas; Oldham; Owen; Pendleton; Robertson; Rowan; Scott; Shelby; Spencer; Trimble; Woodford.',37.71,39.15,-85.96,-82.47,0);
@@ -1306,11 +1307,11 @@ INSERT INTO "extent" VALUES('EPSG','2326','Germany - West Germany all states','G
INSERT INTO "extent" VALUES('EPSG','2327','Syria - Al Whaleed area','Syria - Al Whaleed area',35.33,35.9,39.15,40.41,0);
INSERT INTO "extent" VALUES('EPSG','2328','Syria - Shaddadeh area','Syria - Shaddadeh area (36°N, 41°E)',35.79,36.5,40.5,41.39,0);
INSERT INTO "extent" VALUES('EPSG','2329','Syria - Deir area','Syria - Deir area (35°22''N, 40°06''E)',34.49,35.9,39.3,40.81,0);
INSERT INTO "extent" VALUES('EPSG','2330','Europe - North Sea','Denmark - North Sea; Germany - North Sea; Netherlands - offshore; Norway - North Sea south of 62°N; United Kingdom (UKCS) - North Sea south of 62°N.',51.03,62.01,-5.05,11.14,0);
INSERT INTO "extent" VALUES('EPSG','2330','Europe - North Sea','Denmark - North Sea; Germany - North Sea; Netherlands - offshore; Norway - North Sea south of 62°N; United Kingdom (UKCS) - North Sea south of 62°N.',51.03,62.0,-5.05,10.86,0);
INSERT INTO "extent" VALUES('EPSG','2331','Norway - offshore north of 65°N','Norway - offshore north of 65°N.',65.0,72.0,-0.5,32.02,1);
INSERT INTO "extent" VALUES('EPSG','2332','Norway - offshore north of 65°N; Svalbard','Norway - offshore north of 65°N. Also Svalbard.',65.0,84.73,-3.35,38.01,0);
INSERT INTO "extent" VALUES('EPSG','2333','Norway - offshore 62°N to 65°N and west of 5°E','Norway - offshore between 62°N and 65°N and west of 5°E.',62.0,65.0,-0.49,5.0,0);
INSERT INTO "extent" VALUES('EPSG','2334','Norway - North Sea - offshore south of 62°N','Norway - offshore south of 62°N - North Sea.',56.08,62.0,1.37,11.14,0);
INSERT INTO "extent" VALUES('EPSG','2333','Norway - offshore 62°N to 65°N and west of 5°E','Norway - offshore between 62°N and 65°N and west of 5°E.',62.0,65.01,-0.49,5.01,0);
INSERT INTO "extent" VALUES('EPSG','2334','Norway - North Sea - offshore south of 62°N','Norway - offshore south of 62°N - North Sea.',56.08,62.01,1.37,10.81,0);
INSERT INTO "extent" VALUES('EPSG','2335','Spain - Balearic Islands','Spain - Balearic Islands.',38.59,40.15,1.12,4.39,0);
INSERT INTO "extent" VALUES('EPSG','2336','Spain - mainland except northwest','Spain - onshore mainland except northwest (north of 41°30''N and west of 4°30''W).',35.26,43.56,-7.54,3.39,0);
INSERT INTO "extent" VALUES('EPSG','2337','Spain - mainland northwest','Spain - onshore mainland north of 41°30''N and west of 4°30'' W.',41.5,43.82,-9.37,-4.5,0);
@@ -1320,7 +1321,7 @@ INSERT INTO "extent" VALUES('EPSG','2340','Italy - Sicily onshore','Italy - Sici
INSERT INTO "extent" VALUES('EPSG','2341','Egypt - Gulf of Suez','Egypt - Gulf of Suez.',27.19,30.01,32.34,34.27,0);
INSERT INTO "extent" VALUES('EPSG','2342','Europe - common offshore','Denmark - offshore North Sea; Ireland - offshore; Netherlands - offshore; United Kingdom - UKCS offshore.',47.42,63.89,-16.1,10.86,0);
INSERT INTO "extent" VALUES('EPSG','2343','Europe - British Isles and Channel Islands onshore','Channel islands - onshore. Ireland - onshore. Isle of Man - onshore. United Kingdom (UK) - onshore - England; Scotland; Wales; Northern Ireland.',49.11,60.9,-10.56,1.84,0);
INSERT INTO "extent" VALUES('EPSG','2344','Europe - Finland and Norway - onshore','Finland and Norway - onshore.',57.93,71.21,4.68,31.59,0);
INSERT INTO "extent" VALUES('EPSG','2344','Europe - Finland and Norway - onshore','Finland and Norway - onshore.',57.9,71.24,4.39,31.59,0);
INSERT INTO "extent" VALUES('EPSG','2345','Asia - Middle East - Iraq; Israel; Jordan; Lebanon; Kuwait; Saudi Arabia; Syria','Iraq, Israel, Jordan, Lebanon, Kuwait, Saudi Arabia and Syria - onshore.',16.37,37.39,34.17,55.67,0);
INSERT INTO "extent" VALUES('EPSG','2346','World - WGS72 BE to WGS 84 - by country','World. Vietnam - offshore.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','2347','Algeria - north of 31.5°N','Algeria - onshore north of 35 grads North (31°30''N).',31.5,37.14,-3.85,9.22,0);
@@ -1385,7 +1386,7 @@ INSERT INTO "extent" VALUES('EPSG','2405','Kazakhstan - Caspian Sea','Kazakhstan
INSERT INTO "extent" VALUES('EPSG','2406','Qatar - offshore','Qatar - offshore.',24.64,27.05,50.55,53.04,0);
INSERT INTO "extent" VALUES('EPSG','2407','Greenland - south of 72°N','Greenland - south of 72°N.',59.75,72.0,-55.0,-40.0,1);
INSERT INTO "extent" VALUES('EPSG','2408','Japan - Okinawa','Japan - onshore Okinawa.',23.98,26.91,122.83,131.38,0);
INSERT INTO "extent" VALUES('EPSG','2409','Asia - Japan and South Korea','Japan - onshore; South Korea - onshore.',20.37,45.54,122.83,145.87,0);
INSERT INTO "extent" VALUES('EPSG','2409','Asia - Japan and South Korea','Japan - onshore; Republic of Korea (South Korea) - onshore.',20.37,45.54,122.83,145.87,0);
INSERT INTO "extent" VALUES('EPSG','2410','Canada - NWT; Nunavut; Saskatchewan','Canada - Northwest Territories; Nunavut; Saskatchewan.',49.0,83.17,-136.46,-60.72,0);
INSERT INTO "extent" VALUES('EPSG','2411','Asia - India mainland and Nepal','India - mainland onshore; Nepal.',8.02,35.51,68.13,97.42,0);
INSERT INTO "extent" VALUES('EPSG','2412','USA - Alaska mainland','United States (USA) - Alaska mainland.',54.34,71.4,-168.26,-129.99,0);
@@ -1396,7 +1397,7 @@ INSERT INTO "extent" VALUES('EPSG','2416','Canada - eastern provinces','Canada -
INSERT INTO "extent" VALUES('EPSG','2417','Canada - Yukon','Canada - Yukon.',59.99,69.7,-141.01,-123.91,0);
INSERT INTO "extent" VALUES('EPSG','2418','Caribbean - central (DMA tfm)','Antigua; Barbados; Barbuda; Cuba; Dominican Republic; Grand Cayman; Jamaica; Turks and Caicos Islands. Note: does not include other islands within this geographic area.',13.0,23.25,-85.01,-59.37,0);
INSERT INTO "extent" VALUES('EPSG','2419','Central America - Belize to Costa Rica','Onshore Belize, Costa Rica, El Salvador, Guatemala, Honduras and Nicaragua.',7.98,18.49,-92.29,-82.53,0);
INSERT INTO "extent" VALUES('EPSG','2420','Europe - west (DMA ED50 mean)','Austria; Belgium; Denmark; Finland; Faroe islands; France; Germany (west); Gibraltar; Greece; Italy; Luxembourg; Netherlands; Norway; Portugal; Spain; Sweden; Switzerland.',34.88,71.21,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','2420','Europe - west (DMA ED50 mean)','Austria; Belgium; Denmark; Finland; Faroe islands; France; Germany (west); Gibraltar; Greece; Italy; Luxembourg; Netherlands; Norway; Portugal; Spain; Sweden; Switzerland.',34.88,71.24,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','2421','Europe - west central (by country)','Austria; Denmark; France; Germany (west); Netherlands; Switzerland.',42.33,57.8,-4.87,17.17,0);
INSERT INTO "extent" VALUES('EPSG','2422','Slovenia - Gorenjska - central','Slovenia - central Gorenjska (Upper Carniola) with part of the Kamnik or Savinja Alps.',46.14,46.45,14.01,14.61,0);
INSERT INTO "extent" VALUES('EPSG','2423','Europe - FSU onshore','Armenia; Azerbaijan; Belarus; Estonia - onshore; Georgia - onshore; Kazakhstan; Kyrgyzstan; Latvia - onshore; Lithuania - onshore; Moldova; Russian Federation - onshore; Tajikistan; Turkmenistan; Ukraine - onshore; Uzbekistan.',35.14,81.91,19.57,-168.97,0);
@@ -1508,7 +1509,7 @@ INSERT INTO "extent" VALUES('EPSG','2528','USA - Texas - SPCS83 - S','United Sta
INSERT INTO "extent" VALUES('EPSG','2529','USA - Louisiana - SPCS83 - S','United States (USA) - Louisiana - counties of Acadia; Allen; Ascension; Assumption; Beauregard; Calcasieu; Cameron; East Baton Rouge; East Feliciana; Evangeline; Iberia; Iberville; Jefferson; Jefferson Davis; Lafayette; LaFourche; Livingston; Orleans; Plaquemines; Pointe Coupee; St Bernard; St Charles; St Helena; St James; St John the Baptist; St Landry; St Martin; St Mary; St Tammany; Tangipahoa; Terrebonne; Vermilion; Washington; West Baton Rouge; West Feliciana.',28.85,31.07,-93.94,-88.75,0);
INSERT INTO "extent" VALUES('EPSG','2530','UK - Northern Ireland - onshore','United Kingdom (UK) - Northern Ireland (Ulster) - onshore.',53.96,55.36,-8.18,-5.34,0);
INSERT INTO "extent" VALUES('EPSG','2531','Denmark - onshore Jutland and Funen','Denmark - Jutland and Funen - onshore.',54.67,57.8,8.0,11.29,0);
INSERT INTO "extent" VALUES('EPSG','2532','Denmark - onshore Zealand and Lolland','Denmark - Zealand and Lolland (onshore).',54.51,56.79,10.79,12.69,0);
INSERT INTO "extent" VALUES('EPSG','2532','Denmark - onshore Zealand and Lolland','Denmark - Zealand and Lolland (onshore).',54.51,56.79,10.79,12.87,0);
INSERT INTO "extent" VALUES('EPSG','2533','Denmark - onshore Bornholm','Denmark - Bornholm onshore.',54.94,55.38,14.59,15.25,0);
INSERT INTO "extent" VALUES('EPSG','2534','World - N hemisphere - 3-degree CM 027°E','Between 25°30''E and 28°30''E, northern hemisphere.',0.0,84.0,25.5,28.5,0);
INSERT INTO "extent" VALUES('EPSG','2535','World - N hemisphere - 3-degree CM 030°E','Between 28°30''E and 31°30''E, northern hemisphere.',0.0,84.0,28.5,31.5,0);
@@ -1517,10 +1518,10 @@ INSERT INTO "extent" VALUES('EPSG','2537','World - N hemisphere - 3-degree CM 03
INSERT INTO "extent" VALUES('EPSG','2538','World - N hemisphere - 3-degree CM 039°E','Between 37°30''E and 40°30''E, northern hemisphere.',0.0,84.0,37.5,40.5,0);
INSERT INTO "extent" VALUES('EPSG','2539','World - N hemisphere - 3-degree CM 042°E','Between 40°30''E and 43°30''E, northern hemisphere.',0.0,84.0,40.5,43.5,0);
INSERT INTO "extent" VALUES('EPSG','2540','World - N hemisphere - 3-degree CM 045°E','Between 43°30''E and 46°30''E, northern hemisphere.',0.0,84.0,43.5,46.5,0);
INSERT INTO "extent" VALUES('EPSG','2541','Germany - West Germany N','Germany - states of former West Germany - onshore north of 52°20''N.',52.33,55.09,6.58,11.59,0);
INSERT INTO "extent" VALUES('EPSG','2541','Germany - West Germany N','Germany - states of former West Germany - onshore north of 52°20''N.',52.33,55.09,6.56,11.59,0);
INSERT INTO "extent" VALUES('EPSG','2542','Germany - West Germany C','Germany - states of former West Germany - between 50°20''N and 52°20''N.',50.33,52.34,5.86,12.03,0);
INSERT INTO "extent" VALUES('EPSG','2543','Germany - West Germany S','Germany - states of former West Germany - south of 50°20''N.',47.27,50.34,6.11,13.84,0);
INSERT INTO "extent" VALUES('EPSG','2544','Germany - Thuringen','Germany - Thuringen.',50.2,51.64,9.92,12.56,0);
INSERT INTO "extent" VALUES('EPSG','2544','Germany - Thuringen','Germany - Thuringen.',50.2,51.65,9.87,12.66,0);
INSERT INTO "extent" VALUES('EPSG','2545','Germany - Saxony','Germany - Sachsen.',50.2,51.66,11.89,15.04,0);
INSERT INTO "extent" VALUES('EPSG','2546','Romania - offshore','Romania - offshore.',43.44,45.2,28.64,31.41,0);
INSERT INTO "extent" VALUES('EPSG','2547','Serbia and Montenegro - Montenegro','Serbia and Montenegro - Montenegro.',41.82,43.53,18.44,20.37,1);
@@ -1578,8 +1579,8 @@ INSERT INTO "extent" VALUES('EPSG','2598','Algeria - District 3','Algeria - Dist
INSERT INTO "extent" VALUES('EPSG','2599','Algeria - In Amenas','Algeria - In Amenas block.',27.5,28.3,8.83,9.92,0);
INSERT INTO "extent" VALUES('EPSG','2600','Algeria - Hassi Bir Reikaz','Algeria - Hassi Bir Reikaz.',31.75,32.42,7.16,8.0,0);
INSERT INTO "extent" VALUES('EPSG','2601','Norway - offshore north of 62°N; Svalbard','Norway - offshore north of 62°N. Also Svalbard - onshore and offshore.',62.0,84.73,-3.35,38.01,0);
INSERT INTO "extent" VALUES('EPSG','2602','Palestine Territory','Palestine Territory.',31.21,32.55,34.17,35.58,0);
INSERT INTO "extent" VALUES('EPSG','2603','Asia - Middle East - Israel and Palestine Territory onshore','Israel - onshore; Palestine Territory - onshore.',29.45,33.28,34.17,35.69,0);
INSERT INTO "extent" VALUES('EPSG','2602','Palestine','Palestine.',31.21,32.55,34.17,35.58,0);
INSERT INTO "extent" VALUES('EPSG','2603','Asia - Middle East - Israel and Palestine onshore','Israel - onshore; Palestine onshore.',29.45,33.28,34.17,35.69,0);
INSERT INTO "extent" VALUES('EPSG','2604','World - N hemisphere - 3-degree CM 048°E','Between 46°30''E and 49°30''E, northern hemisphere.',0.0,84.0,46.5,49.5,0);
INSERT INTO "extent" VALUES('EPSG','2605','World - N hemisphere - 3-degree CM 051°E','Between 49°30''E and 52°30''E, northern hemisphere.',0.0,84.0,49.5,52.5,0);
INSERT INTO "extent" VALUES('EPSG','2606','World - N hemisphere - 3-degree CM 054°E','Between 52°30''E and 55°30''E, northern hemisphere.',0.0,84.0,52.5,55.5,0);
@@ -1779,7 +1780,7 @@ INSERT INTO "extent" VALUES('EPSG','2799','UK - Outer Hebrides onshore','United
INSERT INTO "extent" VALUES('EPSG','2800','UK - St. Kilda onshore','United Kingdom (UK) - Great Britain - Scotland - St Kilda onshore.',57.74,57.93,-8.74,-8.41,0);
INSERT INTO "extent" VALUES('EPSG','2801','UK - Flannan Isles onshore','United Kingdom (UK) - Great Britain - Scotland - Flannan Isles onshore.',58.21,58.35,-7.75,-7.46,0);
INSERT INTO "extent" VALUES('EPSG','2802','UK - Scilly Isles onshore','United Kingdom (UK) - Great Britain - England - Isles of Scilly onshore.',49.86,49.99,-6.41,-6.23,0);
INSERT INTO "extent" VALUES('EPSG','2803','Isle of Man - onshore','Isle of Man - onshore.',54.02,54.44,-4.87,-4.27,0);
INSERT INTO "extent" VALUES('EPSG','2803','Isle of Man','Isle of Man - onshore.',54.02,54.44,-4.87,-4.27,0);
INSERT INTO "extent" VALUES('EPSG','2804','Europe - Austria and FR Yugoslavia','Austria; Boznia and Herzegovina; Croatia; Czech Republic; FYR Macedonia; Montenegro; Serbia; Slovakia; Slovenia.',40.86,51.05,9.53,23.03,1);
INSERT INTO "extent" VALUES('EPSG','2805','Chile - Tierra del Fuego','Chile - Tierra del Fuego onshore.',-55.96,-51.99,-74.83,-66.33,0);
INSERT INTO "extent" VALUES('EPSG','2806','Iran - northern Gulf coast','Iran - northern Gulf coast area.',29.0,31.67,47.75,50.83,1);
@@ -1800,13 +1801,13 @@ INSERT INTO "extent" VALUES('EPSG','2820','New Caledonia - Ile des Pins','New Ca
INSERT INTO "extent" VALUES('EPSG','2821','New Caledonia - Belep','New Caledonia - Belep.',-19.85,-19.5,163.54,163.75,0);
INSERT INTO "extent" VALUES('EPSG','2822','New Caledonia - Grande Terre','New Caledonia - Grande Terre.',-22.45,-20.03,163.92,167.09,0);
INSERT INTO "extent" VALUES('EPSG','2823','New Caledonia - Grande Terre - Noumea','New Caledonia - Grande Terre - Noumea district.',-22.37,-22.19,166.35,166.54,0);
INSERT INTO "extent" VALUES('EPSG','2824','Caribbean - French Antilles','French Antilles onshore and offshore - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; St Martin.',14.08,18.53,-63.66,-57.52,0);
INSERT INTO "extent" VALUES('EPSG','2824','Caribbean - French Antilles','French Antilles onshore and offshore - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; St Martin.',14.08,18.54,-63.66,-57.52,0);
INSERT INTO "extent" VALUES('EPSG','2825','Africa - Ethiopia and Sudan - 30°E to 36°E','Ethiopia - west of 36°E. South Sudan - east of 30°E. Sudan - between 30°E and 36°E.',3.49,22.24,29.99,36.0,0);
INSERT INTO "extent" VALUES('EPSG','2826','Africa - South Sudan and Sudan - west of 24°E','South Sudan and Sudan - west of 24°E.',8.7,15.76,21.82,24.01,0);
INSERT INTO "extent" VALUES('EPSG','2827','Africa - South Sudan and Sudan - 24°E to 30°E','South Sudan and Sudan - between 24°E and 30°E.',4.21,22.01,23.99,30.01,0);
INSERT INTO "extent" VALUES('EPSG','2828','Guadeloupe - St Martin and St Barthelemy - onshore','Guadeloupe - onshore - St Martin and St Barthélemy islands.',17.82,18.17,-63.21,-62.73,0);
INSERT INTO "extent" VALUES('EPSG','2829','Guadeloupe - Grande-Terre and surrounding islands - onshore','Guadeloupe - onshore - Basse-Terre, Grande-Terre, La Desirade, Marie-Galante, Les Saintes.',15.8,16.55,-61.85,-60.97,0);
INSERT INTO "extent" VALUES('EPSG','2830','World (by country)','World: Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola, Anguilla, Antarctica, Antigua and Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belgium, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Saint Eustasius and Saba, Bosnia and Herzegovina, Botswana, Bouvet Island, Brazil, British Indian Ocean Territory, British Virgin Islands, Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Cayman Islands, Central African Republic, Chad, Chile, China, Christmas Island, Cocos (Keeling) Islands, Comoros, Congo, Cook Islands, Costa Rica, Côte d''Ivoire (Ivory Coast), Croatia, Cuba, Curacao, Cyprus, Czechia, Denmark, Djibouti, Dominica, Dominican Republic, East Timor, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Eswatini (Swaziland), Ethiopia, Falkland Islands (Malvinas), Faroe Islands, Fiji, Finland, France, French Guiana, French Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany, Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and McDonald Islands, Holy See (Vatican City State), Honduras, China - Hong Kong, Hungary, Iceland, India, Indonesia, Islamic Republic of Iran, Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya, Kiribati, Democratic People''s Republic of Korea (North Korea), Republic of Korea (South Korea), Kosovo, Kuwait, Kyrgyzstan, Lao People''s Democratic Republic (Laos), Latvia, Lebanon, Lesotho, Liberia, Libyan Arab Jamahiriya, Liechtenstein, Lithuania, Luxembourg, China - Macao, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Martinique, Mauritania, Mauritius, Mayotte, Mexico, Federated States of Micronesia, Monaco, Mongolia, Montenegro, Montserrat, Morocco, Mozambique, Myanmar (Burma), Namibia, Nauru, Nepal, Netherlands, New Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island, North Macedonia, Northern Mariana Islands, Norway, Oman, Pakistan, Palau, Panama, Papua New Guinea (PNG), Paraguay, Peru, Philippines, Pitcairn, Poland, Portugal, Puerto Rico, Qatar, Reunion, Romania, Russian Federation, Rwanda, St Barthelemy, St Kitts and Nevis, St Helena, Ascension and Tristan da Cunha, St Lucia, St Martin, St Pierre and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia (Slovak Republic), Slovenia, St Maarten, Solomon Islands, Somalia, South Africa, South Georgia and the South Sandwich Islands, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Svalbard and Jan Mayen, Sweden, Switzerland, Syrian Arab Republic, Taiwan, Tajikistan, United Republic of Tanzania, Thailand, The Democratic Republic of the Congo (Zaire), Togo, Tokelau, Tonga, Trinidad and Tobago, Tunisia, Türkiye (Turkey), Turkmenistan, Turks and Caicos Islands, Tuvalu, Uganda, Ukraine, United Arab Emirates (UAE), United Kingdom (UK), United States (USA), United States Minor Outlying Islands, Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, US Virgin Islands, Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','2830','World (by country)','World: Afghanistan; Albania; Algeria; American Samoa; Andorra; Angola; Anguilla; Antarctica; Antigua and Barbuda; Argentina; Armenia; Aruba; Australia; Austria; Azerbaijan; Bahamas; Bahrain; Bangladesh; Barbados; Belgium; Belarus; Belize; Benin; Bermuda; Bhutan; Bolivia; BES Islands - Bonaire, St Eustatius and Saba; Bosnia and Herzegovina; Botswana; Bouvet Island; Brazil; British Indian Ocean Territory; British Virgin Islands; Brunei; Bulgaria; Burkina Faso; Burundi; Cambodia; Cameroon; Canada; Cape Verde; Cayman Islands; Central African Republic; Chad; Chile; China; Christmas Island; Cocos (Keeling) Islands; Colombia; Comoros; Congo; Congo DR (Zaire); Cook Islands; Costa Rica; Côte d''Ivoire (Ivory Coast); Croatia; Cuba; Curacao; Cyprus; Czechia; Denmark; Djibouti; Dominica; Dominican Republic; East Timor; Ecuador; Egypt; El Salvador; Equatorial Guinea; Eritrea; Estonia; Eswatini (Swaziland); Ethiopia; Falkland Islands (Malvinas); Faroe Islands; Fiji; Finland; France; French Guiana; French Polynesia; French Southern Territories; Gabon; Gambia; Georgia; Germany; Ghana; Gibraltar; Greece; Greenland; Grenada; Guadeloupe; Guam; Guatemala; Guinea; Guinea-Bissau; Guyana; Haiti; Heard Island and McDonald Islands; Honduras; Hong Kong; Hungary; Iceland; India; Indonesia; Iran; Iraq; Ireland; Israel; Italy; Jamaica; Japan; Jordan; Kazakhstan; Kenya; Kiribati; Democratic People''s Republic of Korea (North Korea), Republic of Korea (South Korea), Kosovo; Kuwait; Kyrgyzstan; Laos; Latvia; Lebanon; Lesotho; Liberia; Libya; Liechtenstein; Lithuania; Luxembourg; Macao; Madagascar; Malawi; Malaysia; Maldives; Mali; Malta; Marshall Islands; Martinique; Mauritania; Mauritius; Mayotte; Mexico; Micronesia; Moldova; Monaco; Mongolia; Montenegro; Montserrat; Morocco; Mozambique; Myanmar (Burma); Namibia; Nauru; Nepal; Netherlands; New Caledonia; New Zealand; Nicaragua; Niger; Nigeria; Niue; Norfolk Island; North Macedonia; Northern Mariana Islands; Norway; Oman; Pakistan; Palau; Palestine; Panama; Papua New Guinea (PNG); Paraguay; Peru; Philippines; Pitcairn; Poland; Portugal; Puerto Rico; Qatar; Reunion; Romania; Russia; Rwanda; St Barthelemy; St Helena, Ascension and Tristan da Cunha; St Kitts and Nevis; St Lucia; St Maarten; St Martin; St Pierre and Miquelon; St Vincent and the Grenadines; Samoa; San Marino; Sao Tome and Principe; Saudi Arabia; Senegal; Serbia; Seychelles; Sierra Leone; Singapore; Slovakia; Slovenia; Solomon Islands; Somalia; South Africa; South Georgia and the South Sandwich Islands; South Sudan; Spain; Sri Lanka; Sudan; Suriname; Svalbard and Jan Mayen; Sweden; Switzerland; Syria; Taiwan; Tajikistan; Tanzania; Thailand; Togo; Tokelau; Tonga; Trinidad and Tobago; Tunisia; Türkiye (Turkey); Turkmenistan; Turks and Caicos Islands; Tuvalu; Uganda; Ukraine; United Arab Emirates (UAE); United Kingdom (UK); United States (USA); US Minor Outlying Islands; US Virgin Islands; Uruguay; Uzbekistan; Vanuatu; Vatican; Venezuela; Vietnam; Wallis and Futuna; Western Sahara; Yemen; Zambia; Zimbabwe.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','2831','Canada - Atlantic offshore','Canada - offshore Newfoundland and Labrador, New Brunswick and Nova Scotia - west of 44°W and north of 40°N.',40.0,64.21,-67.75,-43.99,0);
INSERT INTO "extent" VALUES('EPSG','2832','Canada - British Columbia','Canada - British Columbia.',48.25,60.01,-139.04,-114.08,0);
INSERT INTO "extent" VALUES('EPSG','2833','Sweden - 12 00','Sweden - communes west of approximately 12°45''E and south of approximately 60°N. See information source for map.',56.74,60.13,10.93,13.11,0);
@@ -1836,9 +1837,9 @@ INSERT INTO "extent" VALUES('EPSG','2856','Europe - 24°W to 18°W','Europe - be
INSERT INTO "extent" VALUES('EPSG','2857','Europe - 18°W to 12°W','Europe - between 18°W and 12°W.',27.6,66.55,-18.0,-12.0,1);
INSERT INTO "extent" VALUES('EPSG','2858','Europe - 12°W to 6°W','Europe - between 12°W and 6°W.',36.0,62.33,-12.0,-6.0,1);
INSERT INTO "extent" VALUES('EPSG','2859','Europe - 6°W to 0°W','Europe - between 6°W and 0°W.',34.75,62.33,-6.0,0.0,1);
INSERT INTO "extent" VALUES('EPSG','2860','Germany - west of 6°E','Germany - onshore and offshore west of 6°E.',50.97,55.92,3.34,6.0,0);
INSERT INTO "extent" VALUES('EPSG','2861','Germany - 6°E to 12°E','Germany - onshore and offshore between 6°E and 12°E, including Mecklenburg-Vorpommern west of 12°E and Schleswig-Holstein.',47.27,55.47,6.0,12.0,0);
INSERT INTO "extent" VALUES('EPSG','2862','Germany - east of 12°E','Germany - onshore and offshore east of 12°E, including Brandenburg (all state, including that part west of 12°E) and Mecklenburg-Vorpommern east of 12°E.',47.46,55.03,11.57,15.04,0);
INSERT INTO "extent" VALUES('EPSG','2860','Germany - west of 6°E','Germany - onshore and offshore west of 6°E.',50.97,55.92,3.34,6.01,0);
INSERT INTO "extent" VALUES('EPSG','2861','Germany - 6°E to 12°E','Germany - onshore and offshore between 6°E and 12°E - Baden-Wurtemberg, Bayern, Bremen, Hamburg, Hessen, Mecklenburg-Vorpommern, Niedersachsen, Nordrhein-Westfalen, Rheinland-Pfalz, Saarland, Sachsen, Sachsen-Anhalt, Schleswig-Holstein, Thuringen.',47.27,55.47,6.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','2862','Germany - east of 12°E','Germany - onshore and offshore east of 12°E, together with that part of Brandenburg state west of 12°E - Bayern, Berlin, Brandenburg (all state), Mecklenburg-Vorpommern, Sachsen, Sachsen-Anhalt, Thuringen.',47.46,55.03,11.57,15.04,0);
INSERT INTO "extent" VALUES('EPSG','2863','Europe - 18°E to 24°E','Europe - between 18°E and 24°E.',34.8,75.0,18.0,24.0,1);
INSERT INTO "extent" VALUES('EPSG','2864','Europe - 24°E to 30°E','Europe - between 24°E and 30°E.',34.8,75.0,24.0,30.0,1);
INSERT INTO "extent" VALUES('EPSG','2865','Europe - 30°E to 36°E','Europe - between 30°E and 36°E.',34.5,75.0,30.0,36.0,1);
@@ -1855,7 +1856,7 @@ INSERT INTO "extent" VALUES('EPSG','2875','Portugal - Azores C - S Jorge onshore
INSERT INTO "extent" VALUES('EPSG','2876','Asia - Middle East - Iraq-Kuwait boundary','Iraq - Kuwait boundary.',29.06,30.32,46.36,48.61,0);
INSERT INTO "extent" VALUES('EPSG','2877','Slovenia - Slovenska Bistrica','Slovenia - Slovenska Bistrica with the Dravinja River Basin, area of Boc and parts of the Haloze and the Kozjansko region.',46.14,46.46,15.31,16.0,0);
INSERT INTO "extent" VALUES('EPSG','2878','Slovenia - Slovenske Gorice','Slovenia - Slovenske Gorice (the Slovene Humpback) with the broad region of Ormoz.',46.29,46.76,15.9,16.3,0);
INSERT INTO "extent" VALUES('EPSG','2879','Germany - offshore North Sea','Germany - offshore North Sea.',53.6,55.92,3.34,8.88,0);
INSERT INTO "extent" VALUES('EPSG','2879','Germany - offshore North Sea','Germany - offshore North Sea.',53.58,55.92,3.34,8.88,0);
INSERT INTO "extent" VALUES('EPSG','2880','Antarctica - Australian sector north of 80°S','Antarctica - north of 80°S and between 45°E and 136°E and between 142°E and 160°E - Australian sector north of 80°S.',-80.0,-60.0,45.0,160.0,0);
INSERT INTO "extent" VALUES('EPSG','2881','Europe - LCC & LAEA','Europe - European Union (EU) countries and candidates. Europe - onshore and offshore: Albania; Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Cyprus; Czechia; Denmark; Estonia; Faroe Islands; Finland; France; Germany; Gibraltar; Greece; Hungary; Iceland; Ireland; Italy; Kosovo; Latvia; Liechtenstein; Lithuania; Luxembourg; Malta; Monaco; Montenegro; Netherlands; North Macedonia; Norway including Svalbard and Jan Mayen; Poland; Portugal including Madeira and Azores; Romania; San Marino; Serbia; Slovakia; Slovenia; Spain including Canary Islands; Sweden; Switzerland; Türkiye (Turkey); United Kingdom (UK) including Channel Islands and Isle of Man; Vatican City State.',24.6,84.73,-35.58,44.83,0);
INSERT INTO "extent" VALUES('EPSG','2882','Italy - Adriatic - North Ancona','Italy - offshore - Adriatic Sea - North Ancona.',43.62,45.73,12.22,13.96,0);
@@ -1872,7 +1873,7 @@ INSERT INTO "extent" VALUES('EPSG','2892','Guadeloupe - Grande-Terre and Basse-T
INSERT INTO "extent" VALUES('EPSG','2893','Guadeloupe - La Desirade - onshore','Guadeloupe - onshore - La Desirade.',16.26,16.38,-61.13,-60.97,0);
INSERT INTO "extent" VALUES('EPSG','2894','Guadeloupe - Marie-Galante - onshore','Guadeloupe - onshore - Marie-Galante.',15.8,16.05,-61.39,-61.13,0);
INSERT INTO "extent" VALUES('EPSG','2895','Guadeloupe - Les Saintes - onshore','Guadeloupe - onshore - Les Saintes.',15.8,15.94,-61.68,-61.52,0);
INSERT INTO "extent" VALUES('EPSG','2896','Asia - Middle East - Israel, Palestine Territory, Turkey - offshore','Israel and Palestine Territory - offshore Mediterranean Sea; Türkiye (Turkey) - offshore Black Sea.',31.35,43.45,28.03,41.47,0);
INSERT INTO "extent" VALUES('EPSG','2896','Asia - Middle East - Israel, Palestine, Turkey - offshore','Israel and Palestine - offshore Mediterranean Sea; Türkiye (Turkey) - offshore Black Sea.',31.35,43.45,28.03,41.47,0);
INSERT INTO "extent" VALUES('EPSG','2897','Asia - Middle East - Israel and Palestine Territory offshore','Israel and Palestine Territory - offshore Mediterranean Sea.',31.33,33.1,33.5,35.1,1);
INSERT INTO "extent" VALUES('EPSG','2898','Germany - Berlin','Germany - Berlin.',52.33,52.65,13.09,13.76,0);
INSERT INTO "extent" VALUES('EPSG','2899','Australia - 126°E to 132°E, 8°S to 12°S (SC52) onshore','Australia - onshore mainland between 8°S and 12°S and 126°E and 132°E.',-12.0,-11.07,131.02,132.0,0);
@@ -1964,8 +1965,8 @@ INSERT INTO "extent" VALUES('EPSG','2984','Pakistan - Badin and Mehran','Pakista
INSERT INTO "extent" VALUES('EPSG','2985','Pakistan - offshore Indus','Pakistan - offshore Indus fan.',21.05,25.39,64.0,68.24,0);
INSERT INTO "extent" VALUES('EPSG','2986','Australia - SA','Australia - South Australia.',-38.13,-25.99,128.99,141.01,0);
INSERT INTO "extent" VALUES('EPSG','2987','Libya - Amal','Libya - Amal field.',29.1,29.8,20.8,21.4,0);
INSERT INTO "extent" VALUES('EPSG','2988','Channel Islands - Jersey, Les Ecrehos and Les Minquiers','Channel Islands - Jersey, Les Ecrehos and Les Minquiers - onshore and offshore.',48.77,49.44,-2.72,-1.81,0);
INSERT INTO "extent" VALUES('EPSG','2989','Channel Islands - Guernsey, Alderney, Sark','Channel Islands - Guernsey, Alderney, Sark, Herm, Brecqhou, Jethou, Lihou - onshore and offshore.',49.11,50.16,-3.73,-2.02,0);
INSERT INTO "extent" VALUES('EPSG','2988','Jersey','Channel Islands - Jersey, Les Ecrehos and Les Minquiers - onshore and offshore.',48.87,49.44,-2.56,-1.81,0);
INSERT INTO "extent" VALUES('EPSG','2989','Guernsey','Channel Islands - Guernsey, Alderney, Sark, Herm, Brecqhou, Jethou, Lihou - onshore and offshore.',49.21,49.94,-3.06,-2.03,0);
INSERT INTO "extent" VALUES('EPSG','2990','Australia - Brisbane','Australia - Brisbane and surrounding area. Also applicable in other local authorities in south-east Queensland (Gold Coast, Logan, Ipswich, Scenic Rim, Redland, Moreton Bay, Sunshine Coast, Noosa, eastern part of Gympie, eastern part of Fraser Coast) and north-east New South Wales (Tweed, Byron, Lismore, Kyogle, Ballina and Richmond Valley).',-29.36,-24.64,152.37,153.69,0);
INSERT INTO "extent" VALUES('EPSG','2991','Antarctica - 60°S to 64°S, 72°W to 60°W (SP19-20)','Antarctica - 60°S to 64°S and 72°W to 60°W.',-64.0,-60.0,-72.0,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','2992','Antarctica - 60°S to 64°S, 60°W to 48°W (SP21-22)','Antarctica - 60°S to 64°S and 60°W to 48°W.',-64.0,-60.0,-60.0,-48.0,0);
@@ -2066,8 +2067,8 @@ INSERT INTO "extent" VALUES('EPSG','3086','Colombia region 5','Colombia - region
INSERT INTO "extent" VALUES('EPSG','3087','Colombia region 6','Colombia - region VI - onshore between 3°N and 5°N and west of 74°24''W.',3.0,5.01,-77.68,-74.39,0);
INSERT INTO "extent" VALUES('EPSG','3088','Colombia region 7','Colombia - region VII (south west). Onshore south of 3°N and west of 74°W.',-1.13,3.01,-79.1,-74.0,0);
INSERT INTO "extent" VALUES('EPSG','3089','Colombia region 8','Colombia - region VIII (south east). South and east of a line from the intersection of the meridian of 74°W with the southern border, northwards to 3°N, 74°W, westwards to 3°''N, 74°24''W, northwards to 5°N, 74°24''W, eastwards to 5°N, 72°W, and then northwards to the intersection of the meridian of 72°W with the international border.',-4.23,7.1,-74.4,-66.87,0);
INSERT INTO "extent" VALUES('EPSG','3090','Colombia - 78°35''W to 75°35''W','Colombia - onshore between 78°35''W and 75°35''W of Greenwich (4°30'' W and 1°30'' W of Bogota).',0.03,10.21,-78.59,-75.58,0);
INSERT INTO "extent" VALUES('EPSG','3091','Colombia - west of 78°35''W','Colombia - mainland onshore west of 78°35''W of Greenwich (4°30'' W of Bogota).',1.23,2.48,-79.1,-78.58,0);
INSERT INTO "extent" VALUES('EPSG','3090','Colombia - 78°35''W to 75°35''W','Colombia - onshore between 4°30''W and 1°30''W of Bogota (approximately 78°35''W and 75°35''W of Greenwich).',0.03,10.21,-78.59,-75.58,0);
INSERT INTO "extent" VALUES('EPSG','3091','Colombia - west of 78°35''W','Colombia - mainland onshore west of 4°30''W of Bogota (approximately 78°35''W of Greenwich).',1.23,2.48,-79.1,-78.58,0);
INSERT INTO "extent" VALUES('EPSG','3092','Finland - west of 19.5°E onshore','Finland - onshore west of 19°30''E.',60.08,60.34,19.24,19.5,0);
INSERT INTO "extent" VALUES('EPSG','3093','Finland - 19.5°E to 20.5°E onshore','Finland - onshore between 19°30''E and 20°30''E.',59.92,60.48,19.5,20.5,0);
INSERT INTO "extent" VALUES('EPSG','3094','Finland - 20.5°E to 21.5°E onshore','Finland - onshore between 20°30''E and 21°30''E.',59.84,69.33,20.5,21.5,0);
@@ -2213,7 +2214,7 @@ INSERT INTO "extent" VALUES('EPSG','3233','Cote d''Ivoire (Ivory Coast) - onshor
INSERT INTO "extent" VALUES('EPSG','3234','Croatia - onshore','Croatia - onshore.',42.34,46.54,13.43,19.43,0);
INSERT INTO "extent" VALUES('EPSG','3235','Cuba - onshore','Cuba - onshore.',19.77,23.25,-85.01,-74.07,0);
INSERT INTO "extent" VALUES('EPSG','3236','Cyprus - onshore','Cyprus - onshore.',34.59,35.74,32.2,34.65,0);
INSERT INTO "extent" VALUES('EPSG','3237','Denmark - onshore','Denmark - onshore.',54.51,57.8,8.0,15.25,0);
INSERT INTO "extent" VALUES('EPSG','3237','Denmark - onshore','Denmark - onshore.',54.5,57.81,7.98,15.28,0);
INSERT INTO "extent" VALUES('EPSG','3238','Djibouti - onshore','Djibouti - onshore.',10.94,12.72,41.75,43.48,0);
INSERT INTO "extent" VALUES('EPSG','3239','Dominica - onshore','Dominica - onshore.',15.14,15.69,-61.55,-61.2,0);
INSERT INTO "extent" VALUES('EPSG','3240','Dominican Republic - onshore','Dominican Republic - onshore.',17.55,19.99,-72.01,-68.27,0);
@@ -2241,8 +2242,8 @@ INSERT INTO "extent" VALUES('EPSG','3261','Honduras - onshore','Honduras - onsho
INSERT INTO "extent" VALUES('EPSG','3262','Iceland - mainland','Iceland - mainland.',63.34,66.59,-24.66,-13.38,0);
INSERT INTO "extent" VALUES('EPSG','3263','Japan - onshore mainland','Japan - onshore mainland - Hokkaido, Honshu, Shikoku, Kyushu.',30.94,45.54,129.3,145.87,0);
INSERT INTO "extent" VALUES('EPSG','3264','Kenya - onshore','Kenya - onshore.',-4.72,4.63,33.9,41.91,0);
INSERT INTO "extent" VALUES('EPSG','3265','Korea, Democratic People''s Republic of (North Korea) - onshore','Democratic People''s Republic of Korea (North Korea) - onshore.',37.62,43.01,124.27,130.75,0);
INSERT INTO "extent" VALUES('EPSG','3266','Korea, Republic of (South Korea) - onshore','Republic of Korea (South Korea) - onshore.',33.14,38.64,124.53,131.01,0);
INSERT INTO "extent" VALUES('EPSG','3265','North Korea - onshore','Democratic People''s Republic of Korea (North Korea) - onshore.',37.62,43.01,124.27,130.75,0);
INSERT INTO "extent" VALUES('EPSG','3266','South Korea - onshore','Republic of Korea (South Korea) - onshore.',33.14,38.64,124.53,131.01,0);
INSERT INTO "extent" VALUES('EPSG','3267','Kuwait - onshore','Kuwait - onshore.',28.53,30.09,46.54,48.48,0);
INSERT INTO "extent" VALUES('EPSG','3268','Latvia - onshore','Latvia - onshore.',55.67,58.09,20.87,28.24,0);
INSERT INTO "extent" VALUES('EPSG','3269','Lebanon - onshore','Lebanon - onshore.',33.06,34.65,35.04,36.63,0);
@@ -2310,8 +2311,8 @@ INSERT INTO "extent" VALUES('EPSG','3330','Virgin Islands, US - onshore','US Vir
INSERT INTO "extent" VALUES('EPSG','3331','Western Sahara - onshore','Western Sahara - onshore.',20.71,27.67,-17.16,-8.66,0);
INSERT INTO "extent" VALUES('EPSG','3332','Yemen - onshore','Yemen - onshore.',12.09,19.0,41.8,54.53,0);
INSERT INTO "extent" VALUES('EPSG','3333','Finland - onshore','Finland - onshore.',59.75,70.09,19.24,31.59,0);
INSERT INTO "extent" VALUES('EPSG','3334','China - Hong Kong - onshore','China - Hong Kong - onshore.',22.19,22.56,113.82,114.39,0);
INSERT INTO "extent" VALUES('EPSG','3335','China - Hong Kong - offshore','China - Hong Kong - offshore.',22.13,22.58,113.76,114.51,0);
INSERT INTO "extent" VALUES('EPSG','3334','Hong Kong - onshore','Hong Kong - onshore.',22.19,22.56,113.82,114.39,0);
INSERT INTO "extent" VALUES('EPSG','3335','Hong Kong - offshore','Hong Kong - offshore.',22.13,22.58,113.76,114.51,0);
INSERT INTO "extent" VALUES('EPSG','3336','Iran - onshore','Iran - onshore.',25.02,39.78,44.03,63.34,0);
INSERT INTO "extent" VALUES('EPSG','3337','Reunion - onshore','Reunion - onshore.',-21.42,-20.81,55.16,55.91,0);
INSERT INTO "extent" VALUES('EPSG','3338','New Zealand - Stewart Island','New Zealand - Stewart Island.',-47.33,-46.63,167.29,168.34,0);
@@ -2501,7 +2502,7 @@ INSERT INTO "extent" VALUES('EPSG','3521','Indonesia - 129°E to 132°E onshore'
INSERT INTO "extent" VALUES('EPSG','3522','Indonesia - 132°E to 135°E onshore','Indonesia - onshore between 132°E and 135°E.',-7.3,-0.29,132.0,135.0,0);
INSERT INTO "extent" VALUES('EPSG','3523','Indonesia - 135°E to 138°E onshore','Indonesia - onshore between 135°E and 138°E.',-8.49,-0.58,135.0,138.0,0);
INSERT INTO "extent" VALUES('EPSG','3524','Canada - 72°W to 66°W','Canada between 72°W and 66°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Quebec.',40.8,84.0,-72.0,-66.0,0);
INSERT INTO "extent" VALUES('EPSG','3525','Canada - 66°W to 60°W','Canada between 66°W and 60°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.',40.04,84.0,-66.0,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','3525','Canada - 66°W to 60°W','Canada between 66°W and 60°W onshore and offshore - New Brunswick, Labrador, Nova Scotia, Nunavut, Prince Edward Island, Quebec.',38.21,84.0,-66.0,-59.99,0);
INSERT INTO "extent" VALUES('EPSG','3526','Canada - 108°W to 102°W','Canada between 108°W and 102°W onshore and offshore - Northwest Territories, Nunavut, Saskatchewan.',48.99,84.0,-108.0,-102.0,0);
INSERT INTO "extent" VALUES('EPSG','3527','Canada - 114°W to 108°W','Canada between 114°W and 108°W onshore and offshore - Alberta, Northwest Territories, Nunavut, Saskatchewan.',48.99,84.0,-114.0,-108.0,0);
INSERT INTO "extent" VALUES('EPSG','3528','Canada - 120°W to 114°W','Canada between 120°W and 114°W onshore and offshore - Alberta, British Columbia, Northwest Territories, Nunavut.',48.99,83.5,-120.0,-114.0,0);
@@ -2570,7 +2571,7 @@ INSERT INTO "extent" VALUES('EPSG','3590','Nigeria - 4°N to 5°N, 6°E to 8°E'
INSERT INTO "extent" VALUES('EPSG','3591','Taiwan - onshore - Penghu','Taiwan, Republic of China - onshore - Penghu (Pescadores) Islands.',23.13,23.82,119.25,119.78,0);
INSERT INTO "extent" VALUES('EPSG','3592','Antarctica - Darwin Glacier region','Antarctica - Darwin Glacier region.',-81.0,-76.0,145.0,169.0,0);
INSERT INTO "extent" VALUES('EPSG','3593','New Zealand - offshore','New Zealand - offshore.',-55.95,-25.88,160.6,-171.2,0);
INSERT INTO "extent" VALUES('EPSG','3594','Europe - EVRF2007','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.21,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','3594','Europe - EVRF2007','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.24,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','3595','Finland - west of 19.5°E onshore nominal','Finland - nominally onshore west of 19°30''E but may be used in adjacent areas to east if a municipality chooses to use one zone over its whole extent.',60.08,60.34,19.24,19.5,0);
INSERT INTO "extent" VALUES('EPSG','3596','Finland - 19.5°E to 20.5°E onshore nominal','Finland - nominally onshore between 19°30''E and 20°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.92,60.48,19.5,20.5,0);
INSERT INTO "extent" VALUES('EPSG','3597','Finland - 20.5°E to 21.5°E onshore nominal','Finland - nominally onshore between 20°30''E and 21°30''E but may be used in adjacent areas if a municipality chooses to use one zone over its whole extent.',59.84,69.33,20.5,21.5,0);
@@ -2612,47 +2613,47 @@ INSERT INTO "extent" VALUES('EPSG','3632','Denmark - onshore Jutland east of 9°
INSERT INTO "extent" VALUES('EPSG','3633','Mexico - 96°W to 90°W','Mexico between 96°W and 90°W, onshore and offshore.',12.1,26.0,-96.0,-90.0,0);
INSERT INTO "extent" VALUES('EPSG','3634','Caribbean - Puerto Rico and US Virgin Islands - onshore','Puerto Rico and US Virgin Islands - onshore.',17.62,18.57,-67.97,-64.51,0);
INSERT INTO "extent" VALUES('EPSG','3635','Mexico - east of 90°W','Mexico east of 90°W, onshore and offshore.',17.81,25.77,-90.0,-84.64,0);
INSERT INTO "extent" VALUES('EPSG','3636','Norway - onshore - west of 6°E','Norway - onshore - west of 6°E.',58.32,62.49,4.68,6.0,0);
INSERT INTO "extent" VALUES('EPSG','3637','USA - 102°W to 96°W and GoM OCS','United States (USA) - between 102°W and 96°W. Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas; Gulf of Mexico outer continental shelf (GoM OCS) west of approximately 96°W - protraction areas Corpus Christi; Port Isabel.',25.83,49.01,-102.0,-95.87,0);
INSERT INTO "extent" VALUES('EPSG','3636','Norway - onshore - west of 6°E','Norway - onshore - west of 6°E.',58.32,62.64,4.39,6.01,0);
INSERT INTO "extent" VALUES('EPSG','3637','USA - 102°W to 96°W and GoM OCS','United States (USA) - between 102°W and 96°W. Iowa; Kansas; Minnesota; Nebraska; North Dakota; Oklahoma; South Dakota; Texas; Gulf of Mexico west of approximately 96°W - leasing areas Matagorda Island, Mustang Island, North Padre Island and South Padre Island; outer continental shelf (GoM OCS) protraction areas Corpus Christi, Port Isabel.',25.83,49.01,-102.0,-95.87,0);
INSERT INTO "extent" VALUES('EPSG','3638','South America - 84°W to 78°W, S hemisphere and SIRGAS95 by country','Ecuador (mainland whole country including areas in northern hemisphere and east of 78°W), onshore and offshore. In remainder of South America, between 84°W and 78°W, southern hemisphere, onshore and offshore.',-56.45,1.45,-84.0,-75.21,0);
INSERT INTO "extent" VALUES('EPSG','3639','Norway - onshore - 6°E to 7°E','Norway - onshore - between 6°E and 7°E.',57.93,63.02,6.0,7.0,0);
INSERT INTO "extent" VALUES('EPSG','3640','USA - 96°W to 90°W and GoM OCS','United States (USA) - between 96°W and 90°W - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin; Gulf of Mexico outer continental shelf (GoM OCS) between approximately 96°W and 90°W - protraction areas East Breaks; Alaminos Canyon; Garden Banks; Keathley Canyon; Sigsbee Escarpment; Ewing Bank; Green Canyon; Walker Ridge; Amery Terrace.',25.61,49.38,-96.01,-89.86,0);
INSERT INTO "extent" VALUES('EPSG','3641','USA - 90°W to 84°W and GoM OCS','United States (USA) - between 90°W and 84°W onshore and offshore - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin; Gulf of Mexico outer continental shelf (GoM OCS) between approximately 90°W and 84°W - protraction areas Mobile; Viosca Knoll; Mississippi Canyon; Atwater Valley; Lund; Lund South; Pensacola; Destin Dome; De Soto Canyon; Lloyd Ridge; Henderson; Florida Plain; Campeche Escarpment; Apalachicola; Florida Middle Ground; The Elbow; Vernon Basin; Howell Hook; Rankin.',23.95,48.32,-90.01,-83.91,0);
INSERT INTO "extent" VALUES('EPSG','3639','Norway - onshore - 6°E to 7°E','Norway - onshore - between 6°E and 7°E.',57.93,63.03,6.0,7.01,0);
INSERT INTO "extent" VALUES('EPSG','3640','USA - 96°W to 90°W and GoM OCS','United States (USA) - between 96°W and 90°W - Arkansas; Illinois; Iowa; Kansas; Louisiana; Michigan; Minnesota; Mississippi; Missouri; Nebraska; Oklahoma; Tennessee; Texas; Wisconsin; Gulf of Mexico outer continental shelf (GoM OCS) between approximately 96°W and 90°W - leasing areas Brazos, Galveston, High Island; Sabine Pass; West Cameron, East Cameron, Vermilion, South Marsh Island, Eugene Island, Ship Shoal, South Pelto, Bay Marchand, South Timbalier, Grand Isle; protraction areas East Breaks, Alaminos Canyon, Garden Banks, Keathley Canyon, Sigsbee Escarpment, Ewing Bank, Green Canyon, Walker Ridge, Amery Terrace.',25.61,49.38,-96.01,-89.86,0);
INSERT INTO "extent" VALUES('EPSG','3641','USA - 90°W to 84°W and GoM OCS','United States (USA) - between 90°W and 84°W onshore and offshore - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin; Gulf of Mexico outer continental shelf (GoM OCS) between approximately 90°W and 84°W - leasing areas Grand Isle, West Delta, South Pass, Breton Sound, Main Pass, Chandeleur; protraction areas Mobile, Viosca Knoll, Mississippi Canyon, Atwater Valley, Lund, Lund South, Pensacola, Destin Dome, De Soto Canyon, Lloyd Ridge, Henderson, Florida Plain, Campeche Escarpment, Apalachicola, Florida Middle Ground, The Elbow, Vernon Basin, Howell Hook, Rankin.',23.95,48.32,-90.01,-83.91,0);
INSERT INTO "extent" VALUES('EPSG','3642','USA - 84°W to 78°W and GoM OCS','United States (USA) - between 84°W and 78°W onshore and offshore - Florida; Georgia; Maryland; Michigan; New York; North Carolina; Ohio; Pennsylvania; South Carolina; Tennessee; Virginia; West Virginia; Gulf of Mexico outer continental shelf (GoM OCS) east of approximately 84°W - protraction areas Gainesville; Tarpon Springs; St Petersburg; Charlotte Harbor; Pulley Ridge; Dry Tortugas; Tortugas Valley; Miami; Key West.',23.81,46.13,-84.09,-77.99,0);
INSERT INTO "extent" VALUES('EPSG','3643','Germany - Schleswig-Holstein','Germany - Schleswig-Holstein',53.35,55.06,7.8,11.35,1);
INSERT INTO "extent" VALUES('EPSG','3644','Germany - Schleswig-Holstein - east of 10.5°E','Germany - Schleswig-Holstein - east of 10°30''E.',53.36,54.59,10.49,11.4,0);
INSERT INTO "extent" VALUES('EPSG','3645','Sao Tome and Principe - onshore - Sao Tome','Sao Tome and Principe - onshore - Sao Tome.',-0.04,0.46,6.41,6.82,0);
INSERT INTO "extent" VALUES('EPSG','3646','Sao Tome and Principe - onshore - Principe','Sao Tome and Principe - onshore - Principe.',1.48,1.76,7.27,7.52,0);
INSERT INTO "extent" VALUES('EPSG','3647','Norway - onshore - 7°E to 8°E','Norway - onshore - between 7°E and 8°E.',57.93,63.52,7.0,8.0,0);
INSERT INTO "extent" VALUES('EPSG','3648','Norway - onshore - 8°E to 9°E','Norway - onshore - between 8°E and 9°E.',58.03,63.87,8.0,9.0,0);
INSERT INTO "extent" VALUES('EPSG','3649','Norway - onshore - 9°E to 10°E','Norway - onshore - between 9°E and 10°E.',58.52,64.16,9.0,10.0,0);
INSERT INTO "extent" VALUES('EPSG','3650','Norway - onshore - 10°E to 11°E','Norway - onshore - between 10°E and 11°E.',58.9,65.04,10.0,11.0,0);
INSERT INTO "extent" VALUES('EPSG','3651','Norway - onshore - 11°E to 12°E','Norway - onshore - between 11°E and 12°E.',58.88,65.76,11.0,12.0,0);
INSERT INTO "extent" VALUES('EPSG','3647','Norway - onshore - 7°E to 8°E','Norway - onshore - between 7°E and 8°E.',57.9,63.59,6.99,8.01,0);
INSERT INTO "extent" VALUES('EPSG','3648','Norway - onshore - 8°E to 9°E','Norway - onshore - between 8°E and 9°E.',58.0,64.1,8.0,9.01,0);
INSERT INTO "extent" VALUES('EPSG','3649','Norway - onshore - 9°E to 10°E','Norway - onshore - between 9°E and 10°E.',58.44,64.25,9.0,10.01,0);
INSERT INTO "extent" VALUES('EPSG','3650','Norway - onshore - 10°E to 11°E','Norway - onshore - between 10°E and 11°E.',58.9,65.27,10.0,11.01,0);
INSERT INTO "extent" VALUES('EPSG','3651','Norway - onshore - 11°E to 12°E','Norway - onshore - between 11°E and 12°E.',58.88,67.58,11.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','3652','USA - Michigan - SPCS - W','United States (USA) - Michigan - counties of Baraga; Dickinson; Gogebic; Houghton; Iron; Keweenaw; Marquette; Menominee; Ontonagon.',45.09,48.32,-90.42,-83.44,0);
INSERT INTO "extent" VALUES('EPSG','3653','Norway - onshore - 12°E to 13°E','Norway - onshore - between 12°E and 13°E.',59.88,68.15,12.0,13.0,0);
INSERT INTO "extent" VALUES('EPSG','3654','Norway - onshore - 13°E to 14°E','Norway - onshore - between 13°E and 14°E.',64.01,68.37,13.0,14.0,0);
INSERT INTO "extent" VALUES('EPSG','3655','Norway - onshore - 14°E to 15°E','Norway - onshore - between 14°E and 15°E.',64.03,69.05,14.0,15.0,0);
INSERT INTO "extent" VALUES('EPSG','3656','Norway - onshore - 15°E to 16°E','Norway - onshore - between 15°E and 16°E.',66.14,69.35,15.0,16.0,0);
INSERT INTO "extent" VALUES('EPSG','3657','Norway - onshore - 16°E to 17°E','Norway - onshore - between 16°E and 17°E.',66.88,69.45,16.0,17.0,0);
INSERT INTO "extent" VALUES('EPSG','3658','Norway - onshore - 17°E to 18°E','Norway - onshore - between 17°E and 18°E.',67.94,69.68,17.0,18.0,0);
INSERT INTO "extent" VALUES('EPSG','3653','Norway - onshore - 12°E to 13°E','Norway - onshore - between 12°E and 13°E.',59.88,68.16,12.0,13.01,0);
INSERT INTO "extent" VALUES('EPSG','3654','Norway - onshore - 13°E to 14°E','Norway - onshore - between 13°E and 14°E.',64.01,68.4,13.0,14.01,0);
INSERT INTO "extent" VALUES('EPSG','3655','Norway - onshore - 14°E to 15°E','Norway - onshore - between 14°E and 15°E.',64.03,69.07,14.0,15.01,0);
INSERT INTO "extent" VALUES('EPSG','3656','Norway - onshore - 15°E to 16°E','Norway - onshore - between 15°E and 16°E.',66.14,69.38,15.0,16.01,0);
INSERT INTO "extent" VALUES('EPSG','3657','Norway - onshore - 16°E to 17°E','Norway - onshore - between 16°E and 17°E.',66.88,69.49,15.99,17.01,0);
INSERT INTO "extent" VALUES('EPSG','3658','Norway - onshore - 17°E to 18°E','Norway - onshore - between 17°E and 18°E.',67.94,69.96,17.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','3659','Germany - Schleswig-Holstein - west of 10.5°E','Germany - Schleswig-Holstein - west of 10°30''E including Heligoland.',53.37,55.09,7.8,10.5,0);
INSERT INTO "extent" VALUES('EPSG','3660','Norway - onshore - 18°E to 19°E','Norway - onshore - between 18°E and 19°E.',68.04,70.27,18.0,19.0,0);
INSERT INTO "extent" VALUES('EPSG','3661','Norway - onshore - 19°E to 20°E','Norway - onshore - between 19°E and 20°E.',68.33,70.34,19.0,20.0,0);
INSERT INTO "extent" VALUES('EPSG','3662','Norway - onshore - 20°E to 21°E','Norway - onshore - between 20°E and 21°E.',68.37,70.29,20.0,21.0,0);
INSERT INTO "extent" VALUES('EPSG','3663','Norway - onshore - 21°E to 22°E','Norway - onshore - between 21°E and 22°E.',69.03,70.71,21.0,22.0,0);
INSERT INTO "extent" VALUES('EPSG','3660','Norway - onshore - 18°E to 19°E','Norway - onshore - between 18°E and 19°E.',68.04,70.29,18.0,19.01,0);
INSERT INTO "extent" VALUES('EPSG','3661','Norway - onshore - 19°E to 20°E','Norway - onshore - between 19°E and 20°E.',68.33,70.35,19.0,20.01,0);
INSERT INTO "extent" VALUES('EPSG','3662','Norway - onshore - 20°E to 21°E','Norway - onshore - between 20°E and 21°E.',68.37,70.37,20.0,21.01,0);
INSERT INTO "extent" VALUES('EPSG','3663','Norway - onshore - 21°E to 22°E','Norway - onshore - between 21°E and 22°E.',69.03,70.73,21.0,22.01,0);
INSERT INTO "extent" VALUES('EPSG','3664','USA - CONUS and Alaska - onshore','United States (USA) - CONUS and Alaska - onshore - Alabama; Alaska mainland; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',24.41,71.4,-168.26,-66.91,0);
INSERT INTO "extent" VALUES('EPSG','3665','Norway - onshore - 22°E to 23°E','Norway - onshore - between 22°E and 23°E.',68.69,70.81,22.0,23.0,0);
INSERT INTO "extent" VALUES('EPSG','3665','Norway - onshore - 22°E to 23°E','Norway - onshore - between 22°E and 23°E.',68.69,70.93,22.0,23.01,0);
INSERT INTO "extent" VALUES('EPSG','3666','Indonesia - Java, Java Sea and western Sumatra','Indonesia - Bali, Java and western Sumatra onshore, offshore southern Java Sea, Madura Strait and western Bali Sea.',-8.91,5.97,95.16,117.01,0);
INSERT INTO "extent" VALUES('EPSG','3667','Norway - onshore - 23°E to 24°E','Norway - onshore - between 23°E and 24°E.',68.62,71.08,23.0,24.0,0);
INSERT INTO "extent" VALUES('EPSG','3668','Norway - onshore - 24°E to 25°E','Norway - onshore - between 24°E and 25°E.',68.58,71.16,24.0,25.0,0);
INSERT INTO "extent" VALUES('EPSG','3669','Norway - onshore - 25°E to 26°E','Norway - onshore - between 25°E and 26°E.',68.59,71.21,25.0,26.0,0);
INSERT INTO "extent" VALUES('EPSG','3667','Norway - onshore - 23°E to 24°E','Norway - onshore - between 23°E and 24°E.',68.62,71.15,23.0,24.01,0);
INSERT INTO "extent" VALUES('EPSG','3668','Norway - onshore - 24°E to 25°E','Norway - onshore - between 24°E and 25°E.',68.58,71.17,24.0,25.01,0);
INSERT INTO "extent" VALUES('EPSG','3669','Norway - onshore - 25°E to 26°E','Norway - onshore - between 25°E and 26°E.',68.59,71.24,25.0,26.01,0);
INSERT INTO "extent" VALUES('EPSG','3670','Portugal - Azores and Madeira','Portugal - Azores and Madeira island groups and surrounding EEZ - Flores, Corvo; Graciosa, Terceira, Sao Jorge, Pico, Faial; Sao Miguel, Santa Maria; Madeira, Porto Santo, Desertas; Selvagens.',29.24,43.07,-35.58,-12.48,0);
INSERT INTO "extent" VALUES('EPSG','3671','Norway - onshore - 26°E to 27°E','Norway - onshore - between 26°E and 27°E.',69.71,71.17,26.0,27.0,0);
INSERT INTO "extent" VALUES('EPSG','3672','Norway - onshore - 27°E to 28°E','Norway - onshore - between 27°E and 28°E.',69.9,71.17,27.0,28.0,0);
INSERT INTO "extent" VALUES('EPSG','3673','Norway - onshore - 28°E to 29°E','Norway - onshore - between 28°E and 29°E.',69.03,71.13,28.0,29.0,0);
INSERT INTO "extent" VALUES('EPSG','3674','Norway - onshore - 29°E to 30°E','Norway - onshore - between 29°E and 30°E.',69.02,70.93,29.0,30.0,0);
INSERT INTO "extent" VALUES('EPSG','3671','Norway - onshore - 26°E to 27°E','Norway - onshore - between 26°E and 27°E.',69.71,71.2,26.0,27.01,0);
INSERT INTO "extent" VALUES('EPSG','3672','Norway - onshore - 27°E to 28°E','Norway - onshore - between 27°E and 28°E.',69.9,71.19,27.0,28.01,0);
INSERT INTO "extent" VALUES('EPSG','3673','Norway - onshore - 28°E to 29°E','Norway - onshore - between 28°E and 29°E.',69.03,71.15,28.0,29.01,0);
INSERT INTO "extent" VALUES('EPSG','3674','Norway - onshore - 29°E to 30°E','Norway - onshore - between 29°E and 30°E.',69.02,70.94,29.0,30.01,0);
INSERT INTO "extent" VALUES('EPSG','3675','Paraguay - north of 22°S','Paraguay - north of 22°S.',-22.0,-19.29,-62.57,-57.81,0);
INSERT INTO "extent" VALUES('EPSG','3676','Norway - onshore - east of 30°E','Norway - onshore - east of 30°E.',69.46,70.77,30.0,31.22,0);
INSERT INTO "extent" VALUES('EPSG','3676','Norway - onshore - east of 30°E','Norway - onshore - east of 30°E.',69.46,70.77,30.0,31.32,0);
INSERT INTO "extent" VALUES('EPSG','3677','Portugal - Azores 30°W to 24°W','Portugal - between 30°W and 24°W - central and eastern Azores - Graciosa, Terceira, Sao Jorge, Pico, Faial; Sao Miguel and Santa Maria islands and surrounding EEZ.',33.52,42.96,-30.0,-24.0,0);
INSERT INTO "extent" VALUES('EPSG','3678','Portugal - Madeira and EEZ E of 18°W','Portugal - Madeira, Porto Santo, Desertas and Selvagens islands and surrounding EEZ east of 18°W.',29.24,36.46,-18.0,-12.48,0);
INSERT INTO "extent" VALUES('EPSG','3679','Portugal - Madeira island onshore','Portugal - Madeira island onshore.',32.58,32.93,-17.31,-16.66,0);
@@ -2679,7 +2680,7 @@ INSERT INTO "extent" VALUES('EPSG','3699','Brazil - Cumuruxatiba, Jequitinhonha
INSERT INTO "extent" VALUES('EPSG','3700','Brazil - Santos and Pelotas','Brazil - offshore - Santos and Pelotas basins.',-35.71,-22.66,-53.38,-40.2,0);
INSERT INTO "extent" VALUES('EPSG','3701','Iraq - 34.6°N to 36.2°N, west of 42.8°E (map 5)','Iraq - between UTM 3830000mN and 4010000mN (approximately 34°35''N and 36°13''N) and west of UTM 300000mE (approximately 42°48''E).',34.57,36.22,41.09,42.82,0);
INSERT INTO "extent" VALUES('EPSG','3702','Iraq - SE','Iraq - onshore southeast.',29.06,32.51,43.98,48.61,0);
INSERT INTO "extent" VALUES('EPSG','3703','Germany - Lower Saxony west of 7.5°E','Germany - Niedersachsen onshore west of 7°30''E.',52.23,53.81,6.58,7.5,0);
INSERT INTO "extent" VALUES('EPSG','3703','Germany - Lower Saxony west of 7.5°E','Germany - Niedersachsen onshore west of 7°30''E.',52.23,53.81,6.56,7.51,0);
INSERT INTO "extent" VALUES('EPSG','3704','Iraq - 31.4°N to 33°N, east of 46.1°E (map 17)','Iraq - between UTM 3470000mN and 3650000mN (approximately 31°21''N and 32°58''N) and east of UTM 600000mE (approximately 46°04''E).',31.33,32.99,46.05,47.87,0);
INSERT INTO "extent" VALUES('EPSG','3705','Germany - Lower Saxony east of 10.5°E','Germany - Niedersachsen east of 10°30''E.',51.55,53.38,10.5,11.59,0);
INSERT INTO "extent" VALUES('EPSG','3706','Iraq - 29.7 to 31.4°N, 42°E to 43.9°E (map 19)','Iraq - between UTM 3290000mN and 3470000mN (approximately 29°47''N and 31°21''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',29.75,31.37,42.0,43.97,0);
@@ -2696,8 +2697,8 @@ INSERT INTO "extent" VALUES('EPSG','3716','Asia - Korea N and S - 126°E to 128
INSERT INTO "extent" VALUES('EPSG','3717','Iraq - north of 36.2°N, 42°E to 43.9°E (map 2)','Iraq - north of UTM 4010000mN (approximately 36°13''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',36.19,37.39,42.0,43.89,0);
INSERT INTO "extent" VALUES('EPSG','3718','Iraq - 34.6°N to 36.2°N, east of 45°E (map 7)','Iraq - between UTM 3830000mN and 4010000mN (approximately 34°35''N and 36°13''N) and east of 45°E.',34.6,36.24,45.0,46.35,0);
INSERT INTO "extent" VALUES('EPSG','3719','Iraq - north of 36.2°N, east of 43.9°E (map 3)','Iraq - north of UTM 4010000mN (approximately 36°13''N) and east of UTM 400000mE (approximatrely 43°56''E).',36.22,37.33,43.87,45.33,0);
INSERT INTO "extent" VALUES('EPSG','3720','Korea, Republic of (South Korea) - 130°E to 132°E onshore','Republic of Korea (South Korea) - onshore between 130°E and 132°E.',37.39,37.62,130.71,131.01,0);
INSERT INTO "extent" VALUES('EPSG','3721','Korea, Republic of (South Korea) - 126°E to 128°E Jeju','Republic of Korea (South Korea) - between 126°E and 128°E - Jeju island onshore.',33.14,33.61,126.09,127.01,0);
INSERT INTO "extent" VALUES('EPSG','3720','South Korea - 130°E to 132°E onshore','Republic of Korea (South Korea) - onshore between 130°E and 132°E.',37.39,37.62,130.71,131.01,0);
INSERT INTO "extent" VALUES('EPSG','3721','South Korea - Jeju','Republic of Korea (South Korea) - between 126°E and 128°E - Jeju island onshore.',33.14,33.61,126.09,127.01,0);
INSERT INTO "extent" VALUES('EPSG','3722','Iraq - 33°N to 34.6°N, west of 40.1°E (map 8)','Iraq - north of UTM 3650000mN (approximately 32°58''N) and west of UTM zone 37 600000mE (approximately 40°04''E).',32.98,33.99,38.79,40.09,0);
INSERT INTO "extent" VALUES('EPSG','3723','Iraq - 33°N to 34.6°N, 40.1°E to 42°E (map 9)','Iraq - between UTM 3650000mN and 3830000mN (approximately 32°58''N and 34°35''N) and between UTM zone 37 600000mE (approximately 40°04''E) and 42°E.',32.95,34.6,40.07,42.0,0);
INSERT INTO "extent" VALUES('EPSG','3724','Iraq - 33°N to 34.6°N, 42°E to 43.9°E (map 10)','Iraq - between UTM 3650000mN and 3830000mN (approximately 32°58''N and 34°35''N) and between 42°E and UTM 400000mE (approximately 43°56''E).',32.95,34.61,42.0,43.93,0);
@@ -2706,7 +2707,7 @@ INSERT INTO "extent" VALUES('EPSG','3726','Asia - Korea N and S - 128°E to 130
INSERT INTO "extent" VALUES('EPSG','3727','Asia - Korea N and S - east of 130°E','Democratic People''s Republic of Korea (North Korea) and Republic of Korea (South Korea) - onshore east of 130°E.',37.39,42.98,130.0,131.01,0);
INSERT INTO "extent" VALUES('EPSG','3728','Iraq - 31.4°N to 33°N, 40.1°E to 42°E (map 14)','Iraq - between UTM 3470000mN and 3650000mN (approximately 31°21''N and 32°58''N) and between UTM zone 37 600000mE (approximately 40°04''E) and 42°E.',31.32,32.99,40.05,42.0,0);
INSERT INTO "extent" VALUES('EPSG','3729','Iraq - 31.4°N to 33°N, west of 40.1°E (map 13)','Iraq - sorth of UTM 3650000mN (approximately 32°58''N) and west of UTM zone 37 600000mE (approximately 40°04''E).',32.0,32.99,38.92,40.08,0);
INSERT INTO "extent" VALUES('EPSG','3730','Korea, Republic of (South Korea) - 126°E to 128°E mainland','Republic of Korea (South Korea) - between 126°E and 128°E - mainland and nearshore.',33.96,38.33,126.0,128.0,0);
INSERT INTO "extent" VALUES('EPSG','3730','South Korea - 126°E to 128°E mainland','Republic of Korea (South Korea) - between 126°E and 128°E - mainland and nearshore.',33.96,38.33,126.0,128.0,0);
INSERT INTO "extent" VALUES('EPSG','3731','Georgia - offshore','Georgia - offshore.',41.54,43.33,38.97,41.71,0);
INSERT INTO "extent" VALUES('EPSG','3732','Spain - Catalonia onshore','Spain - Catalonia onshore.',40.49,42.86,0.16,3.39,0);
INSERT INTO "extent" VALUES('EPSG','3733','Bolivia - east of 60°W','Bolivia - east of 60°W.',-20.17,-16.27,-60.0,-57.52,0);
@@ -2715,7 +2716,7 @@ INSERT INTO "extent" VALUES('EPSG','3735','Thailand - onshore east of 102°E','T
INSERT INTO "extent" VALUES('EPSG','3736','Italy - mainland and Sicily','Italy - mainland (including San Marino and Vatican City State) and Sicily.',36.59,47.1,6.62,18.58,0);
INSERT INTO "extent" VALUES('EPSG','3737','Bhutan - Chhukha district','Bhutan - Chhukha district.',26.71,27.32,89.26,89.83,0);
INSERT INTO "extent" VALUES('EPSG','3738','Bhutan - Dagana district','Bhutan - Dagana district.',26.7,27.29,89.63,90.08,0);
INSERT INTO "extent" VALUES('EPSG','3739','Korea, Republic of (South Korea) - mainland','Republic of Korea (South Korea) - mainland onshore.',33.96,38.64,125.75,129.65,0);
INSERT INTO "extent" VALUES('EPSG','3739','South Korea - mainland','Republic of Korea (South Korea) - mainland onshore.',33.96,38.64,125.75,129.65,0);
INSERT INTO "extent" VALUES('EPSG','3740','Bhutan - Gasa district','Bhutan - Gasa district.',27.72,28.33,89.44,90.47,0);
INSERT INTO "extent" VALUES('EPSG','3741','Thailand - onshore and Gulf of Thailand','Thailand - onshore plus offshore Gulf of Thailand.',5.63,20.46,97.34,105.64,0);
INSERT INTO "extent" VALUES('EPSG','3742','Bhutan - Ha district','Bhutan - Ha district.',27.02,27.62,88.9,89.39,0);
@@ -2781,12 +2782,12 @@ INSERT INTO "extent" VALUES('EPSG','3801','New Zealand - South Island - Bluff vc
INSERT INTO "extent" VALUES('EPSG','3802','New Zealand - South Island - Nelson vcrs','New Zealand - South Island - north of approximately 42°20''S - Nelson vertical CRS area.',-42.44,-40.44,171.82,174.46,0);
INSERT INTO "extent" VALUES('EPSG','3803','New Zealand - South Island - Dunedin vcrs','New Zealand - South Island - between approximately 44°S and 46°S - Dunedin vertical CRS area.',-46.4,-43.82,167.73,171.28,0);
INSERT INTO "extent" VALUES('EPSG','3804','New Zealand - South Island - Lyttleton vcrs','New Zealand - South Island - between approximately 41°20''S and 45°S - Lyttleton vertical CRS area.',-44.92,-41.6,168.95,173.77,0);
INSERT INTO "extent" VALUES('EPSG','3805','Bonaire, St Eustatius and Saba','Bonaire, St Eustatius and Saba - onshore and offshore.',11.66,17.96,-69.09,-62.76,0);
INSERT INTO "extent" VALUES('EPSG','3805','BES Islands','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - onshore and offshore.',11.66,17.96,-69.09,-62.76,0);
INSERT INTO "extent" VALUES('EPSG','3806','New Zealand - South Island - Dunedin-Bluff vcrs','New Zealand - South Island - Dunedin-Bluff vertical CRS area.',-46.73,-44.52,166.37,169.95,0);
INSERT INTO "extent" VALUES('EPSG','3807','Curacao','Curaçao - onshore and offshore.',11.66,15.35,-69.55,-68.54,0);
INSERT INTO "extent" VALUES('EPSG','3808','Brazil - 36°W to 30°W offshore','Brazil - offshore between 36°W and 30°W, southern hemisphere.',-20.11,0.0,-36.0,-30.0,0);
INSERT INTO "extent" VALUES('EPSG','3809','St Maarten','Sint Maarten - onshore and offshore.',17.81,18.07,-63.3,-62.92,0);
INSERT INTO "extent" VALUES('EPSG','3810','Caribbean - St Maarten, St Eustatius and Saba - onshore','Caribbean - St Maarten, St Eustatius and Saba - onshore.',17.41,18.07,-63.31,-62.88,0);
INSERT INTO "extent" VALUES('EPSG','3810','Caribbean onshore - BES Islands - St Eustatius and Saba; Sint Maarten','Caribbean - Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - St Eustatius and Saba - onshore; St Maarten - onshore.',17.41,18.07,-63.31,-62.88,0);
INSERT INTO "extent" VALUES('EPSG','3811','Chile - 72°W to 66°W','Chile - 72°W to 66°W, onshore and offshore.',-59.87,-17.5,-72.0,-66.0,0);
INSERT INTO "extent" VALUES('EPSG','3812','Nigeria - offshore deep water - east of 6°E','Nigeria - offshore deep water - east of 6°E.',2.61,3.68,6.0,7.82,0);
INSERT INTO "extent" VALUES('EPSG','3813','Nigeria - offshore blocks OPL 209, 219 and 220','Nigeria - offshore blocks OPL 209, 219 and 220.',3.25,5.54,4.01,6.96,0);
@@ -2796,12 +2797,12 @@ INSERT INTO "extent" VALUES('EPSG','3816','Nigeria - offshore blocks OPL 217-223
INSERT INTO "extent" VALUES('EPSG','3817','Nigeria - offshore blocks OPL 210, 213, 217 and 218','Nigeria - offshore blocks OPL 210, 213, 217 and 218.',3.24,5.54,4.41,6.29,0);
INSERT INTO "extent" VALUES('EPSG','3818','New Zealand - North Island - Tararu vcrs','New Zealand - North Island - Tararu vertical CRS area.',-37.21,-36.78,175.44,175.99,0);
INSERT INTO "extent" VALUES('EPSG','3819','Nigeria - offshore blocks OPL 215 and 221','Nigeria - offshore blocks OPL 215 and 221.',3.25,4.23,5.02,7.31,0);
INSERT INTO "extent" VALUES('EPSG','3820','Bonaire - St Eustatius and Saba','Bonaire, St Eustatius and Saba - St Eustatius and Saba - onshore and offshore.',16.68,17.96,-64.02,-62.76,0);
INSERT INTO "extent" VALUES('EPSG','3821','Bonaire','Bonaire, St Eustatius and Saba - Bonaire - onshore and offshore.',11.66,15.3,-69.09,-67.98,0);
INSERT INTO "extent" VALUES('EPSG','3822','Bonaire - onshore','Bonaire, St Eustatius and Saba - Bonaire - onshore.',11.97,12.36,-68.47,-68.14,0);
INSERT INTO "extent" VALUES('EPSG','3820','BES Islands - St Eustatius and Saba','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - St Eustatius and Saba - onshore and offshore.',16.68,17.96,-64.02,-62.76,0);
INSERT INTO "extent" VALUES('EPSG','3821','BES Islands - Bonaire','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Bonaire - onshore and offshore.',11.66,15.3,-69.09,-67.98,0);
INSERT INTO "extent" VALUES('EPSG','3822','BES Islands - Bonaire onshore','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Bonaire - onshore.',11.97,12.36,-68.47,-68.14,0);
INSERT INTO "extent" VALUES('EPSG','3823','Curacao - onshore','Curaçao - onshore.',11.99,12.44,-69.22,-68.69,0);
INSERT INTO "extent" VALUES('EPSG','3824','Nigeria - Gongola Basin','Nigeria - onshore - Gongola Basin',8.78,11.63,9.41,12.13,0);
INSERT INTO "extent" VALUES('EPSG','3825','Caribbean - French Antilles west of 60°W','French Antilles onshore and offshore west of 60°W - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; northern St Martin.',14.08,18.31,-63.66,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','3825','Caribbean - French Antilles west of 60°W','French Antilles onshore and offshore west of 60°W - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; northern St Martin.',14.08,18.32,-63.66,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','3826','Uruguay - west of 54°W','Uruguay - west of 54°W, onshore and offshore.',-36.63,-30.09,-58.49,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','3827','Bolivia - west of 66°W','Bolivia - west of 66°W.',-22.91,-9.77,-69.66,-66.0,0);
INSERT INTO "extent" VALUES('EPSG','3828','Uruguay - east of 54°W','Uruguay - east of 54°W, onshore and offshore.',-37.77,-31.9,-54.0,-50.01,0);
@@ -2863,12 +2864,12 @@ INSERT INTO "extent" VALUES('EPSG','3883','USA - Hawaii - main islands','United
INSERT INTO "extent" VALUES('EPSG','3884','Brazil - SAD69 onshore south of 4°30''S','Brazil - onshore southeast of a line beginning at the intersection of the coast with the 4°30''S parallel, then westwards to 4°30''S, 54°W, then southwards to 5°S, 54°W, southwestwards to 10°S, 60°W, and southwards to the national boundary.',-33.78,-4.5,-60.57,-34.74,1);
INSERT INTO "extent" VALUES('EPSG','3885','Papua New Guinea - 144°E to 150°E','Papua New Guinea - between 144°E and 150°E, onshore and offshore.',-13.88,2.58,144.0,150.01,0);
INSERT INTO "extent" VALUES('EPSG','3886','Finland - onshore west of 19.5°E','Finland - onshore west of 19°30''E.',60.0,60.42,19.3,19.5,1);
INSERT INTO "extent" VALUES('EPSG','3887','Brazil - onshore south of 14°S and east of 53°W','Brazil - onshore southeast of a line beginning at the intersection of the 53°W meridian with the northern national boundary then running southwards to 14°S, then westwards to the national boundary.',-33.78,4.43,-60.58,-34.74,0);
INSERT INTO "extent" VALUES('EPSG','3887','Brazil - onshore south of 14°S and east of 53°W','Brazil - onshore southeast of a line beginning at the intersection of the 53°W meridian with the northern national boundary then running southwards to 14°S, then westwards to the national boundary.',-33.78,4.44,-60.58,-34.74,0);
INSERT INTO "extent" VALUES('EPSG','3888','Papua New Guinea - 150°E to 156°E','Papua New Guinea - between 150°E and 156°E, onshore and offshore.',-14.75,1.98,150.0,156.0,0);
INSERT INTO "extent" VALUES('EPSG','3889','Europe - Fehmarnbelt outer','Fehmarnbelt area of Denmark and Germany.',54.33,54.83,10.66,12.01,0);
INSERT INTO "extent" VALUES('EPSG','3890','Europe - Fehmarnbelt inner','Fehmarnbelt area of Denmark and Germany.',54.42,54.76,11.17,11.51,0);
INSERT INTO "extent" VALUES('EPSG','3891','Canada - 60°W to 54°W and NAD27','Canada between 60°W and 54°W, onshore and offshore - Newfoundland and Labrador; Quebec.',40.57,68.93,-60.0,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','3892','Germany - offshore North Sea west of 4.5°E','Germany - offshore North Sea west of 4°30''E.',55.24,55.92,3.34,4.5,0);
INSERT INTO "extent" VALUES('EPSG','3892','Germany - offshore North Sea west of 4.5°E','Germany - offshore North Sea west of 4°30''E.',55.24,55.92,3.34,4.51,0);
INSERT INTO "extent" VALUES('EPSG','3893','UK - Wytch Farm','United Kingdom (UK) - Wytch Farm area - onshore and offshore.',50.53,50.8,-2.2,-1.68,0);
INSERT INTO "extent" VALUES('EPSG','3894','New Zealand - Chatham Island onshore','New Zealand - Chatham Island - onshore.',-44.18,-43.67,-176.92,-176.2,0);
INSERT INTO "extent" VALUES('EPSG','3895','Ukraine - west of 24°E','Ukraine - west of 24°E.',47.95,51.66,22.15,24.0,0);
@@ -2877,7 +2878,7 @@ INSERT INTO "extent" VALUES('EPSG','3897','France - offshore Mediterranean','Fra
INSERT INTO "extent" VALUES('EPSG','3898','Ukraine - 24°E to 30°E','Ukraine - between 24°E and 30°E, onshore and offshore.',45.1,51.96,24.0,30.0,0);
INSERT INTO "extent" VALUES('EPSG','3899','Europe - South Permian basin','Europe - South Permian basin.',50.5,56.0,-1.67,22.0,0);
INSERT INTO "extent" VALUES('EPSG','3900','Europe - onshore - eastern - S-42(83)','Onshore Bulgaria, Czechia, Germany (former DDR), Hungary and Slovakia.',41.24,54.74,9.92,28.68,0);
INSERT INTO "extent" VALUES('EPSG','3901','Germany - onshore west of 6°E','Germany - onshore west of 6°E.',50.97,51.83,5.86,6.0,0);
INSERT INTO "extent" VALUES('EPSG','3901','Germany - onshore west of 6°E','Germany - onshore west of 6°E - Nordrhein-Westfalen.',50.97,51.83,5.86,6.01,0);
INSERT INTO "extent" VALUES('EPSG','3902','Reunion','Reunion - onshore and offshore.',-24.72,-18.28,51.83,58.24,0);
INSERT INTO "extent" VALUES('EPSG','3903','Ukraine - 30°E to 36°E','Ukraine - between 30°E and 36°E, onshore and offshore.',43.18,52.38,30.0,36.0,0);
INSERT INTO "extent" VALUES('EPSG','3904','Germany - onshore between 6°E and 12°E','Germany - onshore between 6°E and 12°E.',47.27,55.09,6.0,12.0,0);
@@ -3042,10 +3043,10 @@ INSERT INTO "extent" VALUES('EPSG','4062','Arctic - 81°10''N to 76°10''N, 129
INSERT INTO "extent" VALUES('EPSG','4063','Arctic - 81°10''N to 76°10''N, 160°E to 169°W','Arctic - between 81°10''N and 76°10''N, approximately 160°E to approximately 169°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,160.0,-168.99,0);
INSERT INTO "extent" VALUES('EPSG','4064','Arctic - 81°10''N to 76°10''N, 169°W to 138°W','Arctic - between 81°10''N and 76°10''N, approximately 169°W to approximately 138°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-169.0,-138.0,0);
INSERT INTO "extent" VALUES('EPSG','4065','Arctic - 81°10''N to 76°10''N, 144°W to 114°W','Arctic - between 81°10''N and 76°10''N, approximately 144°W to approximately 114°W. May be extended eastwards within the latitude limits.',76.16,81.17,-144.0,-114.0,0);
INSERT INTO "extent" VALUES('EPSG','4066','Norway - onshore - 6°E to 12°E','Norway - onshore - between 6°E and 12°E.',57.93,65.76,6.0,12.0,0);
INSERT INTO "extent" VALUES('EPSG','4067','Norway - onshore - 12°E to 18°E','Norway - onshore - between 12°E and 18°E.',59.88,69.68,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','4068','Norway - onshore - 18°E to 24°E','Norway - onshore - between 18°E and 24°E.',68.04,71.08,18.0,24.01,0);
INSERT INTO "extent" VALUES('EPSG','4069','Norway - onshore - 24°E to 30°E','Norway - onshore - between 24°E and 30°E.',68.58,71.21,24.0,30.0,0);
INSERT INTO "extent" VALUES('EPSG','4066','Norway - onshore - 6°E to 12°E','Norway - onshore - between 6°E and 12°E.',57.9,67.58,6.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','4067','Norway - onshore - 12°E to 18°E','Norway - onshore - between 12°E and 18°E.',59.88,69.96,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','4068','Norway - onshore - 18°E to 24°E','Norway - onshore - between 18°E and 24°E.',68.04,71.15,18.0,24.01,0);
INSERT INTO "extent" VALUES('EPSG','4069','Norway - onshore - 24°E to 30°E','Norway - onshore - between 24°E and 30°E.',68.58,71.24,24.0,30.01,0);
INSERT INTO "extent" VALUES('EPSG','4070','Arctic - 81°10''N to 76°10''N, 114°W to 84°W','Arctic - between 81°10''N and 76°10''N, approximately 114°W to approximately 84°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-114.0,-84.0,0);
INSERT INTO "extent" VALUES('EPSG','4071','Arctic - 81°10''N to 76°10''N, 84°W to 54°W','Arctic - between 81°10''N and 76°10''N, approximately 84°W to approximately 54°W. May be extended westwards or eastwards within the latitude limits.',76.16,81.17,-84.0,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','4072','Arctic - 81°10''N to 76°10''N, Canada east of 84°W','Arctic - between 81°10''N and 76°10''N, Canada east of approximately 84°W. May be extended westwards within the latitude limits.',76.16,81.17,-84.0,-64.78,0);
@@ -3220,7 +3221,7 @@ INSERT INTO "extent" VALUES('EPSG','4240','USA - Iowa - Cedar Rapids','United St
INSERT INTO "extent" VALUES('EPSG','4241','USA - Iowa - Dubuque-Davenport','United States (USA) - Iowa - counties of Clinton; Dubuque; Jackson; Scott.',41.44,42.68,-91.14,-90.14,0);
INSERT INTO "extent" VALUES('EPSG','4242','USA - Iowa - Red Oak-Ottumwa','United States (USA) - Iowa - counties of Adams; Appanoose; Clarke; Davis; Decatur; Lucas; Monroe; Montgomery; Page; Ringgold; Taylor; Union; Wapello; Wayne.',40.57,41.17,-95.39,-92.17,0);
INSERT INTO "extent" VALUES('EPSG','4243','USA - Iowa - Fairfield','United States (USA) - Iowa - counties of Jefferson; Keokuk; Van Buren; Washington.',40.59,41.52,-92.42,-91.48,0);
INSERT INTO "extent" VALUES('EPSG','4244','USA - Iowa - Burlington','United States (USA) - Iowa - counties of Des Moines; Henry; Lee; Louisa; Muscatine.',40.37,41.6,-91.72,-90.78,0);
INSERT INTO "extent" VALUES('EPSG','4244','USA - Iowa - Burlington','United States (USA) - Iowa - counties of Des Moines; Henry; Lee; Louisa; Muscatine.',40.36,41.6,-91.72,-90.78,0);
INSERT INTO "extent" VALUES('EPSG','4245','French Southern Territories - Crozet west of 48°E','French Southern Territories - Crozet offshore west of 48°E.',-49.38,-43.12,45.37,48.01,0);
INSERT INTO "extent" VALUES('EPSG','4246','French Southern and Antarctic Territories','French Southern Territories - onshore and offshore: Amsterdam and St Paul, Crozet, Europa and Kerguelen. Antarctica - Adelie Land coastal area.',-67.13,-20.91,37.98,142.0,0);
INSERT INTO "extent" VALUES('EPSG','4247','French Southern Territories - Crozet 48°E to 54°E','French Southern Territories - Crozet onshore and offshore between 48°E to 54°E.',-49.82,-42.61,48.0,54.01,0);
@@ -3240,18 +3241,18 @@ INSERT INTO "extent" VALUES('EPSG','4260','USA - Indiana - Clinton','United Stat
INSERT INTO "extent" VALUES('EPSG','4261','USA - Indiana - Parke and Vermillion','United States (USA) - Indiana - counties of Parke and Vermillion.',39.6,40.15,-87.54,-87.0,0);
INSERT INTO "extent" VALUES('EPSG','4262','USA - Indiana - Montgomery and Putnam','United States (USA) - Indiana - counties of Montgomery and Putnam.',39.47,40.22,-87.1,-86.64,0);
INSERT INTO "extent" VALUES('EPSG','4263','USA - Indiana - Boone and Hendricks','United States (USA) - Indiana - counties of Boone and Hendricks.',39.6,40.19,-86.7,-86.24,0);
INSERT INTO "extent" VALUES('EPSG','4264','USA - Indiana - Vigo','United States (USA) - Indiana - Vigo county.',39.25,39.61,-87.62,-87.19,0);
INSERT INTO "extent" VALUES('EPSG','4264','USA - Indiana - Vigo','United States (USA) - Indiana - Vigo county.',39.25,39.61,-87.63,-87.19,0);
INSERT INTO "extent" VALUES('EPSG','4265','USA - Indiana - Clay','United States (USA) - Indiana - Clay county.',39.16,39.61,-87.25,-86.93,0);
INSERT INTO "extent" VALUES('EPSG','4266','USA - Indiana - Owen','United States (USA) - Indiana - Owen county.',39.16,39.48,-87.06,-86.63,0);
INSERT INTO "extent" VALUES('EPSG','4267','USA - Indiana - Monroe and Morgan','United States (USA) - Indiana - counties of Monroe and Morgan.',38.99,39.64,-86.69,-86.24,0);
INSERT INTO "extent" VALUES('EPSG','4268','USA - Indiana - Sullivan','United States (USA) - Indiana - Sullivan county.',38.9,39.26,-87.65,-87.24,0);
INSERT INTO "extent" VALUES('EPSG','4268','USA - Indiana - Sullivan','United States (USA) - Indiana - Sullivan county.',38.9,39.26,-87.66,-87.24,0);
INSERT INTO "extent" VALUES('EPSG','4269','USA - Indiana - Daviess and Greene','United States (USA) - Indiana - counties of Daviess and Greene.',38.49,39.18,-87.28,-86.68,0);
INSERT INTO "extent" VALUES('EPSG','4270','USA - Indiana - Knox','United States (USA) - Indiana - Knox county.',38.41,38.91,-87.75,-87.09,0);
INSERT INTO "extent" VALUES('EPSG','4270','USA - Indiana - Knox','United States (USA) - Indiana - Knox county.',38.41,38.91,-87.76,-87.09,0);
INSERT INTO "extent" VALUES('EPSG','4271','USA - Indiana - Dubois and Martin','United States (USA) - Indiana - counties of Dubois and Martin.',38.2,38.91,-87.08,-86.67,0);
INSERT INTO "extent" VALUES('EPSG','4272','USA - Indiana - Crawford, Lawrence, Orange','United States (USA) - Indiana - counties of Crawford, Lawrence and Orange.',38.1,39.0,-86.69,-86.24,0);
INSERT INTO "extent" VALUES('EPSG','4273','USA - Indiana - Gibson','United States (USA) - Indiana - Gibson county.',38.16,38.54,-87.98,-87.31,0);
INSERT INTO "extent" VALUES('EPSG','4273','USA - Indiana - Gibson','United States (USA) - Indiana - Gibson county.',38.16,38.54,-87.99,-87.31,0);
INSERT INTO "extent" VALUES('EPSG','4274','USA - Indiana - Pike and Warrick','United States (USA) - Indiana - counties of Pike and Warrick.',37.87,38.56,-87.48,-87.01,0);
INSERT INTO "extent" VALUES('EPSG','4275','USA - Indiana - Posey','United States (USA) - Indiana - Posey county.',37.77,38.24,-88.06,-87.68,0);
INSERT INTO "extent" VALUES('EPSG','4275','USA - Indiana - Posey','United States (USA) - Indiana - Posey county.',37.77,38.24,-88.1,-87.68,0);
INSERT INTO "extent" VALUES('EPSG','4276','USA - Indiana - Vanderburgh','United States (USA) - Indiana - Vanderburgh county.',37.82,38.17,-87.71,-87.44,0);
INSERT INTO "extent" VALUES('EPSG','4277','USA - Indiana - Spencer','United States (USA) - Indiana - Spencer county.',37.78,38.21,-87.27,-86.76,0);
INSERT INTO "extent" VALUES('EPSG','4278','USA - Indiana - Perry','United States (USA) - Indiana - Perry county.',37.84,38.27,-86.82,-86.43,0);
@@ -3366,8 +3367,8 @@ INSERT INTO "extent" VALUES('EPSG','4386','Kyrgyzstan - 70°01''E to 73°01''E',
INSERT INTO "extent" VALUES('EPSG','4387','Kyrgyzstan - 73°01''E to 76°01''E','Kyrgyzstan - between 73°01''E and 76°01''E.',39.35,43.22,73.01,76.02,0);
INSERT INTO "extent" VALUES('EPSG','4388','Kyrgyzstan - 76°01''E to 79°01''E','Kyrgyzstan - between 76°01''E and 79°01''E.',40.35,43.0,76.01,79.02,0);
INSERT INTO "extent" VALUES('EPSG','4389','Kyrgyzstan - east of 79°01''E','Kyrgyzstan - east of 79°01''E.',41.66,42.8,79.01,80.29,0);
INSERT INTO "extent" VALUES('EPSG','4390','UK - Britain and UKCS 49°45''N to 61°N, 9°W to 2°E','United Kingdom (UK) - offshore to boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland). Isle of Man onshore.',49.75,61.01,-9.0,2.01,0);
INSERT INTO "extent" VALUES('EPSG','4391','UK - offshore 49°45''N to 61°N, 9°W to 2°E','United Kingdom (UK) - offshore between 2km from shore and boundary of UKCS within 49°46''N to 61°01''N and 7°33''W to 3°33''E.',49.75,61.01,-9.0,2.01,0);
INSERT INTO "extent" VALUES('EPSG','4390','UK - Britain and UKCS 49°45''N to 61°N, 9°W to 2°E','United Kingdom (UK) - offshore to boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland). Isle of Man onshore.',49.75,61.01,-9.01,2.01,0);
INSERT INTO "extent" VALUES('EPSG','4391','UK - offshore 49°45''N to 61°N, 9°W to 2°E','United Kingdom (UK) - offshore between 2km from shore and boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E.',49.75,61.01,-9.01,2.01,0);
INSERT INTO "extent" VALUES('EPSG','4392','India - northeast','India - Arunachal Pradesh, Assam, Manipur, Meghalaya, Mizoram, Nagaland and Tripura.',21.94,29.47,89.69,97.42,0);
INSERT INTO "extent" VALUES('EPSG','4393','To be specified','Description of the extent of the CRS.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','4394','India - Andhra Pradesh and Telangana','India - Andhra Pradesh; Telangana; Yanam area of Pudacherry territory.',12.61,19.92,76.75,84.81,0);
@@ -3505,6 +3506,7 @@ INSERT INTO "extent" VALUES('EPSG','4525','Pacific - Guam and NMI - onshore','Gu
INSERT INTO "extent" VALUES('EPSG','4526','Saudi Arabia - 36°E to 42°E','Saudi Arabia - onshore and offshore - between 36°E and 42°E.',16.29,32.16,36.0,42.0,0);
INSERT INTO "extent" VALUES('EPSG','4527','Saudi Arabia - 42°E to 48°E','Saudi Arabia - onshore and offshore - between of 42°E and 48°E.',16.35,31.15,41.99,48.0,0);
INSERT INTO "extent" VALUES('EPSG','4528','Saudi Arabia - 48°E to 54°E','Saudi Arabia - onshore and offshore - between 48°E and 54°E.',17.94,28.94,47.99,54.01,0);
INSERT INTO "extent" VALUES('EPSG','4529','USA - California - San Francisco international airport','USA - California - San Francisco international airport.',37.58,37.66,-122.43,-122.33,0);
INSERT INTO "extent" VALUES('EPSG','4530','Latin America - Central America and South America','Latin America - Central America and South America, onshore and offshore.',-59.87,32.72,-122.19,-25.28,0);
INSERT INTO "extent" VALUES('EPSG','4531','Costa Rica - offshore Caribbean','Costa Rica - offshore - Caribbean sea.',9.6,11.77,-83.6,-81.43,0);
INSERT INTO "extent" VALUES('EPSG','4532','Costa Rica - offshore Pacific','Costa Rica - offshore Pacific ocean and onshore Coco Island.',2.15,11.11,-90.45,-82.92,0);
@@ -3550,7 +3552,7 @@ INSERT INTO "extent" VALUES('EPSG','4571','Argentina - south Santa Cruz east of
INSERT INTO "extent" VALUES('EPSG','4572','Argentina - 44°S to 47.5°S','Argentina - Chubut province south of approximately 44°S and Santa Cruz province north of approximately 47°30''S - Golfo San Jorge basin onshore and offshore.',-47.5,-43.99,-72.36,-63.24,0);
INSERT INTO "extent" VALUES('EPSG','4573','Argentina - onshore','Argentina - onshore.',-55.11,-21.78,-73.59,-53.65,0);
INSERT INTO "extent" VALUES('EPSG','4574','Brazil - west of 54°W and between 18°S and 27°30''S','Brazil - west of 54°W and between 18°S and 27°30''S.',-27.5,-17.99,-58.16,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','4575','Denmark - onshore Jutland, Funen, Zealand and Lolland','Denmark - onshore Jutland, Funen, Zealand and Lolland.',54.51,57.8,8.0,12.69,0);
INSERT INTO "extent" VALUES('EPSG','4575','Denmark - onshore Jutland, Funen, Zealand and Lolland','Denmark - onshore Jutland, Funen, Zealand and Lolland.',54.51,57.8,8.0,12.87,0);
INSERT INTO "extent" VALUES('EPSG','4576','Brazil - 54°W to 48°W and 15°S to 27°30''S','Brazil - onshore between 54°W and 48°W and between 15°S and 27°30''S.',-27.5,-14.99,-54.0,-47.99,0);
INSERT INTO "extent" VALUES('EPSG','4577','Argentina - 70.5°W to 67.5°W mainland onshore','Argentina - between 70°30''W and 67°30''W, onshore mainland.',-52.43,-24.08,-70.5,-67.49,0);
INSERT INTO "extent" VALUES('EPSG','4578','Argentina - 67.5°W to 64.5°W mainland onshore','Argentina - between 67°30''W and 64°30''W, onshore mainland.',-49.05,-21.78,-67.5,-64.49,0);
@@ -3579,12 +3581,12 @@ INSERT INTO "extent" VALUES('EPSG','4600','Spain - Canary Islands onshore east o
INSERT INTO "extent" VALUES('EPSG','4601','Spain - Canary Islands western east of 18°W','Spain - Canary Islands onshore - El Hierro east of 18°W, La Gomera, La Palma and Tenerife.',27.58,28.9,-18.06,-16.08,0);
INSERT INTO "extent" VALUES('EPSG','4602','Spain - Balearic Islands - Mallorca','Spain - Balearic Islands - Mallorca onshore.',39.07,40.02,2.23,3.55,0);
INSERT INTO "extent" VALUES('EPSG','4603','Spain - Balearic Islands - Menorca','Spain - Balearic Islands - Menorca onshore.',39.75,40.15,3.73,4.39,0);
INSERT INTO "extent" VALUES('EPSG','4604','Spain - Balearic Islands - Ibiza and Formentera','Spain - Balearic Islands - Ibiza and Formentera - onshore.',38.59,39.17,1.12,1.68,0);
INSERT INTO "extent" VALUES('EPSG','4604','Spain - Balearic Islands - Ibiza','Spain - Balearic Islands - Ibiza - onshore.',38.77,39.17,1.12,1.68,0);
INSERT INTO "extent" VALUES('EPSG','4605','Spain - mainland onshore and Ceuta','Spain - mainland and Ceuta - onshore.',35.82,43.82,-9.37,3.39,0);
INSERT INTO "extent" VALUES('EPSG','4606','Europe - British Isles - UK and Ireland onshore, UKCS','United Kingdom (UK) - offshore to boundary of UKCS within 49°45''N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland) and Northern Ireland. Ireland onshore. Isle of Man onshore.',49.75,61.01,-10.85,2.01,0);
INSERT INTO "extent" VALUES('EPSG','4607','UK - Glasgow to Kilmarnock','United Kingdom (UK) - on or related to the rail route from Glasgow to Kilmarnock via Barrhead and the branch to East Kilbride.',55.55,55.95,-4.65,-4.05,0);
INSERT INTO "extent" VALUES('EPSG','4608','Europe - EVRF2019','Europe - onshore - Andorra; Austria; Belarus; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; Russia – west of approximately 60°E; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Ukraine; Vatican City State.',35.95,77.07,-9.56,69.15,0);
INSERT INTO "extent" VALUES('EPSG','4609','Europe - ETRF EVRF2019','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.21,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','4609','Europe - ETRF EVRF2019','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.24,-9.56,31.59,0);
INSERT INTO "extent" VALUES('EPSG','4610','Argentina - Buenos Aires city','Argentina - autonomous city of Buenos Aires.',-34.71,-34.5,-58.54,-58.29,0);
INSERT INTO "extent" VALUES('EPSG','4611','Malaysia - East Malaysia - Sarawak onshore','Malaysia - East Malaysia - Sarawak onshore.',0.85,5.03,109.54,115.69,0);
INSERT INTO "extent" VALUES('EPSG','4612','Canada - Newfoundland','Canada - Newfoundland - onshore.',46.56,51.68,-59.48,-52.54,0);
@@ -3631,7 +3633,7 @@ INSERT INTO "extent" VALUES('EPSG','4652','UK - Cardiff to Lincoln','United King
INSERT INTO "extent" VALUES('EPSG','4653','Papua New Guinea - 156°E to 162°E','Papua New Guinea - between 156°E and 162°E, onshore and offshore.',-14.26,-1.11,156.0,162.01,0);
INSERT INTO "extent" VALUES('EPSG','4654','Papua New Guinea - east of 162°E','Papua New Guinea - east of 162°E to EEZ limit.',-4.36,-2.34,162.0,162.81,0);
INSERT INTO "extent" VALUES('EPSG','4655','UK - Manchester to Dore','United Kingdom (UK) - on or related to the rail route from Manchester via Ordsall Lane and the Hope Valley to Dore Junction.',53.25,53.55,-2.4,-1.39,0);
INSERT INTO "extent" VALUES('EPSG','4656','Norway - inshore and nearshore','Norway - inshore and nearshore.',57.75,71.38,4.08,31.77,0);
INSERT INTO "extent" VALUES('EPSG','4656','Norway - inshore and nearshore','Norway - inshore and nearshore.',57.75,71.39,4.08,31.77,0);
INSERT INTO "extent" VALUES('EPSG','4657','St Martin','St Martin - onshore and offshore.',17.87,18.19,-63.66,-62.73,0);
INSERT INTO "extent" VALUES('EPSG','4658','St Barthelemy','St Barthélemy - onshore and offshore.',17.64,18.32,-63.11,-62.21,0);
INSERT INTO "extent" VALUES('EPSG','4659','Italy - mainland west of 16°E','Italy - mainland northwest of approximately 16°E, including San Marino and Vatican City State.',39.65,47.1,6.62,16.53,0);
@@ -3643,4 +3645,164 @@ INSERT INTO "extent" VALUES('EPSG','4664','UK - Inverness to Thurso','United Kin
INSERT INTO "extent" VALUES('EPSG','4665','UK - Motherwell to Inverness','United Kingdom (UK) - on or related to the Scottish central mainline rail route from Motherwell through Perth and Pitlochry to Inverness.',55.7,57.55,-4.4,-3.3,0);
INSERT INTO "extent" VALUES('EPSG','4666','UK - Manchester, Wigan and Chester','United Kingdom (UK) - on or related to the rail route from Manchester via Wigan and Liverpool to Chester.',53.09,53.65,-3.15,-2.1,0);
INSERT INTO "extent" VALUES('EPSG','4667','Chile - west of 108°W','Chile - Easter Island onshore and offshore - west of 108°W.',-30.54,-23.72,-113.21,-108.0,0);
INSERT INTO "extent" VALUES('EPSG','4668','Europe - Ireland and UK offshore','Ireland and United Kingdom (UK) (including Isle of Man and Channel Islands) - inshore, nearshore and offshore.',47.42,63.89,-16.1,3.4,0);
INSERT INTO "extent" VALUES('EPSG','4669','USA - Amtrak NE corridor','United States (USA) - parts of Connecticut, Delaware, District of Columbia, Maryland, Massachusetts, New Jersey, New York, Pennsylvania, Rhode Island and Virginia on or related to the Amtrak northeast corridor rail route from Boston to Washington DC via New York and Philadelphia.',38.64,42.74,-78.51,-70.48,0);
INSERT INTO "extent" VALUES('EPSG','4670','Japan - zone I - onshore mainland','Japan - onshore - Kyushu west of approximately 130°E - Nagasaki-ken',32.51,33.49,129.3,130.46,0);
INSERT INTO "extent" VALUES('EPSG','4671','Japan - zone II - onshore mainland','Japan - onshore - Kyushu east of approximately 130°E - Fukuoka-ken; Saga-ken; Kumamoto-ken; Oita-ken; Miyazaki-ken; Kagoshima-ken on Kyushu (except for area within Japan Plane Rectangular Coordinate System zone I).',30.94,33.99,129.76,132.05,0);
INSERT INTO "extent" VALUES('EPSG','4672','Japan - zone III - onshore mainland','Japan - onshore - Honshu west of approximately 133°15''E - Yamaguchi-ken; Shimane-ken; Hiroshima-ken.',33.72,35.64,130.81,133.49,0);
INSERT INTO "extent" VALUES('EPSG','4673','Japan - zone VIII - onshore mainland','Japan - onshore - Honshu between approximately 137°45''E and 139°E - Niigata-ken on Honshu; Nagano-ken; Yamanashi-ken; Shizuoka-ken.',34.54,38.58,137.32,139.91,0);
INSERT INTO "extent" VALUES('EPSG','4674','Japan - zone IX - onshore mainland','Japan - onshore - Honshu - Tokyo-to. (Excludes offshore island areas of Tokyo-to).',34.84,37.98,138.4,141.11,0);
INSERT INTO "extent" VALUES('EPSG','4675','Japan - zone XI - onshore mainland','Japan - onshore - Hokkaido west of approximately 141°E - Otaru city; Usu-gun and Abuta-gun of Iburi-shicho; Hiyama-shicho; Shiribeshi-shicho; Oshima-shicho.',41.34,43.42,139.7,141.46,0);
INSERT INTO "extent" VALUES('EPSG','4676','Japan - zone XII - onshore mainland','Japan - onshore - Hokkaido between approximately 141°E and 143°E - Sapporo city; Asahikawa city; Wakkanai city; Rumoi city; Bibai city; Yubari city; Iwamizawa city; Tomakomai city; Muroran city; Shibetsu city; Nayoro city; Ashibetsu city; Akabira city; Mikasa city; Takikawa city; Sunagawa city; Ebetsu city; Chitose city; Utashinai city; Fukagawa city; Monbetsu city; Furano city; Noboribetsu city; Eniwa city; Ishikari-shicho; Monbetsu-gun of Abashiri-shicho; Kamikawa-shicho; Soya-shicho; Hidaka-shicho; Iburi-shicho (except Usu-gun and Abuta-gun); Sorachi-shicho; Rumoi-shicho.',42.15,45.54,141.0,143.61,0);
INSERT INTO "extent" VALUES('EPSG','4677','UK - Crewe to Holyhead','United Kingdom (UK) - on or related to the rail route from Crewe via Chester to Holyhead.',53.02,53.46,-4.71,-2.28,0);
INSERT INTO "extent" VALUES('EPSG','4678','UK - Chester to Shrewsbury','United Kingdom (UK) - on or related to the rail route from from Chester via Wrexham to Shrewsbury.',52.5,53.26,-3.16,-2.65,0);
INSERT INTO "extent" VALUES('EPSG','4679','UK - Shrewsbury to Crewe','United Kingdom (UK) - on or related to the rail route from Shrewsbury to Crewe.',52.65,53.16,-2.91,-2.3,0);
INSERT INTO "extent" VALUES('EPSG','4680','UK - Oxford to Worcester','United Kingdom (UK) - on or related to the rail route from Oxford to Worcester.',51.65,52.26,-2.31,-1.15,0);
INSERT INTO "extent" VALUES('EPSG','4681','UK - Didcot to Banbury','United Kingdom (UK) - on or related to the rail route from Didcot to Banbury.',51.57,52.11,-1.46,-1.15,0);
INSERT INTO "extent" VALUES('EPSG','4682','UK - London to Leamington Spa','United Kingdom (UK) - on or related to the rail route from London (Marylebone) to Leamington Spa.',51.45,52.91,-2.26,-0.05,0);
INSERT INTO "extent" VALUES('EPSG','4683','UK - Swansea to Fishguard','United Kingdom (UK) - on or related to the rail routes from Swansea to Pembroke Dock, Milford Haven and Fishguard.',51.55,52.06,-5.16,-3.6,0);
INSERT INTO "extent" VALUES('EPSG','4684','UK - Cardiff and the valleys','United Kingdom (UK) - on or related to the rail routes around Cardiff and the valleys.',51.35,51.81,-3.6,-3.12,0);
INSERT INTO "extent" VALUES('EPSG','4685','UK - London to Swansea','United Kingdom (UK) - on or related to the rail route from London (Paddington) to Swansea.',51.25,52.06,-4.26,-0.1,0);
INSERT INTO "extent" VALUES('EPSG','4686','UK - Dovey Junction to Pwllheli','United Kingdom (UK) - on or related to the rail route from Dovey Junction to Pwllheli.',52.45,53.01,-4.51,-3.8,0);
INSERT INTO "extent" VALUES('EPSG','4687','UK - Shrewsbury to Aberystwyth','United Kingdom (UK) - on or related to the rail route from Shrewsbury to Aberystwyth.',52.37,52.77,-4.16,-2.6,0);
INSERT INTO "extent" VALUES('EPSG','4688','UK - Okehampton to Penstone','United Kingdom (UK) - on or related to the rail route from Okehampton to Penstone.',50.65,50.86,-4.11,-3.6,0);
INSERT INTO "extent" VALUES('EPSG','4689','UK - Reading to Penzance','United Kingdom (UK) - on or related to the rail route from Reading via Newbury to Penzance.',50.05,51.71,-5.63,-0.85,0);
INSERT INTO "extent" VALUES('EPSG','4690','UK - London to Fishguard','United Kingdom (UK) - on or related to the rail routes from London (Paddington) to Swansea; Swansea to Pembroke Dock, Milford Haven and Fishguard; and around Cardiff and the valleys.',51.25,52.06,-5.16,-0.1,0);
INSERT INTO "extent" VALUES('EPSG','4691','Portugal - mainland - nearshore','Portugal - mainland - nearshore.',36.9,41.88,-9.57,-7.39,0);
INSERT INTO "extent" VALUES('EPSG','4692','Portugal - mainland - nearshore - Tagus estuary','Portugal - mainland - nearshore - Tagus estuary.',38.58,38.96,-9.46,-8.92,0);
INSERT INTO "extent" VALUES('EPSG','4693','Denmark - Copenhagen','Denmark - onshore - Copenhagen and surrounding area.',55.51,55.82,12.23,12.73,0);
INSERT INTO "extent" VALUES('EPSG','4694','Denmark - northern Schleswig','Denmark - onshore northern Schleswig and surrounding islands (i.e. Jutland south of the pre-1920 border near the Kongea river).',54.8,55.47,8.37,10.16,0);
INSERT INTO "extent" VALUES('EPSG','4695','Portugal - Madeira and Desertas islands - nearshore','Portugal - Madeira and Desertas islands - nearshore.',32.35,32.93,-17.33,-16.4,0);
INSERT INTO "extent" VALUES('EPSG','4696','Portugal - Porto Santo island - nearshore','Portugal - Porto Santo island (Madeira archipelago) - nearshore.',32.97,33.16,-16.46,-16.23,0);
INSERT INTO "extent" VALUES('EPSG','4697','Portugal - Azores W - Flores, Corvo - nearshore','Portugal - western Azores - Flores and Corvo islands - nearshore.',39.32,39.78,-31.34,-31.01,0);
INSERT INTO "extent" VALUES('EPSG','4698','Portugal - Azores C - Faial - nearshore','Portugal - central Azores - Faial island - nearshore.',38.46,38.7,-28.91,-28.53,0);
INSERT INTO "extent" VALUES('EPSG','4699','Portugal - Azores C - Pico nearshore','Portugal - central Azores - Pico island - nearshore.',38.33,38.62,-28.61,-27.96,0);
INSERT INTO "extent" VALUES('EPSG','4700','Portugal - Azores C - S Jorge - nearshore','Portugal - central Azores - Sao Jorge island - nearshore.',38.48,38.81,-28.39,-27.68,0);
INSERT INTO "extent" VALUES('EPSG','4701','USA - Illinois - Carroll, Jo Daviess, Stephenson','United States (USA) - Illinois - counties of Carroll, Jo Daviess and Stephenson.',41.92,42.51,-90.66,-89.39,0);
INSERT INTO "extent" VALUES('EPSG','4702','USA - Illinois - Lee, Ogle, Winnebago','United States (USA) - Illinois - counties of Lee, Ogle and Winnebago.',41.58,42.51,-89.69,-88.93,0);
INSERT INTO "extent" VALUES('EPSG','4703','USA - Illinois - Boone, Dekalb, Kane, Kendall, McHenry','United States (USA) - Illinois - counties of Boone, Dekalb, Kane, Kendall and McHenry.',41.45,42.5,-88.95,-88.19,0);
INSERT INTO "extent" VALUES('EPSG','4704','USA - Illinois - Cook, DuPage, Lake','United States (USA) - Illinois - counties of Cook, DuPage and Lake.',41.46,42.5,-88.27,-87.52,0);
INSERT INTO "extent" VALUES('EPSG','4705','USA - Illinois - Rock Island','United States (USA) - Illinois - Rock Island county.',41.32,41.79,-91.08,-90.15,0);
INSERT INTO "extent" VALUES('EPSG','4706','USA - Illinois - Henry, Whiteside','United States (USA) - Illinois - counties of Henry and Whiteside.',41.14,41.94,-90.44,-89.62,0);
INSERT INTO "extent" VALUES('EPSG','4707','USA - Illinois - Bureau, Grundy, LaSalle, Putnam','United States (USA) - Illinois - counties of Bureau, Grundy, LaSalle and Putnam.',40.92,41.64,-89.87,-88.24,0);
INSERT INTO "extent" VALUES('EPSG','4708','USA - Illinois - Kankakee, Will','United States (USA) - Illinois - counties of Kankakee and Will.',40.99,41.73,-88.27,-87.52,0);
INSERT INTO "extent" VALUES('EPSG','4709','USA - Illinois - Henderson, Mercer, Warren','United States (USA) - Illinois - counties of Henderson, Mercer and Warren.',40.62,41.34,-91.19,-90.43,0);
INSERT INTO "extent" VALUES('EPSG','4710','USA - Illinois - Fulton, Knox, Stark','United States (USA) - Illinois - counties of Fulton, Knox and Stark.',40.18,41.24,-90.46,-89.63,0);
INSERT INTO "extent" VALUES('EPSG','4711','USA - Illinois - Peoria, Tazewell','United States (USA) - Illinois - counties of Peoria and Tazewell.',40.31,40.98,-89.99,-89.26,0);
INSERT INTO "extent" VALUES('EPSG','4712','USA - Illinois - Marshall, Woodford','United States (USA) - Illinois - counties of Marshall and Woodford.',40.59,41.15,-89.64,-88.92,0);
INSERT INTO "extent" VALUES('EPSG','4713','USA - Illinois - McLean','United States (USA) - Illinois - McLean county.',40.28,40.76,-89.27,-88.45,0);
INSERT INTO "extent" VALUES('EPSG','4714','USA - Illinois - Livingston','United States (USA) - Illinois - Livingston county.',40.61,41.12,-88.94,-88.23,0);
INSERT INTO "extent" VALUES('EPSG','4715','USA - Illinois - Ford, Iroquois','United States (USA) - Illinois - counties of Ford and Iroquois.',40.39,41.02,-88.46,-87.52,0);
INSERT INTO "extent" VALUES('EPSG','4716','USA - Illinois - Adams, Hancock','United States (USA) - Illinois - counties of Adams and Hancock.',39.75,40.64,-91.52,-90.9,0);
INSERT INTO "extent" VALUES('EPSG','4717','USA - Illinois - Brown, McDonough, Schuyler','United States (USA) - Illinois - counties of Brown, McDonough and Schuyler.',39.83,40.64,-90.92,-90.19,0);
INSERT INTO "extent" VALUES('EPSG','4718','USA - Illinois - Cass, Logan, Mason, Menard','United States (USA) - Illinois - counties of Cass, Logan, Mason and Menard.',39.87,40.44,-90.59,-89.14,0);
INSERT INTO "extent" VALUES('EPSG','4719','USA - Illinois - Dewitt, Macon, Moultrie, Piatt, Shelby','United States (USA) - Illinois - counties of Dewitt, Macon, Moultrie, Piatt and Shelby.',39.21,40.29,-89.22,-88.46,0);
INSERT INTO "extent" VALUES('EPSG','4720','USA - Illinois - Champaign, Vermilion','United States (USA) - Illinois - counties of Champaign and Vermilion.',39.86,40.5,-88.47,-87.52,0);
INSERT INTO "extent" VALUES('EPSG','4721','USA - Illinois - Morgan, Pike, Scott','United States (USA) - Illinois - counties of Morgan, Pike and Scott.',39.39,39.88,-91.38,-89.92,0);
INSERT INTO "extent" VALUES('EPSG','4722','USA - Illinois - Sangamon','United States (USA) - Illinois - Sangamon county.',39.52,39.98,-90.0,-89.21,0);
INSERT INTO "extent" VALUES('EPSG','4723','USA - Illinois - Coles, Douglas, Edgar','United States (USA) - Illinois - counties of Coles, Douglas and Edgar.',39.37,39.89,-88.48,-87.53,0);
INSERT INTO "extent" VALUES('EPSG','4724','USA - Illinois - Calhoun, Jersey','United States (USA) - Illinois - counties of Calhoun and Jersey.',38.86,39.41,-90.94,-90.14,0);
INSERT INTO "extent" VALUES('EPSG','4725','USA - Illinois - Greene, Macoupin','United States (USA) - Illinois - counties of Greene and Macoupin.',38.99,39.53,-90.63,-89.69,0);
INSERT INTO "extent" VALUES('EPSG','4726','USA - Illinois - Christian, Montgomery','United States (USA) - Illinois - counties of Christian and Montgomery.',38.99,39.83,-89.71,-89.02,0);
INSERT INTO "extent" VALUES('EPSG','4727','USA - Illinois - Bond, Effingham, Fayette','United States (USA) - Illinois - counties of Bond, Effingham and Fayette.',38.73,39.22,-89.64,-88.36,0);
INSERT INTO "extent" VALUES('EPSG','4728','USA - Illinois - Clark, Crawford, Cumberland, Jasper','United States (USA) - Illinois - counties of Clark, Crawford, Cumberland and Jasper.',38.84,39.49,-88.48,-87.51,0);
INSERT INTO "extent" VALUES('EPSG','4729','USA - Illinois - Madison, Monroe, St Clair','United States (USA) - Illinois - counties of Madison, Monroe and St Clair.',38.08,39.0,-90.38,-89.59,0);
INSERT INTO "extent" VALUES('EPSG','4730','USA - Illinois - Clinton, Jefferson, Marion, Washington','United States (USA) - Illinois - counties of Clinton, Jefferson, Marion and Washington.',38.12,38.83,-89.71,-88.69,0);
INSERT INTO "extent" VALUES('EPSG','4731','USA - Illinois - Olney zone','United States (USA) - Illinois - counties of Clay, Edwards, Lawrence, Richland, Wabash and Wayne.',38.23,38.92,-88.71,-87.49,0);
INSERT INTO "extent" VALUES('EPSG','4732','USA - Illinois - Carbondale zone','United States (USA) - Illinois - counties of Franklin, Gallatin, Hamilton, Jackson, Perry, Randolph, Saline, White and Williamson.',37.56,38.26,-90.21,-87.91,0);
INSERT INTO "extent" VALUES('EPSG','4733','USA - Illinois - Metropolis zone','United States (USA) - Illinois - counties of Alexander, Hardin, Johnson, Massac, Pope, Pulaski and Union.',36.97,37.61,-89.53,-88.06,0);
INSERT INTO "extent" VALUES('EPSG','4734','Portugal - Azores C - Graciosa - nearshore','Portugal - central Azores - Graciosa island - nearshore.',38.95,39.15,-28.14,-27.88,0);
INSERT INTO "extent" VALUES('EPSG','4735','Portugal - Azores C - Terceira - nearshore','Portugal - central Azores - Terceira island - nearshore.',38.58,38.86,-27.45,-26.97,0);
INSERT INTO "extent" VALUES('EPSG','4736','Portugal - Azores E - S Miguel - nearshore','Portugal - eastern Azores - Sao Miguel island - nearshore.',37.65,37.97,-25.92,-25.07,0);
INSERT INTO "extent" VALUES('EPSG','4737','Portugal - Azores E - Santa Maria and Formigas - nearshore','Portugal - eastern Azores - Santa Maria and Formigas islands - nearshore.',36.87,37.33,-25.25,-24.71,0);
INSERT INTO "extent" VALUES('EPSG','4738','Portugal - offshore','Portugal - offshore.',29.24,43.07,-35.58,-7.25,0);
INSERT INTO "extent" VALUES('EPSG','4739','Spain - Balearic Islands - Formentera','Spain - Balearic Islands - Formentera - onshore.',38.59,38.86,1.31,1.65,0);
INSERT INTO "extent" VALUES('EPSG','4740','Spain - Melilla','Spain - Melilla onshore.',35.26,35.38,-2.98,-2.88,0);
INSERT INTO "extent" VALUES('EPSG','4741','Spain - Alboran','Spain - Alboran island - onshore.',35.88,36.0,-3.1,-2.96,0);
INSERT INTO "extent" VALUES('EPSG','4742','Netherlands - offshore and nearshore ','Netherlands - offshore North Sea and nearshore.',51.32,55.77,2.53,7.21,0);
INSERT INTO "extent" VALUES('EPSG','4743','UK - Coventry','United Kingdom (UK) - in and around the area of Coventry city centre and the route to Birmingham airport.',52.3,52.5,-1.85,-1.3,0);
INSERT INTO "extent" VALUES('EPSG','4744','Europe - Brenner','Austria and Italy - on or related to the Brenner Base Tunnel rail route from Innsbruck to Fortezza (Franzensfeste).',46.45,47.33,11.04,11.91,0);
INSERT INTO "extent" VALUES('EPSG','4745','Africa - Equi7','Africa and the Arabian peninsula.',-43.89,38.8,-31.68,79.3,0);
INSERT INTO "extent" VALUES('EPSG','4746','Antarctica - Equi7','Antarctica.',-90.0,-34.47,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','4747','Asia - Equi7','Asia including Maldives and British Indian Ocean Territory.',-10.8,83.67,31.45,-168.43,0);
INSERT INTO "extent" VALUES('EPSG','4748','Europe - Equi7','Europe including Russia west of the Ural Mountains.',29.24,83.67,-42.52,51.73,0);
INSERT INTO "extent" VALUES('EPSG','4749','North America - Equi7','North America including Greenland, the Caribbean and Central America, together with circum-polar area north of 83°40''N. Excluding the circum-polar area, the longitude extent is from 167.65° in west across the 180° meridian to 15.72° in east.',7.98,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','4750','South America - Equi7','South America including Panama.',-59.87,30.31,-124.82,-14.58,0);
INSERT INTO "extent" VALUES('EPSG','4751','Oceania - Equi7','Australasia and the western Pacific Ocean.',-60.56,21.57,72.37,-121.05,0);
INSERT INTO "extent" VALUES('EPSG','4752','Canada - onshore south of 60°N','Canada - onshore south of 60°N - Alberta, British Columbia (BC), Manitoba, New Brunswick (NB), Newfoundland and Labrador, Nova Scotia (NS), Ontario, Prince Edward Island (PEI), Quebec and Saskatchewan.',41.67,60.01,-139.04,-52.54,0);
INSERT INTO "extent" VALUES('EPSG','4753','Canada - onshore north of 60°N','Canada - onshore north of 60°N - Newfoundland and Labrador; Northwest Territories (NWT); Nunavut; Quebec; Yukon.',59.99,83.17,-141.01,-60.72,0);
INSERT INTO "extent" VALUES('EPSG','4754','Canada - onshore','Canada - onshore - Alberta; British Columbia (BC); Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward Island (PEI); Quebec; Saskatchewan; Yukon.',41.67,83.17,-141.01,-52.54,0);
INSERT INTO "extent" VALUES('EPSG','4755','Europe - ETRF by country','Europe - onshore and offshore: Albania; Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Faroe Islands; Finland; France; Germany; Gibraltar; Greece; Hungary; Ireland; Italy; Kosovo; Latvia; Liechtenstein; Lithuania; Luxembourg; Malta; Moldova; Monaco; Montenegro; Netherlands; North Macedonia; Norway including Svalbard and Jan Mayen; Poland; Portugal - mainland; Romania; San Marino; Serbia; Slovakia; Slovenia; Spain - mainland and Balearic islands; Sweden; Switzerland; United Kingdom (UK) including Channel Islands and Isle of Man; Vatican City State.',33.26,84.73,-16.1,38.01,0);
INSERT INTO "extent" VALUES('EPSG','4756','Denmark - offshore','Denmark - offshore.',54.36,58.27,3.25,16.51,0);
INSERT INTO "extent" VALUES('EPSG','4757','BES Islands - Saba onshore','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Saba - onshore.',17.56,17.71,-63.31,-63.16,0);
INSERT INTO "extent" VALUES('EPSG','4758','Europe - 6°W to 0°W and ETRF','Europe between 6°W and 0°W and approximately 35°15''N to 80°30''N.',35.26,80.49,-6.01,0.0,0);
INSERT INTO "extent" VALUES('EPSG','4759','Europe - 0°E to 6°E and ETRF','Europe between 0°E and 6°E and approximately 37°N to 82°27''N.',37.0,82.45,0.0,6.01,0);
INSERT INTO "extent" VALUES('EPSG','4760','Europe - 6°E to 12°E and ETRF','Europe between 6°E and 12°E and approximately 36°30''N to 84°N.',36.53,84.01,6.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','4761','Europe - 12°E to 18°E and ETRF','Europe between 12°E and 18°E and approximately 34°30''N to 84°N.',34.49,84.01,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','4762','Europe - 18°E to 24°E and ETRF','Europe between 18°E and 24°E and approximately 33°36''N to 84°N.',33.59,84.01,18.0,24.01,0);
INSERT INTO "extent" VALUES('EPSG','4763','Europe - 24°E to 30°E and ETRF','Europe between 24°E and 30°E and approximately 33°15''N to 84°N.',33.26,84.01,24.0,30.01,0);
INSERT INTO "extent" VALUES('EPSG','4764','Europe - 30°E to 36°E and ETRF','Europe between 30°E and 36°E and approximately 33°55''N to 84°N.',33.91,84.01,30.0,36.01,0);
INSERT INTO "extent" VALUES('EPSG','4765','Europe - 12°W to 6°W and ETRF','Europe between 12°W and 6°W and approximately 34°50''N to 74°10''N.',34.91,74.13,-12.01,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','4766','Europe - 12°W to 6°W and ETRF by country','Europe between 12°W and 6°W and approximately 34°50''N to 74°10''N: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - onshore and offshore; Portugal - mainland - onshore and offshore; Spain - mainland - onshore and offshore; United Kingdom - UKCS offshore.',34.91,74.13,-12.01,-6.0,0);
INSERT INTO "extent" VALUES('EPSG','4767','Europe - 6°W to 0°W and ETRF by country','Europe between 6°W and 0°W and approximately 35°15''N to 80°30''N: Faroe Islands - offshore; Ireland - offshore; Jan Mayen - offshore; Norway including Svalbard - offshore; Spain - mainland - onshore and offshore.',35.26,80.49,-6.01,0.0,0);
INSERT INTO "extent" VALUES('EPSG','4768','Europe - 0°E to 6°E and ETRF by country','Europe between 0°E and 6°E and approximately 37°N to 82°27''N: Andorra; Denmark - offshore; Germany - offshore; Jan Mayen - offshore; Norway including Svalbard - onshore and offshore; Spain - mainland and Balearic islands - onshore and offshore.',37.0,82.45,0.0,6.01,0);
INSERT INTO "extent" VALUES('EPSG','4769','Europe - 6°E to 12°E and ETRF by country','Europe between 6°E and 12°E and approximately 36°30''N to 84°N: Austria; Denmark - onshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore; Spain - offshore.',36.53,84.01,6.0,12.01,0);
INSERT INTO "extent" VALUES('EPSG','4770','Europe - 12°E to 18°E and ETRF by country','Europe between 12°E and 18°E and approximately 34°30''N to 84°N.: Austria; Croatia; Denmark - offshore and offshore; Germany - onshore and offshore; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',34.49,84.01,12.0,18.01,0);
INSERT INTO "extent" VALUES('EPSG','4771','Europe - 18°E to 24°E and ETRF by country','Europe between 18°E and 24°E and approximately 33°36''N to 84°N: Bulgaria; Croatia; Italy - onshore and offshore; Norway including Svalbard - onshore and offshore.',33.59,84.01,18.0,24.01,0);
INSERT INTO "extent" VALUES('EPSG','4772','Europe - 24°E to 30°E and ETRF by country','Europe between 24°E and 30°E and approximately 33°15''N to 84°N: Bulgaria - onshore and offshore; Norway including Svalbard - onshore and offshore.',33.26,84.01,24.0,30.01,0);
INSERT INTO "extent" VALUES('EPSG','4773','Europe - 30°E to 36°E and ETRF by country','Europe between 30°E and 36°E and approximately 33°55''N to 84°N: Bulgaria - offshore; Norway including Svalbard - onshore and offshore.',33.91,84.01,30.0,36.01,0);
INSERT INTO "extent" VALUES('EPSG','4774','UK - London to Edinburgh','United Kingdom (UK) - on or related to the east coast mainline rail route from London (Kings Cross) via Newcastle to Edinburgh.',51.45,56.1,-3.45,0.05,0);
INSERT INTO "extent" VALUES('EPSG','4775','UK - London to Glasgow','United Kingdom (UK) - on or related to the west coast mainline rail route from London (Euston) via Carlisle to Glasgow.',51.4,55.92,-4.33,-0.04,0);
INSERT INTO "extent" VALUES('EPSG','4776','Greenland - offshore','Greenland - offshore.',56.38,87.03,-75.0,7.99,0);
INSERT INTO "extent" VALUES('EPSG','4777','Brazil - Porto Alegre municipality','Brazil - Porto Alegre municipality.',-30.27,-29.93,-51.3,-51.01,0);
INSERT INTO "extent" VALUES('EPSG','4778','Canada - CGVD28(HTv2.0)','Canada - onshore and offshore between 41°N and 84°N and west of 48°W - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon.',41.0,84.0,-141.01,-48.0,0);
INSERT INTO "extent" VALUES('EPSG','4779','Europe - Baltic Sea','Denmark, Estonia, Finland, Germany, Latvia, Lithuania, Norway, Poland, Russia and Sweden - offshore Baltic Sea including Skagerrak east of 8°30''E, Kattegat, Gulf of Bothnia, and Gulf of Finland.',53.88,65.92,8.5,30.23,0);
INSERT INTO "extent" VALUES('EPSG','4780','Vietnam - offshore','Vietnam - offshore.',5.67,21.45,102.2,112.55,0);
INSERT INTO "extent" VALUES('EPSG','4781','Finland - west of 24°E','Finland - west of 24°E, onshore and offshore.',58.84,69.33,19.08,24.0,0);
INSERT INTO "extent" VALUES('EPSG','4782','Finland - 24°E to 30°E','Finland - between 24°E and 30°E, onshore and offshore.',59.64,70.09,23.99,30.0,0);
INSERT INTO "extent" VALUES('EPSG','4783','Finland - east of 30°E','Finland - east of 30°E.',61.73,67.71,30.0,31.59,0);
INSERT INTO "extent" VALUES('EPSG','4784','Uzbekistan - west of 60°E','Uzbekistan - west of 60°E.',41.25,45.58,55.99,60.0,0);
INSERT INTO "extent" VALUES('EPSG','4785','Uzbekistan - 60°E to 66°E','Uzbekistan - between 60°E and 66°E.',38.22,44.82,60.0,66.0,0);
INSERT INTO "extent" VALUES('EPSG','4786','Uzbekistan - 66°E to 72°E','Uzbekistan - between 66°E and 72°E.',37.18,43.0,66.0,72.0,0);
INSERT INTO "extent" VALUES('EPSG','4787','Uzbekistan - east of 72°E','Uzbekistan - east of 72°E.',40.26,41.21,72.0,73.17,0);
INSERT INTO "extent" VALUES('EPSG','4788','BES Islands - Sint Eustatius - onshore','Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Sint Eustatius - onshore.',17.41,17.58,-63.05,-62.88,0);
INSERT INTO "extent" VALUES('EPSG','4789','Brazil - Ribeirao Preto municipality','Brazil - Ribeirao Preto municipality, Sao Paulo state.',-21.37,-21.06,-47.99,-47.64,0);
INSERT INTO "extent" VALUES('EPSG','4790','Uganda - north of equator and east of 30°E','Uganda - north of equator and east of 30°E.',0.0,4.23,30.0,35.01,0);
INSERT INTO "extent" VALUES('EPSG','4791','Uganda - south of equator and east of 30°E','Uganda - south of equator and east of 30°E.',-1.45,0.0,30.0,33.98,0);
INSERT INTO "extent" VALUES('EPSG','4792','Uganda - south of equator and west of 30°E','Uganda - south of equator and west of 30°E.',-1.48,0.0,29.57,30.0,0);
INSERT INTO "extent" VALUES('EPSG','4793','Liberia - east of 12°W','Liberia - onshore, and offshore east of 12°W.',1.02,8.52,-12.0,-7.36,0);
INSERT INTO "extent" VALUES('EPSG','4794','Liberia - west of 12°W','Liberia - offshore west of 12°W.',3.12,6.4,-13.59,-12.0,0);
INSERT INTO "extent" VALUES('EPSG','4795','Europe - Nordic and Baltic countries','Denmark, Estonia, Finland, Latvia, Lithuania, and Sweden - onshore and offshore; Norway - onshore, nearshore, and offshore southeast of a line joining Haugesund and the western limit of the Norway-Denmark maritime boundary.',53.89,71.39,3.24,31.77,0);
INSERT INTO "extent" VALUES('EPSG','4797','Georgia - west of 42°E','Georgia - west of 42°E - onshore and offshore.',41.43,43.59,38.97,42.0,0);
INSERT INTO "extent" VALUES('EPSG','4798','Georgia - east of 42°E','Georgia - east of 42°E - onshore and offshore.',41.04,43.24,41.99,46.72,0);
INSERT INTO "extent" VALUES('EPSG','4799','UK - Oxford to Cambridge','United Kingdom (UK) - on or related to the East West Rail (Phases 2 and 3) route from Oxford to Cambridge via Bicester, Bletchley and Bedford, including the route from Claydon Junction to Aylesbury and Princes Risborough.',51.7,52.33,-1.43,0.27,0);
INSERT INTO "extent" VALUES('EPSG','4800','Papua New Guinea - onshore and offshore - Western, Gulf and Central provinces','Papua New Guinea - onshore and offshore - Western Province, Gulf Province, Central Province, National Capital District and maritime zones offshore of these provinces.',-12.0,-4.98,139.2,149.67,0);
INSERT INTO "extent" VALUES('EPSG','4801','UK - Sneatonthorpe to Redcar','United Kingdom (UK) - covering the surface level works associated with the Woodsmith mining project between Sneatonthorpe and Wilton works, Redcar.',54.35,54.7,-1.25,-0.45,0);
INSERT INTO "extent" VALUES('EPSG','4802','Norway - onshore and nearshore','Norway - onshore, nearshore, and offshore southeast of a line from Haugesund to the western limit of the southern maritime boundary.',56.08,71.39,3.24,31.77,0);
INSERT INTO "extent" VALUES('EPSG','4803','North America - Canada, USA (Conus+AK)','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. United States (USA) - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming',23.81,86.46,167.65,-40.73,0);
INSERT INTO "extent" VALUES('EPSG','4805','Germany - Lower Saxony - Asse','Germany - Lower Saxony - Asse mining area.',52.11,52.16,10.6,10.7,0);
INSERT INTO "extent" VALUES('EPSG','4806','USA - CONUS and Alaska - onshore and offshore','United States (USA) - CONUS and Alaska - onshore and offshore - Alabama; Alaska; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming.',23.81,74.71,167.65,-65.69,0);
INSERT INTO "extent" VALUES('EPSG','4807','USA - Gulf OCS - Texas shelf south','USA - Gulf OCS - Texas shelf south of approximately 27°50''N - leasing areas Mustang Island, North Padre Island and South Padre Island.',25.97,27.84,-97.22,-95.36,0);
INSERT INTO "extent" VALUES('EPSG','4808','USA - Gulf OCS - Texas shelf north','USA - Gulf OCS - Texas shelf north of approximately 27°48''N - leasing areas Matagorda Island, Brazos, Galveston, High Island; Sabine Pass. ',27.79,29.54,-96.86,-93.41,0);
INSERT INTO "extent" VALUES('EPSG','4809','USA - Gulf OCS - Louisiana shelf','USA - Gulf OCS - Louisiana shelf - leasing areas Sabine Pass; West Cameron, East Cameron, Vermilion, South Marsh Island, Eugene Island, Ship Shoal, South Pelto, Bay Marchand, South Timbalier, Grand Isle, West Delta, South Pass, Breton Sound, Main Pass, Chandeleur.',27.82,30.02,-93.82,-87.76,0);
INSERT INTO "extent" VALUES('EPSG','4810','USA - GoM OCS - west of 96°W deep water','USA - Gulf outer continental shelf (GoM OCS) deep water west of approxinately 96°W - protraction areas Corpus Christi, Port Isabel.',26.0,27.61,-96.52,-95.87,0);
INSERT INTO "extent" VALUES('EPSG','4811','USA - GoM OCS - 96°W to 90°W deep water','USA - Gulf outer continental shelf (GoM OCS) deep water between approxinately 96°W and 90°W - protraction areas East Breaks, Alaminos Canyon, Garden Banks, Keathley Canyon, Sigsbee Escarpment, Ewing Bank, Green Canyon, Walker Ridge, Amery Terrace.',25.61,28.69,-95.92,-89.86,0);
INSERT INTO "extent" VALUES('EPSG','4812','USA - GoM OCS - 90°W to 84°W deep water','USA - Gulf outer continental shelf (GoM OCS) deep water between approxinately 90°W and 84°W - protraction areas Mobile, Viosca Knoll, Mississippi Canyon, Atwater Valley, Lund, Lund South, Pensacola, Destin Dome, De Soto Canyon, Lloyd Ridge, Henderson, Florida Plain, Campeche Escarpment, Apalachicola, Florida Middle Ground, The Elbow, Vernon Basin, Howell Hook, Rankin.',23.95,30.25,-89.95,-83.91,0);
INSERT INTO "extent" VALUES('EPSG','4813','Kazakhstan - west of 48°E','Kazakhstan - west of 48°E including Caspian Sea.',47.69,50.47,46.49,48.0,0);
INSERT INTO "extent" VALUES('EPSG','4814','Kazakhstan - 48°E to 54°E','Kazakhstan - 48°E to 54°E including Caspian Sea.',41.15,51.79,48.0,54.0,0);
INSERT INTO "extent" VALUES('EPSG','4815','Kazakhstan - 54°E to 60°E','Kazakhstan - 54°E to 60°E including Caspian Sea.',41.26,51.18,54.0,60.0,0);
INSERT INTO "extent" VALUES('EPSG','4816','Kazakhstan - 60°E to 66°E','Kazakhstan - 60°E to 66°E.',42.87,54.71,60.0,66.0,0);
INSERT INTO "extent" VALUES('EPSG','4817','Kazakhstan - 66°E to 72°E','Kazakhstan - 66°E to 72°E.',40.59,55.45,66.0,72.0,0);
INSERT INTO "extent" VALUES('EPSG','4818','Kazakhstan - 72°E to 78°E','Kazakhstan - 72°E to 78°E.',42.4,54.45,72.0,78.0,0);
INSERT INTO "extent" VALUES('EPSG','4819','Kazakhstan - 78°E to 84°E','Kazakhstan - 78°E to 84°E.',42.19,53.18,78.0,84.0,0);
INSERT INTO "extent" VALUES('EPSG','4820','Kazakhstan - east of 84°E','Kazakhstan - east of 84°E.',46.82,50.7,84.0,87.35,0);
INSERT INTO "extent" VALUES('EPSG','4821','USA - Gulf central planning area deep water','United States (USA) - central Gulf of Mexico outer continental shelf (GoM OCS) planning area, deep water portion.',25.58,29.35,-93.38,-86.53,0);
INSERT INTO "extent" VALUES('EPSG','4823','Norway - west of 0°E','Norway including Svalbard - west of 0°E.',63.47,80.49,-3.35,0.0,0);
INSERT INTO "extent" VALUES('EPSG','4824','Norway - 0°E to 6°E','Norway including Svalbard between 0°E and 6°E, onshore and offshore.',56.08,82.45,0.0,6.0,0);
INSERT INTO "extent" VALUES('EPSG','4825','Norway - 6°E to 12°E','Norway including Svalbard south of 84°N between 6°E and 12°E, onshore and offshore.',56.88,84.0,5.99,12.0,0);
INSERT INTO "extent" VALUES('EPSG','4826','Norway - 12°E to 18°E','Norway including Svalbard south of 84°N between 12°E and 18°E, onshore and offshore.',59.88,84.0,12.0,18.0,0);
INSERT INTO "extent" VALUES('EPSG','4827','Norway - 18°E to 24°E','Norway including Svalbard south of 84°N between 18°E and 24°E, onshore and offshore.',68.04,84.0,18.0,24.0,0);
INSERT INTO "extent" VALUES('EPSG','4828','Norway - 24°E to 30°E','Norway including Svalbard south of 84°N between 24°E and 30°E, onshore and offshore.',68.58,84.0,23.99,30.0,0);
INSERT INTO "extent" VALUES('EPSG','4829','Norway - 30°E to 36°E','Norway including Svalbard south of 84°N between 30°E and 36°E, onshore and offshore.',69.46,84.0,30.0,36.0,0);
INSERT INTO "extent" VALUES('EPSG','4830','Norway - east of 36°E','Norway including Svalbard - east of 36°E.',72.99,79.07,36.0,38.0,0);
INSERT INTO "extent" VALUES('EPSG','4831','Svalbard','Svalbard including Bear Island.',74.3208,81.8504,6.49005,33.50985,0);
+173
View File
@@ -0,0 +1,173 @@
-- Final consistency checks
CREATE TABLE dummy(foo);
CREATE TRIGGER final_checks
BEFORE INSERT ON dummy
FOR EACH ROW BEGIN
-- check that view definitions have no error
SELECT RAISE(ABORT, 'corrupt definition of coordinate_operation_view')
WHERE (SELECT 1 FROM coordinate_operation_view LIMIT 1) = 0;
SELECT RAISE(ABORT, 'corrupt definition of crs_view')
WHERE (SELECT 1 FROM crs_view LIMIT 1) = 0;
SELECT RAISE(ABORT, 'corrupt definition of object_view')
WHERE (SELECT 1 FROM object_view LIMIT 1) = 0;
SELECT RAISE(ABORT, 'corrupt definition of authority_list')
WHERE (SELECT 1 FROM authority_list LIMIT 1) = 0;
-- check that the auth_name of all objects in object_view is recorded in builtin_authorities
SELECT RAISE(ABORT, 'One or several authorities referenced in object_view are missing in builtin_authorities')
WHERE EXISTS (
SELECT DISTINCT o.auth_name FROM object_view o WHERE NOT EXISTS (
SELECT 1 FROM builtin_authorities b WHERE o.auth_name = b.auth_name)
);
-- check that a usage is registered for most objects where this is needed
SELECT RAISE(ABORT, 'One or several objects lack a corresponding record in the usage table')
WHERE EXISTS (
SELECT * FROM object_view o WHERE NOT EXISTS (
SELECT 1 FROM usage u WHERE
o.table_name = u.object_table_name AND
o.auth_name = u.object_auth_name AND
o.code = u.object_code)
AND o.table_name NOT IN ('unit_of_measure', 'axis',
'celestial_body', 'ellipsoid', 'prime_meridian', 'extent')
-- the IGNF registry lacks extent for the following objects
AND NOT (o.auth_name = 'IGNF' AND o.table_name IN ('geodetic_datum', 'vertical_datum', 'conversion'))
);
SELECT RAISE(ABORT, 'Geodetic datum ensemble defined, but no ensemble member')
WHERE EXISTS (
SELECT * FROM geodetic_datum d WHERE ensemble_accuracy IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM geodetic_datum_ensemble_member WHERE
d.auth_name = ensemble_auth_name AND d.code = ensemble_code)
);
SELECT RAISE(ABORT, 'Vertical datum ensemble defined, but no ensemble member')
WHERE EXISTS (
SELECT * FROM vertical_datum d WHERE ensemble_accuracy IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM vertical_datum_ensemble_member WHERE
d.auth_name = ensemble_auth_name AND d.code = ensemble_code)
);
SELECT RAISE(ABORT, 'PROJ defines an alias that exists in EPSG')
WHERE EXISTS (
SELECT * FROM (
SELECT count(*) AS count, table_name, auth_name, code, alt_name FROM alias_name
WHERE source in ('EPSG', 'PROJ')
AND NOT (source = 'PROJ' AND alt_name IN ('GGRS87', 'NAD27', 'NAD83'))
GROUP BY table_name, auth_name, code, alt_name) x WHERE count > 1
);
-- test to check that our custom grid transformation overrides are really needed
SELECT RAISE(ABORT, 'PROJ grid_transformation defined whereas EPSG has one')
WHERE EXISTS (SELECT 1 FROM grid_transformation g1
JOIN grid_transformation g2
ON g1.source_crs_auth_name = g2.source_crs_auth_name
AND g1.source_crs_code = g2.source_crs_code
AND g1.target_crs_auth_name = g2.target_crs_auth_name
AND g1.target_crs_code = g2.target_crs_code
WHERE g1.auth_name = 'PROJ' AND g1.code NOT LIKE '%_RESTRICTED_TO_VERTCRS%' AND g2.auth_name = 'EPSG' AND g2.deprecated = 0 AND (
(g1.interpolation_crs_auth_name IS NULL AND g2.interpolation_crs_auth_name IS NULL) OR
(g1.interpolation_crs_auth_name IS NOT NULL AND g2.interpolation_crs_auth_name IS NOT NULL AND
g1.interpolation_crs_auth_name = g2.interpolation_crs_auth_name AND
g1.interpolation_crs_code = g2.interpolation_crs_code)))
OR EXISTS (SELECT 1 FROM grid_transformation g1
JOIN grid_transformation g2
ON g1.source_crs_auth_name = g2.target_crs_auth_name
AND g1.source_crs_code = g2.target_crs_code
AND g1.target_crs_auth_name = g1.source_crs_auth_name
AND g1.target_crs_code = g1.source_crs_code
WHERE g1.auth_name = 'PROJ' AND g1.code NOT LIKE '%_RESTRICTED_TO_VERTCRS%' AND g2.auth_name = 'EPSG' AND g2.deprecated = 0);
SELECT RAISE(ABORT, 'Arg! there is now a EPSG:102100 object. Hack in createFromUserInput() will no longer work')
WHERE EXISTS(SELECT 1 FROM crs_view WHERE auth_name = 'EPSG' AND code = '102100');
-- check coordinate_operation_view "foreign keys"
SELECT RAISE(ABORT, 'One coordinate_operation has a broken source_crs link')
WHERE EXISTS (SELECT * FROM coordinate_operation_view cov WHERE
cov.source_crs_auth_name || cov.source_crs_code NOT IN
(SELECT auth_name || code FROM crs_view));
SELECT RAISE(ABORT, 'One coordinate_operation has a broken target_crs link')
WHERE EXISTS (SELECT * FROM coordinate_operation_view cov WHERE
cov.target_crs_auth_name || cov.target_crs_code NOT IN
(SELECT auth_name || code FROM crs_view));
-- check that transformations intersect the area of use of their source/target CRS
-- EPSG, ESRI and IGNF have cases where this does not hold.
SELECT RAISE(ABORT, 'The area of use of at least one coordinate_operation does not intersect the one of its source CRS')
WHERE EXISTS (SELECT * FROM coordinate_operation_view v, crs_view c, usage vu, extent ve, usage cu, extent ce WHERE
v.deprecated = 0 AND
(v.table_name = 'grid_transformation' OR v.auth_name NOT IN ('EPSG', 'ESRI', 'IGNF')) AND
v.source_crs_auth_name = c.auth_name AND
v.source_crs_code = c.code AND
vu.object_table_name = v.table_name AND
vu.object_auth_name = v.auth_name AND
vu.object_code = v.code AND
vu.extent_auth_name = ve.auth_name AND
vu.extent_code = ve.code AND
cu.object_table_name = c.table_name AND
cu.object_auth_name = c.auth_name AND
cu.object_code = c.code AND
cu.extent_auth_name = ce.auth_name AND
cu.extent_code = ce.code AND
NOT ((ce.south_lat < ve.north_lat AND ve.south_lat < ce.north_lat) OR
(ce.west_lon < ce.east_lon AND ve.west_lon < ve.east_lon AND
NOT (ce.west_lon < ve.east_lon AND ve.west_lon < ce.east_lon))) );
SELECT RAISE(ABORT, 'The area of use of at least one coordinate_operation does not intersect the one of its target CRS')
WHERE EXISTS (SELECT * FROM coordinate_operation_view v, crs_view c, usage vu, extent ve, usage cu, extent ce WHERE
v.deprecated = 0 AND
((v.table_name = 'grid_transformation' AND NOT (v.auth_name = 'IGNF' AND v.code = 'TSG1185'))
OR v.auth_name NOT IN ('EPSG', 'ESRI', 'IGNF')) AND
v.target_crs_auth_name = c.auth_name AND
v.target_crs_code = c.code AND
vu.object_table_name = v.table_name AND
vu.object_auth_name = v.auth_name AND
vu.object_code = v.code AND
vu.extent_auth_name = ve.auth_name AND
vu.extent_code = ve.code AND
cu.object_table_name = c.table_name AND
cu.object_auth_name = c.auth_name AND
cu.object_code = c.code AND
cu.extent_auth_name = ce.auth_name AND
cu.extent_code = ce.code AND
NOT ((ce.south_lat < ve.north_lat AND ve.south_lat < ce.north_lat) OR
(ce.west_lon < ce.east_lon AND ve.west_lon < ve.east_lon AND
NOT (ce.west_lon < ve.east_lon AND ve.west_lon < ce.east_lon))) );
-- check geoid_model table
SELECT RAISE(ABORT, 'missing GEOID99 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID99');
SELECT RAISE(ABORT, 'missing GEOID03 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID03');
SELECT RAISE(ABORT, 'missing GEOID06 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID06');
SELECT RAISE(ABORT, 'missing GEOID09 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID09');
SELECT RAISE(ABORT, 'missing GEOID12A in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12A');
SELECT RAISE(ABORT, 'missing GEOID12B in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID12B');
SELECT RAISE(ABORT, 'missing GEOID18 in geoid_model')
WHERE NOT EXISTS(SELECT 1 FROM geoid_model WHERE name = 'GEOID18');
-- check presence of au_ga_AUSGeoid98.tif
SELECT RAISE(ABORT, 'missing au_ga_AUSGeoid98.tif')
WHERE NOT EXISTS(SELECT 1 FROM grid_alternatives WHERE proj_grid_name = 'au_ga_AUSGeoid98.tif');
-- check PROJ.VERSION value
SELECT RAISE(ABORT, 'Value of PROJ.VERSION entry of metadata tables not substituted by actual value')
WHERE (SELECT 1 FROM metadata WHERE key = 'PROJ.VERSION' AND value LIKE '$%');
-- Only available in sqlite >= 3.16. May be activated as soon as support for ubuntu 16 is dropped
-- check all foreign key constraints have an 'ON DELETE CASCADE'
-- SELECT RAISE(ABORT, 'FK constraint with missing "ON DELETE CASCADE"')
-- WHERE EXISTS (SELECT 1 FROM
-- pragma_foreign_key_list(name),
-- (SELECT name from sqlite_master WHERE type='table')
-- WHERE upper(on_delete) != 'CASCADE');
END;
INSERT INTO dummy DEFAULT VALUES;
DROP TRIGGER final_checks;
DROP TABLE dummy;
Loaded 100 of 703 files, more files were not shown because too many files have changed in this diff. Show more