Compare commits

...
97 Commits
Author SHA1 Message Date
Even Rouault 7c3d4a1fa9 CITATION.cff: update for 9.6.2 2025-06-04 13:28:23 +02:00
Even Rouault 5a632ac2fb Update man-pages from Sphinx-docs 2025-06-04 13:27:41 +02:00
Even Rouault 07945da228 NEWS.md: update for 9.6.2 2025-06-04 13:27:26 +02:00
Even Rouault 585f978d25 Update version numbers to 9.6.2 2025-06-04 13:20:48 +02:00
Even Rouault 966dc8c9ed Merge pull request #4520 from rouault/backports_9_6_2
Backports for 9.6.2
2025-06-04 11:41:08 +01:00
Even Rouault 01cadf3ffe Database: update to EPSG v12.013 2025-06-03 17:21:41 +02:00
Even Rouault 85c4774eef 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 17:14:50 +02:00
Even Rouault 0a77a49f21 ProjectedCRS::identify(): more robust identification of old ESRI names using _IntlFeet
Fixe https://github.com/OSGeo/gdal/issues/12511
2025-06-03 17:12:11 +02:00
Even Rouault 5b764ba1b6 Datum name comparison: better take into account Esri style D_ name prefixing
Fixes #4514
2025-06-03 17:06:58 +02:00
Even Rouault fbe3cfdd65 WKT import: normalize Esri style 'D_Unknown_based_on_WGS_84_ellipsoid' datum name to 'Unknown based on WGS 84 ellipsoid'
Fixes #4514
2025-06-03 17:06:58 +02:00
Even Rouault 54afe78439 Code comment typo fix 2025-06-03 17:06:58 +02:00
Even Rouault 3c31962ffe 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-06-03 17:06:57 +02:00
Even Rouault b6f0ee7f60 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-06-03 17:06:57 +02:00
Even Rouault fa523e2062 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-06-03 17:06:57 +02:00
Even Rouault bb64a83e7b Update docs/source/spelling_wordlist.txt 2025-06-03 17:05:54 +02:00
Kristian Evers a82abb09e3 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:27:30 +02:00
Kristian Evers 7b226c6f43 Update version numbers and dates in docs config 2025-06-02 16:12:43 +02:00
Kristian Evers 09c54c75e5 Update docs for 9.6.1 release 2025-06-02 15:54:07 +02:00
Kristian Evers e64793e6c8 Bump version numbers to 9.6.1 2025-05-25 20:41:24 +02:00
Kristian Evers db3aef57fb Merge branch '9.6' of github.com:OSGeo/PROJ into 9.6 2025-05-25 20:37:29 +02:00
Kristian Evers 64275958d4 Bump PROJ-data version to 1.22 in database metadata 2025-05-25 20:34:27 +02:00
Kristian Evers ee8a4e5e1d Update CITATION.cff for 9.6.1 release 2025-05-25 20:32:44 +02:00
Kristian Evers 073718eaef Update NEWS for 9.6.1 release 2025-05-25 20:31:28 +02:00
Kristian Evers 1ba726e207 Update man-pages from Sphinx-docs 2025-05-25 20:20:22 +02:00
Even Rouault 7c19d5d7c9 Merge pull request #4510 from OSGeo/backport-4509-to-9.6
[Backport 9.6] Make cppcheck master happy
2025-05-25 19:06:46 +01:00
Even Rouault a09426d1fb Make cppcheck master happy 2025-05-25 17:35:15 +00:00
Even Rouault 9e667d0af9 Merge pull request #4508 from OSGeo/backport-4507-to-9.6
[Backport 9.6] Fix Windows build when both EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES are set
2025-05-25 12:46:48 +01:00
Even Rouault 386e2c0c69 Fix Windows build when both EMBED_RESOURCE_FILES and USE_ONLY_EMBEDDED_RESOURCE_FILES are set
Fixes #4506
2025-05-25 06:45:19 +00:00
Even Rouault b84f67446d Merge pull request #4505 from OSGeo/backport-4500-to-9.6
[Backport 9.6] Add an option to ship PDB files
2025-05-22 11:45:36 +01:00
Alexey Gribovskiy f4e26e2734 Set EXPORT_PDB for Windows build 2025-05-22 09:52:38 +00:00
Alexey Gribovskiy 5f7163b669 Add ship_pdb flag 2025-05-22 09:52:38 +00:00
Even Rouault 0b7c9dd363 Merge pull request #4504 from kbevers/9.6
[Backport 9.6] Add grid alternatives for Danish DVR90->EVRF2019 grids (#4503)
2025-05-22 10:50:49 +01:00
Kristian Evers 0c0c245d11 Add grid alternatives for Danish DVR90->EVRF2019 grids (#4503) 2025-05-22 08:45:08 +02:00
Kristian Evers dde234c0fb Add grid alternative for lv_lgia_lks92to2020.tif 2025-05-21 15:31:50 +02:00
Even Rouault 5e5e5679a4 Merge pull request #4498 from rouault/backport_9_6_epsg_12_012
[Backport 9.6] Update EPSG to 12.012
2025-05-21 14:28:04 +01:00
Kristian Evers 553aef4eb8 Update EPSG to 12.012 2025-05-21 13:27:34 +02:00
Even Rouault b4591d3fe0 Merge pull request #4496 from rouault/backport_9_6_epsg_12_009
[Backport 9.6] Database: update to EPSG v12.009
2025-05-16 13:27:30 +01:00
Even Rouault d74779c33c Database: update to EPSG v12.009 2025-05-15 17:56:49 +02:00
Even Rouault 5f29be5250 Merge pull request #4494 from OSGeo/backport-4492-to-9.6
[Backport 9.6] createOperationsCompoundToGeog(): avoid bringing non-sensical transformations
2025-05-14 13:03:01 +01:00
Even Rouault f300732f52 Merge pull request #4493 from OSGeo/backport-4489-to-9.6
[Backport 9.6] Database: update ESRI to ArcGIS Pro 3.5
2025-05-14 13:02:47 +01:00
Even Rouault 092642c63a createOperationsCompoundToGeog(): avoid bringing non-sensical transformations
Fixes #4491
2025-05-14 11:11:38 +00:00
Even Rouault e80325c637 Database: update ESRI to ArcGIS Pro 3.5 2025-05-14 10:11:08 +00:00
Even Rouault 9bfdd6ae5b CI OSX: skip autotools based post-installation test due to issue with m4 2025-05-14 10:11:08 +00:00
Even Rouault 39b3796d57 Merge pull request #4488 from OSGeo/backport-4487-to-9.6
[Backport 9.6] Database: update to EPSG v12.008
2025-05-07 21:38:49 +01:00
Even Rouault 413f106ebe Database: update to EPSG v12.008 2025-05-07 09:48:22 +00:00
Even Rouault 74d1e5716b Merge pull request #4486 from jjimenezshaw/fix_std_abs_9.6
[9.6 branch] [fix] use std::abs instead of abs for NetBSD
2025-05-05 17:54:38 +01:00
Javier Jimenez Shaw 7de6dbadd9 [fix] use std::abs instead of abs for NetBSD 2025-05-05 18:06:20 +02:00
Even Rouault 946df793fd Merge pull request #4482 from OSGeo/backport-4479-to-9.6
[Backport 9.6] Database: fix duplicated entries with auxiliary database
2025-04-28 19:22:15 +01:00
Even Rouault d1dd77f6ba Merge pull request #4481 from OSGeo/backport-4477-to-9.6
[Backport 9.6] FileManager::open_resource_file(): honour known URLs from grid_altern…
2025-04-28 19:22:06 +01:00
Even Rouault d8095e9af5 Merge pull request #4480 from OSGeo/backport-4474-to-9.6
[Backport 9.6] getGeoidModels: use vertical_crs.datum_code to get vcrss ...
2025-04-28 19:21:57 +01:00
Even Rouault 37ae566778 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-28 12:29:29 +00:00
Even Rouault 3ad1a6906c 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-28 11:52:47 +00:00
Javier Jimenez Shaw d0ce43e446 getGeoidModels: use vertical_crs.datum_code to get vcrss that uses different units 2025-04-28 11:48:35 +00:00
Even Rouault d81fd314f1 Merge pull request #4478 from OSGeo/backport-4473-to-9.6
[Backport 9.6] Add missing include for uint32_t on Windows with gcc 15.1
2025-04-27 20:59:50 +01:00
Even Rouault cec11612df Fix C++20 deprecation warning about implicit capture of this 2025-04-27 19:09:17 +00:00
Even Rouault 258567defb CI: MSYS: build with CMAKE_CXX_STANDARD=20 to avoid warnings with gtest 2025-04-27 19:09:17 +00:00
Even Rouault 09eb948d0b 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 19:09:17 +00:00
Even Rouault 7ef50eeb47 Merge pull request #4472 from OSGeo/backport-4471-to-9.6
[Backport 9.6] c++ nit: Fix bare isnan() to std::isnan()
2025-04-27 13:37:49 +01:00
Greg Troxel 18783cdeaa c++ nit: Fix bare isnan() to std::isnan()
and include cmath instead of math.h, because this is a C++ source
file.
2025-04-27 11:15:58 +00:00
Kristian Evers dcbd8a2bb5 Merge pull request #4470 from OSGeo/backport-4468-to-9.6
[Backport 9.6] PROJJSON specification: fix RST list syntax
2025-04-23 13:24:40 +02:00
Neven Sajko c379d7b12b PROJJSON specification: fix RST list syntax
https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#bullet-lists
2025-04-23 09:45:14 +00:00
Even Rouault 9288c12755 Merge pull request #4467 from OSGeo/backport-4465-to-9.6
[Backport 9.6] createOperations(): for NAD83(CSRS)[x] to NAD83(CSRS)[y], do not go through NAD83
2025-04-17 11:25:40 +02:00
Even Rouault c6bafb95d3 createOperations(): for NAD83(CSRS)[x] to NAD83(CSRS)[y], do not go through NAD83
Fixes #4464
2025-04-17 09:02:52 +00:00
Even Rouault 007b968569 Merge pull request #4463 from OSGeo/backport-4462-to-9.6
[Backport 9.6] CMake: avoid detection of C23 #embed on too old compilers
2025-04-14 12:57:46 +02:00
Even Rouault f55958f4af CMake: avoid detection of C23 #embed on too old compilers
Fixes #4461
2025-04-14 08:41:52 +00:00
Even Rouault dbbdf34b54 Merge pull request #4460 from OSGeo/backport-4459-to-9.6
[Backport 9.6] Database: update to EPSG v12.007
2025-04-13 21:45:27 +02:00
Even Rouault 952ad68498 Database: update to EPSG v12.007 2025-04-11 12:10:36 +00:00
Even Rouault 395f60aee3 Merge pull request #4458 from OSGeo/backport-4457-to-9.6
[Backport 9.6] Add transformation for jp_gsi_jpgeo2024.tif (geoid model JPGEO2024 in…
2025-04-10 12:58:42 +02:00
Javier Jimenez Shaw e43576b024 Add transformation for jp_gsi_jpgeo2024.tif (geoid model JPGEO2024 in Japan) 2025-04-10 09:40:33 +00:00
Even Rouault 4ee1bfa37e Merge pull request #4455 from OSGeo/backport-4454-to-9.6
[Backport 9.6] Database: update to EPSG v12.006
2025-04-09 21:05:43 +02:00
Even Rouault f6a67985c7 Database: update to EPSG v12.006 2025-04-09 16:15:48 +00:00
Even Rouault 037acc5b3d Avoid cppcheck complain 2025-04-09 16:15:48 +00:00
Even Rouault 1d5a5a79c3 Merge pull request #4453 from OSGeo/backport-4449-to-9.6
[Backport 9.6] Bug correction in Wagner VI projection parameters
2025-04-09 17:40:53 +02:00
J.L.G. Pallero 0ee16551a1 Bug correction in Wagner VI parameters 2025-04-05 11:16:53 +00:00
Kristian Evers 8c518a8069 Merge pull request #4452 from OSGeo/backport-4451-to-9.6
[Backport 9.6] Update geod.rst to mention -f covers azimuths too
2025-04-04 13:30:10 +02:00
積丹尼 Dan Jacobson 01ee7cea39 Update geod.rst to mention -f covers azimuths too 2025-04-04 05:51:55 +00:00
Even Rouault 2f5b43954d proj_trans_bounds(): fix doc 2025-04-01 23:35:11 +02:00
Even Rouault 8c5b40d9d0 Merge pull request #4444 from OSGeo/backport-4443-to-9.6
[Backport 9.6] Add missing 'limits' and 'algorithm' includes
2025-03-22 14:58:21 +01:00
Even Rouault 2d7abaf01b Add missing 'limits' and 'algorithm' includes
and add CI test to check for that (borrowed from GDAL)

Fixes #4442
2025-03-22 12:41:59 +00:00
Kristian Evers 6db0d82ed4 Merge pull request #4439 from OSGeo/backport-4437-to-9.6
[Backport 9.6] Add note about unexpected behaviour of omerc
2025-03-20 07:44:04 +01:00
Kristian Evers e57fb90d2f 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-20 06:22:17 +00:00
Even Rouault 7a7e84283b Merge pull request #4438 from OSGeo/backport-4434-to-9.6
[Backport 9.6] Database: update to EPSG v12.005
2025-03-19 22:38:22 +01:00
Even Rouault a60bda1c11 Database: update to EPSG v12.005 2025-03-19 20:36:59 +00:00
Kristian Evers 41eded595b Merge pull request #4436 from OSGeo/backport-4435-to-9.6
[Backport 9.6] Add new words to spellchecking ignore list
2025-03-18 12:57:33 +01:00
Even Rouault 340324cc3c Merge pull request #4430 from OSGeo/backport-4427-to-9.6
[Backport 9.6] Deal with South Orientated TMerc presented as regular TMerc but with Scale_Factor=-1
2025-03-18 12:05:48 +01:00
Kristian Evers 7da98c2f80 Add new words to spellchecking ignore list 2025-03-18 11:05:47 +00:00
Even Rouault 1e5d77f0fb Deal with South Orientated TMerc presented as regular TMerc but with Scale_Factor=-1
such as ESRI:102470

Fixes #4425
2025-03-16 13:04:46 +00:00
Kristian Evers b97c2bc33b Set correct release info in docs config 2025-03-15 09:59:10 +01:00
Kristian Evers cd190c47f3 Update docs for 9.6.0 2025-03-15 09:34:43 +01:00
Kristian Evers eb1ec0ee9e Merge pull request #4423 from OSGeo/backport-4422-to-9.6
[Backport 9.6] Build: make sure that BUILD_SHARED_LIBS is initialized before defining DEFAULT_EMBED_RESOURCE_FILES
2025-03-13 08:48:10 +01:00
Even Rouault 93f47edbe9 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-13 05:57:43 +00:00
Kristian Evers 84cfcb3675 Add recent fix to NEWS for 9.6.0 2025-03-11 11:51:11 +01:00
Kristian Evers 2d675f2237 Merge pull request #4421 from OSGeo/backport-4416-to-9.6
[Backport 9.6] Remove hashbang from bash completion.
2025-03-10 21:39:47 +01:00
Kristian Evers c6a2cf933d Merge pull request #4420 from OSGeo/backport-4419-to-9.6
[Backport 9.6] Retry "SSL connection timeout"
2025-03-10 20:16:33 +01:00
Even Rouault b64f25d65a projinfo-bash-completion.sh: add leading comment 2025-03-10 18:21:21 +00:00
Bas Couwenberg 07a84be2bd Remove hashbang from bash completion.
Completions are meant to be sourced, not executed.
2025-03-10 18:21:21 +00:00
Peter A. Jonsson 95d71e8846 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 16:38:49 +00:00
74 changed files with 2256 additions and 893 deletions
+9
View File
@@ -65,6 +65,15 @@ jobs:
# 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@v4
- name: Detect missing includes
run: ./scripts/detect_missing_include.sh
other_checks:
runs-on: ubuntu-24.04
steps:
+1
View File
@@ -12,6 +12,7 @@ dependencies:
- ccache
- autoconf
- automake
- m4
- jsonschema
- ruamel.yaml
- pytest
+26 -1
View File
@@ -75,6 +75,7 @@ jobs:
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% ^
@@ -158,7 +159,7 @@ jobs:
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
@@ -167,6 +168,27 @@ jobs:
PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir
mkdir ${PROJ_BUILD}
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=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}" \
@@ -176,6 +198,9 @@ jobs:
-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
+2 -2
View File
@@ -2,8 +2,8 @@ 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.0
date-released: 2025-03-15
version: 9.6.2
date-released: 2025-06-04
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.
+36 -2
View File
@@ -143,7 +143,7 @@ message(STATUS "Configuring PROJ:")
#PROJ version information
################################################################################
include(ProjVersion)
proj_version(MAJOR 9 MINOR 6 PATCH 0)
proj_version(MAJOR 9 MINOR 6 PATCH 2)
set(PROJ_SOVERSION 25)
set(PROJ_BUILD_VERSION "${PROJ_SOVERSION}.${PROJ_VERSION}")
@@ -156,6 +156,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
################################################################################
@@ -348,7 +355,8 @@ endif()
function (is_sharp_embed_available res)
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.21 AND
((CMAKE_C_COMPILER_ID STREQUAL "GNU") OR (CMAKE_C_COMPILER_ID STREQUAL "Clang")))
((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;}"
@@ -368,6 +376,9 @@ function (is_sharp_embed_available res)
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()
@@ -421,6 +432,29 @@ 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
################################################################################
+59
View File
@@ -1,5 +1,62 @@
# PROJ Release Notes
## 9.6.2
### Updates
* Update EPSG to 12.013
### Bug Fixes
* Database: change ESRI deprecated records back to their deprecated state (#4519)
* ProjectedCRS::identify(): more robust identification of old ESRI names using _IntlFeet (#4518)
* Fix issue related to D_Unknown_based_on_WGS_84_ellipsoid datum name (#4514)
* 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) (#4513)
* proj_trans_bounds(): avoid erroring out, in some cases, when PJ* object is directly constructed from a PROJ pipeline (#4512)
## 9.6.1
### Updates
* Update EPSG to 12.012 (#4498)
* Add an option to ship PDB files (#4505)
### Bug Fixes
* Deal with South Orientated TMerc presented as regular TMerc but with Scale_Factor=-1 (#4427)
* Add missing 'limits' and 'algorithm' includes (#4444)
* CMake: avoid detection of C23 `#embed` on too old compilers (#4463)
* `createOperations()`: for NAD83(CSRS)[x] to NAD83(CSRS)[y], do not go through NAD83 (#4467)
* Add missing include for `uint32_t` on Windows with gcc 15.1 (#4478)
* `getGeoidModels`: use vertical_crs.datum_code to get vcrss that uses different units (#4480)
* `FileManager::open_resource_file()`: honour known URLs from grid_alternatives that don't point to cdn.proj.org (#4481)
* Database: update ESRI to ArcGIS Pro 3.5 (#4493)
* `createOperationsCompoundToGeog()`: avoid bringing non-sensical transformations (#4494)
* Bug correction in Wagner VI projection parameters (#4453)
* C++: Fix bare `isnan()` to `std::isnan()` (#4472)
* Database: fix duplicated entries with auxiliary database (#4482)
* Use `std::abs` instead of `abs` for NetBSD (#4486)
* Fix Windows build when both `EMBED_RESOURCE_FILES` and `USE_ONLY_EMBEDDED_RESOURCE_FILES` are set (#4508)
## 9.6.0
### Updates
@@ -75,6 +132,8 @@
* Fix typo in parameter for ITRF97 in ITRF2014 file (#4408)
* Retry on "SSL connection timeout" (#4419)
## 9.5.1
+1 -1
View File
@@ -31,7 +31,7 @@ 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 "7e93fb5bf8aa4a5849049f56dfa98bc4")
set(PROJ_DB_SQL_EXPECTED_MD5 "bff39ff944164def30793f82fd9e39f2")
add_custom_command(
OUTPUT ${PROJ_DB}
+24 -18
View File
@@ -167,8 +167,6 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6659','ISN93','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6300','TM75','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6300','1975 Mapping Adjustment','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5153','NGG1977','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5154','Martinique 1987','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5156','Reunion 1989','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5156','IGN89','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5155','IGN 1988','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5154','IGN87','EPSG');
@@ -613,7 +611,6 @@ INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1300','BGS2005','EPSG')
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1302','Pago Pago 2020','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1303','NVD 1992','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1301','CD Norway','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1199','Greenland Vertical Reference 2000','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1304','REDGEOMIN','EPSG');
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1297','EVRF2007-PL','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1305','ETRF2000-PL','EPSG');
@@ -761,6 +758,9 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1394','BES2020','EPSG')
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1395','Sint Eustatius','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1399','ITRF2020-u2023','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1402','LibRef21','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1401','UGRF','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1401','Uganda 2010','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1405','EWR3-IRF','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21100','Genuk / NEIEZ','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2140','NAD83(CSRS98) / SCoPQ zone 3','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2141','NAD83(CSRS98) / SCoPQ zone 4','EPSG');
@@ -1813,7 +1813,7 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3026','RT38 5 gon V 0:-1
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3025','RT38 2.5 gon V 0:-15','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7793','RDN2008 / TM34 (E-N)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4615','Base SE','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','LKS92 / TM Baltic93','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','LKS-92 / TM Baltic93','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','LKS94 / TM Baltic93','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','EST97 / TM Baltic93','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3300','EST92','EPSG');
@@ -2125,7 +2125,7 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3049','ETRS - TM37','EPS
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3050','ETRS - TM38','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3051','ETRS - TM39','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4936','ETRS89 / (X, Y, Z)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4937','ETRS89','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4937','ETRS89-LatLonh','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5730','EVRF_AMST / NH','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6884','NAD83(CORS96) / Oregon North (m)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2462','AL_ALB87 / TM_6','EPSG');
@@ -3979,9 +3979,7 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3455','NAD83 / S Dakota
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3460','Fiji 1986 / Map Grid','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3461','Dabola 1981 / UTM 28N','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3462','Dabola 1981 / UTM 29N','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3560','NAD83 / Utah North (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3566','NAD83 / Utah Cen (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3567','NAD83 / Utah South (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3571','WGS 84 / LAEA Bering Sea','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3572','WGS 84 / LAEA Alaska','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3573','WGS 84 / LAEA Canada','EPSG');
@@ -4446,7 +4444,7 @@ INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5488','RGAF09 (lat-lon)',
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7069','NAD83(2011) / IaRCS zone 13 Fairfield','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7073','RGTAAF07 (lat-lon)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7070','NAD83(2011) / IaRCS zone 14 Burlington','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7072','RGTAAF07','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7072','RGTAAF07 (lat-lon)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7109','NAD83(2011) / St Mary (m)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7114','NAD83(2011) / Ft Peck Sx (m)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7110','NAD83(2011) / Blackfeet (m)','EPSG');
@@ -4984,15 +4982,11 @@ INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8042','Stable Cadastre','
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8043','Stable cadastre','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8043','S-SC','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8050','Mean Sea Level height (ft)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8050','MSL height (ft)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8051','Mean Sea Level depth (ft)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8051','MSL depth (ft)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8065','NAD83(2011) / PCCS east zone(ft)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8052','Mean Sea Level height (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8052','MSL height (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8066','NAD83(2011) / PCCS central zone(ft)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8053','Mean Sea Level depth (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8053','MSL depth (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8067','NAD83(2011) / PCCS west zone(ft)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8068','NAD83(2011) / PCCS Mt. Lemmon zone(ft)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8090','WISCRS Florence (m)','EPSG');
@@ -6688,8 +6682,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30791','Nord Sahara 1959
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30792','Nord Sahara 1959 / Voirol Unifie Sud','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5659','Monte Mario / UTMRER','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5844','RGRDC 2005 / Congo TM 30','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5715','MSL depth','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5714','MSL height','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5868','Mean High Water height','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5869','Mean Higher High Water height','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5870','Mean High Water Spring Tides height','EPSG');
@@ -7256,7 +7248,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6630','NAD83(PA11) / Haw
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6630','NAD83(PA11) / HI 3 (m)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6631','NAD83(PA11) / Hawaii zone 4 (m)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6631','NAD83(PA11) / HI 4 (m)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6633','NAD83(PA11) / Hawaii zone 3 (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6633','NAD83(PA11) / HI 3 (ftUS)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6634','NAD83(PA11) / UTM 4N','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6632','NAD83(PA11) / Hawaii zone 5 (m)','EPSG');
@@ -7358,9 +7349,7 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9678','Gulshan / Banglad
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9680','WGS 84 / Bangladesh Universal Transverse Mercator','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9680','WGS 84 / BUTM 2010','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9549','LTF2004(G) / LTF2004(C)','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','6893','WGS 84 / World Mercator + EGM2008 height','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7955','St. Helena Tritan / UTM zone 30S + Tritan 2011 height','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7956','SHMG2015 + SHVD2015 height','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','7956','St. Helena Map Grid 2015 + SHVD2015 height','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2176','ETRS89 / Poland CS2000 zone 5','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2177','ETRS89 / Poland CS2000 zone 6','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2178','ETRS89 / Poland CS2000 zone 7','EPSG');
@@ -8063,6 +8052,16 @@ INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10764','Bonaire DPnet + B
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10764','Bonaire / Bonaire TM + Bonaire height','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10773','SIRGAS 2000 / RPTM','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10765','Bonaire 2004 + Bonaire KADpeil','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10789','Uganda 2010','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10790','Uganda 2010','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10791','Uganda 2010','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10792','Uganda 2010 / UTM zone 35N','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10793','Uganda 2010 / UTM zone 36N','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10794','Uganda 2010 / UTM zone 36S','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10795','Uganda 2010 / UTM zone 35S','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10688','ETRS89','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10689','ETRS89','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10690','ETRS89','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10604','1255','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10604','WGS 84 (G2296) - XYZ','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10605','1256','EPSG');
@@ -8075,3 +8074,10 @@ INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10570','1239','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10570','ETRF2020 - LatLonEHt','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10571','1238','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','10571','ETRF2020 - LatLonEHt','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10826','ETRS89 + LAS-2000 height','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','25884','LKS-2020 / TM Baltic93','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10839','ETRS89 + LAS-2000 height','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','10851','ETRS89 / EWR3 SnakeGrid','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','10852','ETRS89 / EWR3 SnakeGrid + Newlyn height','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10588','1265','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','10588','CGVD28(HTv2.0) - OHt','EPSG');
+8
View File
@@ -912,6 +912,14 @@ INSERT INTO "compound_crs" VALUES('EPSG','10765','Bonaire 2004 + Bonaire height'
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','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','20001','ETRS89 + SVD2006 height',NULL,'EPSG','4258','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);
+5 -5
View File
@@ -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,11 +411,11 @@ 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');
+2 -2
View File
@@ -36,7 +36,7 @@ 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;
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')
@@ -204,7 +204,7 @@ FOR EACH ROW BEGIN
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 != 'IGNF')
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')
+7 -5
View File
@@ -1744,14 +1744,14 @@ INSERT INTO "conversion" VALUES('EPSG','9677','Bangladesh Transverse Mercator','
INSERT INTO "usage" VALUES('EPSG','14878','conversion','EPSG','9677','EPSG','3217','EPSG','1274');
INSERT INTO "conversion" VALUES('EPSG','9738','EOS21-TM','In conjunction with transformation ETRS89 to EOS-IRF (1) (code 9740), emulates the EOS21 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',56.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-2.45,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',74996.927,'EPSG','9001','EPSG','8807','False northing',133508.35,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','15339','conversion','EPSG','9738','EPSG','4620','EPSG','1141');
INSERT INTO "conversion" VALUES('EPSG','9746','SPCS83 Alabama East zone (US survey foot)','This map projection is not formally recognised by the NGS because there is no State legislation for NAD83 defining the foot to be used. See code 10131 for official metric definition. ftUS required by AL DOT and used by other professional practioners.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9746','SPCS83 Alabama East zone (US survey foot)','This map projection is not formally recognised by the NGS because there is no State legislation for NAD83 defining the foot to be used. See code 10131 for official metric definition. ftUS required by AL DOT and used by other professional practitioners.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',656166.667,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','15382','conversion','EPSG','9746','EPSG','2154','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','9747','SPCS83 Alabama West zone (US survey foot)','This map projection is not formally recognised by the NGS because there is no State legislation for NAD83 defining the foot to be used. See code 10132 for official metric definition. ftUS required by AL DOT and used by other professional practioners.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','9747','SPCS83 Alabama West zone (US survey foot)','This map projection is not formally recognised by the NGS because there is no State legislation for NAD83 defining the foot to be used. See code 10132 for official metric definition. ftUS required by AL DOT and used by other professional practitioners.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',1968500.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','15381','conversion','EPSG','9747','EPSG','2155','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','9760','ECML14_NB-TM','In conjunction with transformation ETRS89 to ECML14_NB-IRF (1) (code 9759), emulates the ECML14_NB Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',55.03,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.33,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',112242.8512,'EPSG','9001','EPSG','8807','False northing',402313.7432,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16497','conversion','EPSG','9760','EPSG','4621','EPSG','1141');
INSERT INTO "conversion" VALUES('EPSG','9765','EWR2-TM','In conjunction with transformation ETRS89 to EWR2-IRF (1) (code 9764), emulates the EWR2 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-0.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',192519.9715,'EPSG','9001','EPSG','8807','False northing',146942.6806,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16511','conversion','EPSG','9765','EPSG','4622','EPSG','1141');
INSERT INTO "conversion" VALUES('EPSG','9765','EWR3-TM','In conjunction with transformation ETRS89 to EWR2-IRF (1) (code 9764), emulates the EWR2 Snake projection. In conjunction with transformation ETRS89 to EWR3-IRF (1) (code 10850), emulates the EWR3 Snake projection. In 2024 the EWR2 Grid (ETRS89 / EWR2 SnakeGrid) was extended eastwards as the EWR3 Grid (ETRS89 / EWR3 SnakeGrid). In the emulation of the Snake projection, the NTv2 file supporting the transformation is extended but this map projection is unchanged and applies to both EWR2 and EWR3.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',51.57,'EPSG','9110','EPSG','8802','Longitude of natural origin',-0.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',192519.9715,'EPSG','9001','EPSG','8807','False northing',146942.6806,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16511','conversion','EPSG','9765','EPSG','4799','EPSG','1141');
INSERT INTO "conversion" VALUES('EPSG','9796','Local coordinate system of Kyiv','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',30.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16909','conversion','EPSG','9796','EPSG','4650','EPSG','1207');
INSERT INTO "conversion" VALUES('EPSG','9797','Local coordinate system of Crimea region','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',34.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',300000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
@@ -2032,6 +2032,8 @@ INSERT INTO "conversion" VALUES('EPSG','10772','Ribeirao Preto Local TM','PBD-Pr
INSERT INTO "usage" VALUES('EPSG','22213','conversion','EPSG','10772','EPSG','4789','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','10819','Agriculture Canada Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',40.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-96.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',44.75,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',55.75,'EPSG','9102','EPSG','8826','Easting at false origin',0.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','22544','conversion','EPSG','10819','EPSG','4752','EPSG','1292');
INSERT INTO "conversion" VALUES('EPSG','10856','Brazil Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',-12.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-54.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',-2.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',-22.0,'EPSG','9102','EPSG','8826','Easting at false origin',5000000.0,'EPSG','9001','EPSG','8827','Northing at false origin',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','22837','conversion','EPSG','10856','EPSG','3223','EPSG','1162');
INSERT INTO "conversion" VALUES('EPSG','10901','Florida CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-81.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','11140','conversion','EPSG','10901','EPSG','2186','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','10902','Florida CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',24.2,'EPSG','9110','EPSG','8802','Longitude of natural origin',-82.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999941177,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
@@ -5351,7 +5353,7 @@ INSERT INTO "conversion" VALUES('EPSG','19969','Portuguese Grid','Original trans
INSERT INTO "usage" VALUES('EPSG','13047','conversion','EPSG','19969','EPSG','1294','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','19971','New Zealand Transverse Mercator 2000','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',173.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',1600000.0,'EPSG','9001','EPSG','8807','False northing',10000000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13048','conversion','EPSG','19971','EPSG','3973','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','19972','Irish Grid','Defined as part of the 1965 and 1975 mapping adustments in which the scale factor was introduced as a best fit to retain existing grid coordinates.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "conversion" VALUES('EPSG','19972','Irish Grid','Defined as part of the 1965 and 1975 mapping adjustments in which the scale factor was introduced as a best fit to retain existing grid coordinates.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.000035,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13049','conversion','EPSG','19972','EPSG','1305','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','19973','Irish National Grid','Used only with the 1952 geodetic adjustment. Replaced by the 1975 Mapping Adjustment: see code 19972.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-8.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',200000.0,'EPSG','9001','EPSG','8807','False northing',250000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13050','conversion','EPSG','19973','EPSG','2530','EPSG','1142');
+416 -224
View File
File diff suppressed because it is too large Load Diff
+31 -26
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','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);
@@ -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','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);
@@ -262,7 +262,7 @@ 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 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);
@@ -332,7 +332,7 @@ INSERT INTO "extent" VALUES('EPSG','1352','Norway - onshore','Norway - onshore.'
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);
@@ -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) - 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','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);
@@ -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);
@@ -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);
@@ -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);
@@ -1385,7 +1385,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);
@@ -1578,8 +1578,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','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);
@@ -1806,7 +1806,7 @@ INSERT INTO "extent" VALUES('EPSG','2826','Africa - South Sudan and Sudan - west
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; 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; China - Hong Kong; China - Macao; 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; Hungary; Iceland; India; Indonesia; Iran; Iraq; Ireland; Israel; Italy; Jamaica; Japan; Jordan; Kazakhstan; Kenya; Kiribati; North Korea; South Korea; Kosovo; Kuwait; Kyrgyzstan; Laos; Latvia; Lebanon; Lesotho; Liberia; Libya; Liechtenstein; Lithuania; Luxembourg; 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; 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','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);
@@ -1872,7 +1872,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);
@@ -2241,8 +2241,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 +2310,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);
@@ -2696,8 +2696,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 +2706,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 +2715,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);
@@ -3766,5 +3766,10 @@ INSERT INTO "extent" VALUES('EPSG','4786','Uzbekistan - 66°E to 72°E','Uzbekis
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','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);
+8
View File
@@ -2364,12 +2364,20 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','10784','IGb20',NULL,'geographic 3D','E
INSERT INTO "usage" VALUES('EPSG','22364','geodetic_crs','EPSG','10784','EPSG','1262','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','10785','IGb20',NULL,'geographic 2D','EPSG','6422','EPSG','1400',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22365','geodetic_crs','EPSG','10785','EPSG','1262','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','10789','UGRF',NULL,'geocentric','EPSG','6500','EPSG','1401',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22457','geodetic_crs','EPSG','10789','EPSG','1241','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','10790','UGRF',NULL,'geographic 3D','EPSG','6423','EPSG','1401',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22458','geodetic_crs','EPSG','10790','EPSG','1241','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','10791','UGRF',NULL,'geographic 2D','EPSG','6422','EPSG','1401',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22459','geodetic_crs','EPSG','10791','EPSG','1241','EPSG','1183');
INSERT INTO "geodetic_crs" VALUES('EPSG','10798','LibRef21',NULL,'geocentric','EPSG','6500','EPSG','1402',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22444','geodetic_crs','EPSG','10798','EPSG','1142','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','10799','LibRef21',NULL,'geographic 3D','EPSG','6423','EPSG','1402',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22445','geodetic_crs','EPSG','10799','EPSG','1142','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','10800','LibRef21',NULL,'geographic 2D','EPSG','6422','EPSG','1402',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22446','geodetic_crs','EPSG','10800','EPSG','1142','EPSG','1181');
INSERT INTO "geodetic_crs" VALUES('EPSG','10849','EWR3-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1405',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22763','geodetic_crs','EPSG','10849','EPSG','4799','EPSG','1141');
INSERT INTO "geodetic_crs" VALUES('EPSG','20033','MWC18-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1324',NULL,0);
INSERT INTO "usage" VALUES('EPSG','18335','geodetic_crs','EPSG','20033','EPSG','4666','EPSG','1141');
INSERT INTO "geodetic_crs" VALUES('EPSG','20039','SIRGAS-Chile 2021',NULL,'geocentric','EPSG','6500','EPSG','1327',NULL,0);
+7 -3
View File
@@ -108,9 +108,9 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1115','Israeli Geodetic Datum 2005(2
INSERT INTO "usage" VALUES('EPSG','13167','geodetic_datum','EPSG','1115','EPSG','1126','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1116','NAD83 (National Spatial Reference System 2011)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,2010.0,0);
INSERT INTO "usage" VALUES('EPSG','13168','geodetic_datum','EPSG','1116','EPSG','1511','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1117','NAD83 (National Spatial Reference System PA11)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1117','NAD83 (National Spatial Reference System PA11)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,2010.0,0);
INSERT INTO "usage" VALUES('EPSG','13169','geodetic_datum','EPSG','1117','EPSG','4162','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1118','NAD83 (National Spatial Reference System MA11)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1118','NAD83 (National Spatial Reference System MA11)',NULL,'EPSG','7019','EPSG','8901','2012-06-12',NULL,NULL,NULL,2010.0,0);
INSERT INTO "usage" VALUES('EPSG','13170','geodetic_datum','EPSG','1118','EPSG','4167','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1120','Mexico ITRF2008',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13172','geodetic_datum','EPSG','1120','EPSG','1160','EPSG','1027');
@@ -408,7 +408,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1353','ETRS89/DREF91 Realization 201
INSERT INTO "usage" VALUES('EPSG','19242','geodetic_datum','EPSG','1353','EPSG','1103','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1355','Sonatrach Reference Frame 2020',NULL,'EPSG','7019','EPSG','8901','2012-11-15',NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','19535','geodetic_datum','EPSG','1355','EPSG','1026','EPSG','1136');
INSERT INTO "geodetic_datum" VALUES('EPSG','1356','Latvian coordinate system 2020',NULL,'EPSG','7019','EPSG','8901','2023-01-01',NULL,NULL,NULL,NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1356','Latvian coordinate system 2020',NULL,'EPSG','7019','EPSG','8901','2023-01-01',NULL,NULL,NULL,2020.28,0);
INSERT INTO "usage" VALUES('EPSG','19558','geodetic_datum','EPSG','1356','EPSG','1139','EPSG','1026');
INSERT INTO "geodetic_datum" VALUES('EPSG','1357','Reseau Geodesique de Nouvelle Caledonie 2015',NULL,'EPSG','7019','EPSG','8901','2016-01-01',NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','19600','geodetic_datum','EPSG','1357','EPSG','1174','EPSG','1181');
@@ -454,8 +454,12 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1399','International Terrestrial Ref
INSERT INTO "usage" VALUES('EPSG','22373','geodetic_datum','EPSG','1399','EPSG','1262','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1400','IGb20',NULL,'EPSG','7019','EPSG','8901','2015-01-01',2015.0,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','22362','geodetic_datum','EPSG','1400','EPSG','1262','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1401','Uganda Geodetic Reference Frame',NULL,'EPSG','7019','EPSG','8901','March 2011',NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','22456','geodetic_datum','EPSG','1401','EPSG','1241','EPSG','1181');
INSERT INTO "geodetic_datum" VALUES('EPSG','1402','Liberia Reference Frame 2021',NULL,'EPSG','7019','EPSG','8901','2022-10-31',NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','22451','geodetic_datum','EPSG','1402','EPSG','1142','EPSG','1181');
INSERT INTO "geodetic_datum" VALUES('EPSG','1405','EWR3 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2024-01-01',NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','22755','geodetic_datum','EPSG','1405','EPSG','4799','EPSG','1141');
INSERT INTO "geodetic_datum" VALUES('EPSG','6001','Not specified (based on Airy 1830 ellipsoid)',NULL,'EPSG','7001','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1);
INSERT INTO "usage" VALUES('EPSG','13422','geodetic_datum','EPSG','6001','EPSG','1263','EPSG','1213');
INSERT INTO "geodetic_datum" VALUES('EPSG','6002','Not specified (based on Airy Modified 1849 ellipsoid)',NULL,'EPSG','7002','EPSG','8901',NULL,NULL,NULL,NULL,NULL,1);
+8 -1
View File
@@ -156,6 +156,11 @@ VALUES
('gllat_2023.tif','dk_sdfi_gllat_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_gllat_2023.tif',1,1,NULL),
('glmsl_2023.tif','dk_sdfi_glmsl_2023.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfi_glmsl_2023.tif',1,1,NULL),
-- dk_kds - Danish Agency for Climate Data
-- Denmark
('dvr90_evrf2019.tif','dk_kds_dvr90_evrf2019.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/dk_kds_dvr90_evrf2019.tif',1,1,NULL),
('dvr90_evrf2019_mean_tide.tif','dk_kds_dvr90_evrf2019_mean_tide.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/dk_kds_dvr90_evrf2019_mean_tide.tif',1,1,NULL),
-- es_cat_icgc - Institut Cartogràfic i Geològic de Catalunya (ICGC)
('100800401.gsb','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL),
@@ -245,9 +250,11 @@ VALUES
-- jp_gsi - Geospatial Information Authority of Japan
('jp_gsi_gsigeo2011.tif','jp_gsi_gsigeo2011.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/jp_gsi_gsigeo2011.tif',1,1,NULL),
('JPGEO2024.isg','jp_gsi_jpgeo2024.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/jp_gsi_jpgeo2024.tif',1,1,NULL),
-- lv_lgia - Latvian Geospatial Information Agency
('lv_lgia_lv14.tif','lv_lgia_lv14.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/lv_lgia_lv14.tif',1,1,NULL),
('LV''14.gri','lv_lgia_lv14.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/lv_lgia_lv14.tif',1,1,NULL),
('LKS92to2020NTv2.gsb','lv_lgia_lks92to2020.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/lv_lgia_lks92to2020.tif',1,1,NULL),
-- mx_inegi - Instituto Nacional de Estadística, Geografía e Informática (INEGI) Mexico
('GGM10.txt','mx_inegi_ggm10.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/mx_inegi_ggm10.tif',1,1,NULL),
+21 -3
View File
@@ -1165,7 +1165,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9740','ETRS89 to EOS21-IRF (1)'
INSERT INTO "usage" VALUES('EPSG','15342','grid_transformation','EPSG','9740','EPSG','4620','EPSG','1141');
INSERT INTO "grid_transformation" VALUES('EPSG','9759','ETRS89 to ECML14_NB-IRF (1)','In conjunction with the ECML14_NB-TM map projection (code 9760) applied to ECML14_NB-IRF (code 9758), emulates the ECML14_NB Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines ECML14_NB-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9758',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-ECML14_NB-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr ECML_NB OSNet2009',0);
INSERT INTO "usage" VALUES('EPSG','16500','grid_transformation','EPSG','9759','EPSG','4621','EPSG','1141');
INSERT INTO "grid_transformation" VALUES('EPSG','9764','ETRS89 to EWR2-IRF (1)','In conjunction with the EWR2-TM map projection (code 9765) applied to EWR2-IRF (code 9763), emulates the EWR2 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines EWR2-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9763',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-EWR2-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr EWR2 OSNet2009',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9764','ETRS89 to EWR2-IRF (1)','In conjunction with the EWR2-TM map projection (code 9765) applied to EWR2-IRF (code 9763), emulates the EWR2 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines EWR2-IRF hence is errorless. In 2024 the EWR2 Grid (ETRS89 / EWR2 SnakeGrid) was extended eastwards as the EWR3 Grid (ETRS89 / EWR3 SnakeGrid). To the west of Bedford the EWR2 Grid is an exact subset of the EWR3 Grid; over this extent the EWR3 Grid replaces the EWR2 Grid. The EWR2 emulation file TN15-ETRS89-to-EWR2-IRF.gsb is a subset of the EWR3 emulation file TN15-ETRS89-to-EWR3-IRF.gsb (see CT code 10850).','EPSG','9615','NTv2','EPSG','4258','EPSG','9763',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-EWR2-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr EWR2 OSNet2009',0);
INSERT INTO "usage" VALUES('EPSG','16505','grid_transformation','EPSG','9764','EPSG','4622','EPSG','1141');
INSERT INTO "grid_transformation" VALUES('EPSG','9786','RGF93 v2b to NGF-IGN69 height (4)','Replaces RAF18 geoid model [RGF93 v2 to NGF-IGN69 height (3)]. Accuracy at each grid node is in the geoid model file. Recommended interpolation method is bilinear. For reversible alternative see RGF93 v2b to RGF93 v2b + NGF-IGN69 height (4) (code 9787).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','5720',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18b.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 18b',0);
INSERT INTO "usage" VALUES('EPSG','16689','grid_transformation','EPSG','9786','EPSG','1326','EPSG','1133');
@@ -1748,7 +1748,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10681','ETRS89 to ETRS89 + BSCD
INSERT INTO "usage" VALUES('EPSG','21821','grid_transformation','EPSG','10681','EPSG','4779','EPSG','1272');
INSERT INTO "grid_transformation" VALUES('EPSG','10683','RGM04 to RGM23 (2)','','EPSG','1087','Geocentric translation by Grid Interpolation (IGN)','EPSG','4470','EPSG','10671',0.05,'EPSG','8727','Geocentric translation file','RGM04versRGM23.txt',NULL,NULL,NULL,NULL,'EPSG','10671','IGN-Myt 5cm',0);
INSERT INTO "usage" VALUES('EPSG','21860','grid_transformation','EPSG','10683','EPSG','1159','EPSG','1178');
INSERT INTO "grid_transformation" VALUES('EPSG','10685','SVS2000 height to SVS2010 height (1)','SLO-VTP2024 height transformation surface derived at 2116 benchmarks. Height differences vary between −0.240 m and −0.047 m; 1σ accuarcy at 8693 BM is 9.9mm. File is also available in Surfer .grd and Gravsoft .gri formats.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5779','EPSG','8690',0.02,'EPSG','8732','Vertical offset file','SLO-VTP2024.xyz',NULL,NULL,NULL,NULL,'EPSG','4765','GuRS-Svn',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10685','SVS2000 height to SVS2010 height (1)','SLO-VTP2024 height transformation surface derived at 2116 benchmarks. Height differences vary between −0.240 m and −0.047 m; 1σ accuracy at 8693 BM is 9.9mm. File is also available in Surfer .grd and Gravsoft .gri formats.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5779','EPSG','8690',0.02,'EPSG','8732','Vertical offset file','SLO-VTP2024.xyz',NULL,NULL,NULL,NULL,'EPSG','4765','GuRS-Svn',0);
INSERT INTO "usage" VALUES('EPSG','21886','grid_transformation','EPSG','10685','EPSG','3307','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10693','EUREF-FIN to N60 height (1)','For reversible alternative see EUREF-FIN to EUREF-FIN + N60 height (1) (code 10694). Derived through a correction surface to the Nordic NKG96 geoid model using 156 points at which both levelled and GPS heights were available. ASCII file format available.','EPSG','1123','Geographic3D to GravityRelatedHeight (gtg)','EPSG','10689','EPSG','5717',0.03,'EPSG','8666','Geoid (height correction) model file','fi_nls_fin2000.tif',NULL,NULL,NULL,NULL,NULL,NULL,'NLS-Fin 2000',0);
INSERT INTO "usage" VALUES('EPSG','22010','grid_transformation','EPSG','10693','EPSG','3333','EPSG','1133');
@@ -1766,7 +1766,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10703','KKJ / Finland Uniform C
INSERT INTO "usage" VALUES('EPSG','22055','grid_transformation','EPSG','10703','EPSG','3333','EPSG','1273');
INSERT INTO "grid_transformation" VALUES('EPSG','10704','N43 height to N60 height (1)','Accuracy has not been determined.','EPSG','1137','Vertical Offset by TIN Interpolation (JSON)','EPSG','8675','EPSG','5717',999.0,'EPSG','1064','TIN offset file','fi_nls_n43_n60.json',NULL,NULL,NULL,NULL,'EPSG','2393','NLS-Fin TINshift',0);
INSERT INTO "usage" VALUES('EPSG','22018','grid_transformation','EPSG','10704','EPSG','4522','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10705','N60 height to N2000 height (1)','Recommended method for N60<>N2000 trasformations, as more accurate than concatenating geoid models.','EPSG','1137','Vertical Offset by TIN Interpolation (JSON)','EPSG','5717','EPSG','3900',0.005,'EPSG','1064','TIN offset file','fi_nls_n60_n2000.json',NULL,NULL,NULL,NULL,'EPSG','2393','NLS-Fin TINshift',0);
INSERT INTO "grid_transformation" VALUES('EPSG','10705','N60 height to N2000 height (1)','Recommended method for N60<>N2000 transformations, as more accurate than concatenating geoid models.','EPSG','1137','Vertical Offset by TIN Interpolation (JSON)','EPSG','5717','EPSG','3900',0.005,'EPSG','1064','TIN offset file','fi_nls_n60_n2000.json',NULL,NULL,NULL,NULL,'EPSG','2393','NLS-Fin TINshift',0);
INSERT INTO "usage" VALUES('EPSG','22201','grid_transformation','EPSG','10705','EPSG','3333','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10707','Canada velocity grid v8','Replaces Canada velocity grid v7 (code 9483). Although the interpolation CRS is given as NAD83(CSRS)v8 (also known as NAD83(CSRS) 2010), any version of NAD83(CSRS) may be used for grid interpolation without significant error.','EPSG','1141','Point motion by grid (NEU domain) (NTv2_Vel)','EPSG','10413','EPSG','10413',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v80VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','NRC-Can cvg8.0',0);
INSERT INTO "usage" VALUES('EPSG','22258','grid_transformation','EPSG','10707','EPSG','4754','EPSG','1058');
@@ -1806,6 +1806,24 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10822','LN02 height to EVRF2019
INSERT INTO "usage" VALUES('EPSG','22550','grid_transformation','EPSG','10822','EPSG','1286','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10823','LN02 height to EVRF2019 mean-tide height (2)','Determined at 553 points, SD 0.071m. Offset: mean -0.244m, minimum -0.506m, maximum -0.012m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5728','EPSG','9390',0.142,'EPSG','8732','Vertical offset file','ch_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m 2020-09',0);
INSERT INTO "usage" VALUES('EPSG','22551','grid_transformation','EPSG','10823','EPSG','1286','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10827','LKS-92 to Latvia 2000 height (1)','Published 2014-12-01. For reversible alternative to this transformation see LKS-92 to LKS-92 + Latvia 2000 height (1) (code 10828). File also available in ASCII txt format.','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4949','EPSG','7700',0.04,'EPSG','8666','Geoid (height correction) model file','LV''14.gri',NULL,NULL,NULL,NULL,NULL,NULL,'LGIA-Lva 2014',0);
INSERT INTO "usage" VALUES('EPSG','22648','grid_transformation','EPSG','10827','EPSG','3268','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','10828','LKS-92 to LKS-92 + Latvia 2000 height (1)','Reversible alternative to LKS-92 to Latvia 2000 height (1) (code 10827). File also available in ASCII txt format.','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4949','EPSG','10826',0.04,'EPSG','8666','Geoid (height correction) model file','LV''14.gri',NULL,NULL,NULL,NULL,'EPSG','4661','LGIA-Lva 2014',0);
INSERT INTO "usage" VALUES('EPSG','22649','grid_transformation','EPSG','10828','EPSG','3268','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','10838','LKS-92 to LKS-2020 (1)','Accuracy of transformation is at 1 cm level one sigma. Care! The NTv2 format requires longitudes to be positive west. At a given point, LKS-2020 latitude (positive north) has a greater value than LKS-92 latitude and LKS-2020 longitude (positive east) has a lesser value than LKS-92 longitude. For point Odukalns: 56.8283960°N, 24.2727688°E (LKS-92) = 56.8283967°N, 24.2727679°E (LKS-2020).','EPSG','9615','NTv2','EPSG','4661','EPSG','10305',0.02,'EPSG','8656','Latitude and longitude difference file','LKS92to2020NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'LGIA-Lva',0);
INSERT INTO "usage" VALUES('EPSG','22705','grid_transformation','EPSG','10838','EPSG','1139','EPSG','1026');
INSERT INTO "grid_transformation" VALUES('EPSG','10850','ETRS89 to EWR3-IRF (1)','In conjunction with the EWR3-TM map projection (code 9765) applied to EWR3-IRF (code 10849), emulates the EWR3 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines EWR3-IRF hence is errorless. In 2024 the EWR2 Grid (ETRS89 / EWR2 SnakeGrid) was extended eastwards as the EWR3 Grid (ETRS89 / EWR3 SnakeGrid). To the west of Bedford the EWR2 Grid is an exact subset of the EWR3 Grid; over this extent the EWR3 Grid replaces the EWR2 Grid. The EWR2 emulation file TN15-ETRS89-to-EWR2-IRF.gsb (CT code 9764) is a subset of this EWR3 emulation file TN15-ETRS89-to-EWR3-IRF.gsb; west of Bedford the content of the two files is identical.','EPSG','9615','NTv2','EPSG','4258','EPSG','10849',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-EWR3-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr EWR3 OSNet2009',0);
INSERT INTO "usage" VALUES('EPSG','22765','grid_transformation','EPSG','10850','EPSG','4799','EPSG','1141');
INSERT INTO "grid_transformation" VALUES('EPSG','10855','ETRS89/DREF91/2016 to GNTRANS2016 height (1)','Defines GNTRANS2016 height. The same geoid model is used to derive approximate DHHN2016 heights.','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','10283','EPSG','9927',0.02,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,NULL,NULL,'DB-Deu 2016',0);
INSERT INTO "usage" VALUES('EPSG','22778','grid_transformation','EPSG','10855','EPSG','3339','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','10858','DVR90 height to EVRF2019 height (1)','Determined at 106 points, SD 0.006m. Offset: mean 0.005m, minimum -0.010m, maximum 0.017m. The transformation was derived using the levelling based DVR90(2000) (CRS code 10482), but is applicable to all realizations in the DVR90 ensemble.','EPSG','1129','Vertical Offset by Grid Interpolation (gtg)','EPSG','5799','EPSG','9389',0.012,'EPSG','8732','Vertical offset file','dvr90_evrf2019.tif',NULL,NULL,NULL,NULL,'EPSG','4258','KDS-Dnk 2019z',0);
INSERT INTO "usage" VALUES('EPSG','22819','grid_transformation','EPSG','10858','EPSG','4575','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10859','DVR90 height to EVRF2019 mean-tide height (1)','Determined at 106 points, SD 0.009m. Offset: mean 0.022m, minimum 0.003m, maximum 0.043m. The transformation was derived using the levelling based DVR90(2000) (CRS code 10482), but is applicable to all realizations in the DVR90 ensemble.','EPSG','1129','Vertical Offset by Grid Interpolation (gtg)','EPSG','5799','EPSG','9390',0.018,'EPSG','8732','Vertical offset file','dvr90_evrf2019_mean_tide.tif',NULL,NULL,NULL,NULL,'EPSG','4258','KDS-Dnk 2019m',0);
INSERT INTO "usage" VALUES('EPSG','22820','grid_transformation','EPSG','10859','EPSG','4575','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10866','CGRS93 to Famagusta 1960 height (1)','Hybrid geoid model derived in 2010 using least squares collocation. The Cyprus Geoid Model describes the official vertical reference in Cyprus. For reversible alternative to this transformation see CGRS93 to CGRS93 + Famagusta 1960 height (1) (code 10867).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','6310','EPSG','7446',0.043,'EPSG','8666','Geoid (height correction) model file','SEPARATION.TXT',NULL,NULL,NULL,NULL,NULL,NULL,'DLS-Cyp 2010',0);
INSERT INTO "usage" VALUES('EPSG','22856','grid_transformation','EPSG','10866','EPSG','3236','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','10867','CGRS93 to CGRS93 + Famagusta 1960 height (1)','Reversible alternative to CGRS93 to Famagusta 1960 height (1) (code 10866).','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','6310','EPSG','10865',0.043,'EPSG','8666','Geoid (height correction) model file','SEPARATION.TXT',NULL,NULL,NULL,NULL,'EPSG','6311','DLS-Cyp 2010',0);
INSERT INTO "usage" VALUES('EPSG','22857','grid_transformation','EPSG','10867','EPSG','3236','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','15486','CH1903 to CH1903+ (1)','For improved accuracy (0.01m) use CHENyx06 interpolation programme FINELTRA. File CHENyx06 replaced by CHENyx06a; there is a small area at the border of the data where some more real data has been introduced. swisstopo consider the change insignificant.','EPSG','9615','NTv2','EPSG','4149','EPSG','4150',0.2,'EPSG','8656','Latitude and longitude difference file','CHENyx06a.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che',0);
INSERT INTO "usage" VALUES('EPSG','11497','grid_transformation','EPSG','15486','EPSG','1286','EPSG','1085');
INSERT INTO "grid_transformation" VALUES('EPSG','15488','RRAF 1991 to IGN 1988 MG height (1)','May be used for transformations from WGS 84 to IGN 1988 MG. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5617',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',1);
+21 -22
View File
@@ -88,6 +88,27 @@ INSERT INTO "usage" VALUES(
'EPSG','1024' -- unknown
);
INSERT INTO "grid_transformation" VALUES(
'PROJ','EPSG_6667_TO_EPSG_6695_2024','JDG2011 to JGD2011 height (JPGEO2024)',
NULL,
'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)',
'EPSG','6667', -- source CRS (JDG2011)
'EPSG','6695', -- target CRS (JDG2011 (vertical) height)
0.03, -- accuracy. Documentation mentions 3cm. GSIGEO2011 geoid model has NULL.
'EPSG','8666','Geoid (height correction) model file','JPGEO2024.isg',
NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES(
'PROJ',
'EPSG_6667_TO_EPSG_6695_2024_USAGE',
'grid_transformation',
'PROJ',
'EPSG_6667_TO_EPSG_6695_2024',
'EPSG','1129', -- area of use: Japan
'EPSG','1024' -- unknown
);
-- Switzerland
INSERT INTO "grid_transformation" VALUES(
@@ -151,25 +172,3 @@ INSERT INTO "usage" VALUES(
'EPSG','3278', -- area of use: Mexico - onshore
'EPSG','1024' -- unknown
);
-- Latvia
INSERT INTO "grid_transformation" VALUES(
'PROJ','EPSG_4949_TO_EPSG_7700','LKS-92 to Latvia 2000 height',
NULL,
'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)',
'EPSG','4949', -- source CRS (LKS-92)
'EPSG','7700', -- target CRS (Latvia 2000 height)
NULL,
'EPSG','8666','Geoid (height correction) model file','lv_lgia_lv14.tif',
NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES(
'PROJ',
'EPSG_4949_TO_EPSG_7700_USAGE',
'grid_transformation',
'PROJ',
'EPSG_4949_TO_EPSG_7700',
'EPSG','3268', -- area of use: Latvia - onshore
'EPSG','1024' -- unknown
);
+15 -5
View File
@@ -66,7 +66,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1065','Lao 1997 to WGS 84 (1
INSERT INTO "usage" VALUES('EPSG','7986','helmert_transformation','EPSG','1065','EPSG','1138','EPSG','1045');
INSERT INTO "helmert_transformation" VALUES('EPSG','1066','Amersfoort to ETRS89 (2)','Replaced by Amersfoort to ETRS89 (4) (tfm code 15740). Dutch sources also quote an equivalent transformation using the Coordinate Frame 7-parameter method - see tfm code 1751.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4289','EPSG','4258',0.5,593.032,26.0,478.741,'EPSG','9001',1.9848,-1.7439,9.0587,'EPSG','9109',4.0772,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,3903453.148,368135.313,5012970.306,'EPSG','9001','NCG-Nld 2000 MB',0);
INSERT INTO "usage" VALUES('EPSG','7987','helmert_transformation','EPSG','1066','EPSG','1275','EPSG','1035');
INSERT INTO "helmert_transformation" VALUES('EPSG','1067','Minna to WGS 84 (11)','Used by Statoil for deep water blocks 210, 213, 217 and 218. Parameter values interpolated from Racal Survey geocentric translation contour charts for each of these four blocks and then meaned.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',8.0,-92.1,-89.9,114.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Stat-Nga',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','1067','Minna to WGS 84 (11)','Used by Statoil for deep water blocks 210, 213, 217 and 218. Parameter values interpolated from Racal Survey geocentric translation contour charts for each of these four blocks and then averaged.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4263','EPSG','4326',8.0,-92.1,-89.9,114.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Stat-Nga',0);
INSERT INTO "usage" VALUES('EPSG','7988','helmert_transformation','EPSG','1067','EPSG','3817','EPSG','1136');
INSERT INTO "helmert_transformation" VALUES('EPSG','1070','Guam 1963 to WGS 84 (1)','Derived at 5 stations. Accuracy 3m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4675','EPSG','4326',6.0,-100.0,-248.0,259.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Gum',0);
INSERT INTO "usage" VALUES('EPSG','7991','helmert_transformation','EPSG','1070','EPSG','3255','EPSG','1160');
@@ -1369,7 +1369,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','3972','Chua to WGS 84 (2)','
INSERT INTO "usage" VALUES('EPSG','9017','helmert_transformation','EPSG','3972','EPSG','3619','EPSG','1143');
INSERT INTO "helmert_transformation" VALUES('EPSG','3990','PSAD56 to WGS 84 (14)','Parameter values from PSAD56 to SIRGAS 1995 (1) (code 3971). Assumes SIRGAS 1995 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4248','EPSG','4326',5.0,-60.31,245.935,31.008,'EPSG','9001',-12.324,-3.755,7.37,'EPSG','9104',0.447,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ecu',0);
INSERT INTO "usage" VALUES('EPSG','9024','helmert_transformation','EPSG','3990','EPSG','3241','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','3998','Arc 1960 to WGS 84 (4)','Derived at 3 stations. Accuracy 20m in each axis. Info source gives source CRS as Arc 1950. From inspection of parameter values, analysis of TR8350.2 contour chart sand geographic applicability of CRS, OGP believes that the this shuld be Arc 1960.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4210','EPSG','4326',35.0,-153.0,-5.0,-292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bdi',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','3998','Arc 1960 to WGS 84 (4)','Derived at 3 stations. Accuracy 20m in each axis. Info source gives source CRS as Arc 1950. From inspection of parameter values, analysis of TR8350.2 contour chart and geographic applicability of CRS, OGP believes that the this should be Arc 1960.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4210','EPSG','4326',35.0,-153.0,-5.0,-292.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bdi',0);
INSERT INTO "usage" VALUES('EPSG','9025','helmert_transformation','EPSG','3998','EPSG','1058','EPSG','1160');
INSERT INTO "helmert_transformation" VALUES('EPSG','4064','RGRDC 2005 to WGS 84 (1)','Approximation at the +/- 1m level assuming that RGRDC 2005 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4046','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-DUC',0);
INSERT INTO "usage" VALUES('EPSG','9027','helmert_transformation','EPSG','4064','EPSG','3613','EPSG','1252');
@@ -1621,7 +1621,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','5584','MOLDREF99 to ETRS89 (
INSERT INTO "usage" VALUES('EPSG','9472','helmert_transformation','EPSG','5584','EPSG','1162','EPSG','1161');
INSERT INTO "helmert_transformation" VALUES('EPSG','5585','MOLDREF99 to WGS 84 (1)','Parameter values from MOLDREF99 to ETRS89 (1) (code 5584). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4023','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mda',0);
INSERT INTO "usage" VALUES('EPSG','9473','helmert_transformation','EPSG','5585','EPSG','1162','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','5586','Pulkovo 1942 to UCS-2000 (1)','UCS-2000 is defined to be approximately consistent with Pulkovo 1942 and this transformation''s accuracy is due to deformation of the Pulkovo system across Ukranian territory.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','5561',3.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','5586','Pulkovo 1942 to UCS-2000 (1)','UCS-2000 is defined to be approximately consistent with Pulkovo 1942 and this transformation''s accuracy is due to deformation of the Pulkovo system across Ukrainian territory.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4284','EPSG','5561',3.5,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr',0);
INSERT INTO "usage" VALUES('EPSG','9474','helmert_transformation','EPSG','5586','EPSG','1242','EPSG','1044');
INSERT INTO "helmert_transformation" VALUES('EPSG','5590','UCS-2000 to WGS 84 (1)','Derived through concatenation of UCS-2000 to S-42 (1) (tfm code 5586 reversed) [an approximation] and S-42 to WGS 84 (16) (tfm code 15865) [derived for whole FSU rather than Ukraine]. Replaced by UCS-2000 to WGS 84 (2) (tfm code 5840).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5561','EPSG','4326',5.0,25.0,-141.0,-78.5,'EPSG','9001',0.0,-0.35,-0.736,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Ukr',0);
INSERT INTO "usage" VALUES('EPSG','9476','helmert_transformation','EPSG','5590','EPSG','1242','EPSG','1045');
@@ -1925,7 +1925,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','7671','WGS 84 (G873) to ITRF
INSERT INTO "usage" VALUES('EPSG','10203','helmert_transformation','EPSG','7671','EPSG','1262','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','7672','WGS 84 (G730) to ITRF92 (1)','Defined at epoch 1994.0.','EPSG','1032','Coordinate Frame rotation (geocentric domain)','EPSG','7656','EPSG','4914',0.2,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NGA-Wld 1994.0',0);
INSERT INTO "usage" VALUES('EPSG','10204','helmert_transformation','EPSG','7672','EPSG','1262','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','7675','MGI 1901 to ETRS89 (6)','Derived at 5506 points across the Repulic of Serbia. May be taken as approximate transformation MGI 1901 to WGS 84 assuming ETRS89 is equivalent to WGS 84 within the accuracy of the transformation - see tfm code 7676.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4258',0.5,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7675','MGI 1901 to ETRS89 (6)','Derived at 5506 points across the Republic of Serbia. May be taken as approximate transformation MGI 1901 to WGS 84 assuming ETRS89 is equivalent to WGS 84 within the accuracy of the transformation - see tfm code 7676.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4258',0.5,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb',0);
INSERT INTO "usage" VALUES('EPSG','10207','helmert_transformation','EPSG','7675','EPSG','4543','EPSG','1035');
INSERT INTO "helmert_transformation" VALUES('EPSG','7676','MGI 1901 to WGS 84 (11)','Parameter values from MGI 1901 to ETRS89 (6) (code 7675). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,577.88891,165.22205,391.18289,'EPSG','9001',-4.9145,0.94729,13.05098,'EPSG','9104',7.78664,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Srb',0);
INSERT INTO "usage" VALUES('EPSG','10208','helmert_transformation','EPSG','7676','EPSG','4543','EPSG','1252');
@@ -2603,7 +2603,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','10264','RGSH2020 to WGS 84 (
INSERT INTO "usage" VALUES('EPSG','19536','helmert_transformation','EPSG','10264','EPSG','1026','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','10292','ETRS89/DREF91/2016 to ETRF2000 (1)','Accuracy 4.1mm N, 3.3mm E, 10.6mm up.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','10282','EPSG','7930',0.1,0.0,0.0,0.0,'EPSG','9001',0.658,-0.208,0.755,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'AdV-Deu 2016',0);
INSERT INTO "usage" VALUES('EPSG','19279','helmert_transformation','EPSG','10292','EPSG','1103','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','10296','Nord Sahara 1959 to WGS 84 (11)','Given by infomation source in direction WGS 84 to Nord Sahara 1959. Defines official relationship between WGS 84 and national geodetic system; epoch unspecified. Derived at approximately 40 points in northern Algeria; accuracy applies only to this area.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','4326',1.0,-267.407,-47.068,446.357,'EPSG','9001',-0.179423,5.577661,-1.27762,'EPSG','9104',1.204866,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'INCT-Dza 2022',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','10296','Nord Sahara 1959 to WGS 84 (11)','Given by information source in direction WGS 84 to Nord Sahara 1959. Defines official relationship between WGS 84 and national geodetic system; epoch unspecified. Derived at approximately 40 points in northern Algeria; accuracy applies only to this area.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4307','EPSG','4326',1.0,-267.407,-47.068,446.357,'EPSG','9001',-0.179423,5.577661,-1.27762,'EPSG','9104',1.204866,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'INCT-Dza 2022',0);
INSERT INTO "usage" VALUES('EPSG','19518','helmert_transformation','EPSG','10296','EPSG','1026','EPSG','1026');
INSERT INTO "helmert_transformation" VALUES('EPSG','10321','RGNC91-93 to RGNC15 (1)','See RGNC91-93 to RGNC15 (2) (transformation code 10322) for authoritative transformation between these CRSs. This transformation is used only as the standard transformation T0 within that transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10307','EPSG','10312',1.0,-0.584,-1.117,1.125,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BGN-Ncl 1m',0);
INSERT INTO "usage" VALUES('EPSG','19653','helmert_transformation','EPSG','10321','EPSG','3430','EPSG','1041');
@@ -2729,10 +2729,20 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','10786','ITRF2020-u2023 to IG
INSERT INTO "usage" VALUES('EPSG','22366','helmert_transformation','EPSG','10786','EPSG','1262','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','10787','IGS20 to IGb20 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. Parameter values from ITRF2020 to ITRF2020-u2023 (1) (code 10782) as IGS20 is aligned to ITRF2020 and IGb20 is aligned to ITRF2020-u2023.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','10176','EPSG','10783',0.001,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.0,0.0,0.0,'EPSG','1032',0.0,'EPSG','1030',2015.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IGS-Wld',0);
INSERT INTO "usage" VALUES('EPSG','22369','helmert_transformation','EPSG','10787','EPSG','1262','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','10796','Arc 1960 to UGRF (1)','Derived in 2019 using 18 points. RMS 0.5m - 1m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4210','EPSG','10791',1.0,-136.7231,-87.8654,20.1215,'EPSG','9001',4.966933,-9.01001,-2.72486,'EPSG','9104',7.86009,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MLHUD-Uga',0);
INSERT INTO "usage" VALUES('EPSG','22467','helmert_transformation','EPSG','10796','EPSG','1241','EPSG','1151');
INSERT INTO "helmert_transformation" VALUES('EPSG','10797','UGRF to WGS 84 (1)','Approximation at the +/- 1m level assuming that UGRF is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10791','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Uga',0);
INSERT INTO "usage" VALUES('EPSG','22465','helmert_transformation','EPSG','10797','EPSG','1241','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','10803','LibRef21 to WGS 84 (1)','Approximation at the +/- 1m level assuming that LibRef21 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10800','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Lbr',0);
INSERT INTO "usage" VALUES('EPSG','22441','helmert_transformation','EPSG','10803','EPSG','1142','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','10804','Sint Eustatius to WGS 84 (1)','Parameter values taken from Sint Eustatius to BES2020 Sint Eustatius (1) (transformation code 10750) assuming that BES2020 Sint Eustatius is coincident with WGS 84 within the accuracy of the transformation.','EPSG','1133','Coordinate Frame rotation full matrix (geog2D)','EPSG','10736','EPSG','4326',1.0,1276.2485,-2016.6406,667.4403,'EPSG','9001',-101.005288,212.913401,-68.43277,'EPSG','9104',-431.59604,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Bes Seu',0);
INSERT INTO "usage" VALUES('EPSG','22543','helmert_transformation','EPSG','10804','EPSG','4788','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','10840','LKS-2020 to WGS 84 (1)','LKS-2020 is the second national realization of ETRS89 and coincident to WGS84 within 1 metre. This transformation has an accuracy equal to the coincidence figure.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10305','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Vzd-Lva',0);
INSERT INTO "usage" VALUES('EPSG','22702','helmert_transformation','EPSG','10840','EPSG','1139','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','10848','ITRF2014 to LibRef21 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','10798',0.01,-47.48,11.76,-0.58,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',-0.099,0.614,-0.733,'EPSG','1032',0.0,'EPSG','1030',2021.112,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'LLA-Lbr 2021',0);
INSERT INTO "usage" VALUES('EPSG','22773','helmert_transformation','EPSG','10848','EPSG','1142','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','10853','ITRF2020 to PNG94 (1)','Transformation derived by inversion of seven site velocities within the transformation coverage area. Transformation accuracy at 2σ is 0.15 m between 1994.0 and 2035.0 for locations within Papuan Foreland. Transformation precision degrades in plate margin deforming zone (PFTB) near plate boundary with NGH and Woodlark plates. Transformation not valid outside stated extent.','EPSG','1056','Time-dependent Coordinate Frame rotation (geocen)','EPSG','9988','EPSG','5544',0.15,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',1.3242,1.2788,1.1675,'EPSG','1032',0.0,'EPSG','1030',1994.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'OSG-Png',0);
INSERT INTO "usage" VALUES('EPSG','22777','helmert_transformation','EPSG','10853','EPSG','4800','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','15483','Tokyo to JGD2000 (1)','Derived at Tokyo datum origin. Accuracy on main islands 9m. Also used on remote islands with significantly less accuracy: Io-To 793m, Kitadaito and Minamidaito Jima 642m, Tarama and Minna Shima 560m, Ishigaki and Taketomi Jima 251m, Yonaguni Jima 248m.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4612',9.0,-146.414,507.337,680.507,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn',0);
INSERT INTO "usage" VALUES('EPSG','11494','helmert_transformation','EPSG','15483','EPSG','3957','EPSG','1142');
INSERT INTO "helmert_transformation" VALUES('EPSG','15484','Tokyo to WGS 84 (108)','Parameter values from Tokyo to JGD2000 (1) (code 15483). Assumes JGD2000 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4301','EPSG','4326',9.0,-146.414,507.337,680.507,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0);
+3 -3
View File
@@ -9,8 +9,8 @@
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1);
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 5);
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v12.004');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2025-03-02');
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v12.013');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2025-05-26');
-- The value of ${PROJ_VERSION} is substituted at build time by the actual
-- value.
@@ -18,4 +18,4 @@ INSERT INTO "metadata" VALUES('PROJ.VERSION', '${PROJ_VERSION}');
-- Version of the PROJ-data package with which this database is the most
-- compatible.
INSERT INTO "metadata" VALUES('PROJ_DATA.VERSION', '1.21');
INSERT INTO "metadata" VALUES('PROJ_DATA.VERSION', '1.22');
+12
View File
@@ -7614,12 +7614,24 @@ INSERT INTO "projected_crs" VALUES('EPSG','10773','SIRGAS 2000 / Ribeirao Preto
INSERT INTO "usage" VALUES('EPSG','22381','projected_crs','EPSG','10773','EPSG','4789','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','10788','WGS 84 / Agriculture Canada Albers',NULL,'EPSG','4400','EPSG','4326','EPSG','10751',NULL,1);
INSERT INTO "usage" VALUES('EPSG','22473','projected_crs','EPSG','10788','EPSG','4752','EPSG','1292');
INSERT INTO "projected_crs" VALUES('EPSG','10792','UGRF / UTM zone 35N',NULL,'EPSG','4400','EPSG','10791','EPSG','16035',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22460','projected_crs','EPSG','10792','EPSG','1578','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','10793','UGRF / UTM zone 36N',NULL,'EPSG','4400','EPSG','10791','EPSG','16036',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22461','projected_crs','EPSG','10793','EPSG','4790','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','10794','UGRF / UTM zone 36S',NULL,'EPSG','4400','EPSG','10791','EPSG','16136',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22462','projected_crs','EPSG','10794','EPSG','4791','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','10795','UGRF / UTM zone 35S',NULL,'EPSG','4400','EPSG','10791','EPSG','16135',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22463','projected_crs','EPSG','10795','EPSG','4792','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','10801','LibRef21 / UTM zone 28N',NULL,'EPSG','4400','EPSG','10800','EPSG','16028',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22447','projected_crs','EPSG','10801','EPSG','4794','EPSG','1029');
INSERT INTO "projected_crs" VALUES('EPSG','10802','LibRef21 / UTM zone 29N',NULL,'EPSG','4400','EPSG','10800','EPSG','16029',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22448','projected_crs','EPSG','10802','EPSG','4793','EPSG','1056');
INSERT INTO "projected_crs" VALUES('EPSG','10820','WGS 84 / Agriculture Canada Albers',NULL,'EPSG','4400','EPSG','4326','EPSG','10819',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22545','projected_crs','EPSG','10820','EPSG','4752','EPSG','1292');
INSERT INTO "projected_crs" VALUES('EPSG','10851','EWR3 Grid',NULL,'EPSG','4400','EPSG','10849','EPSG','9765',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22761','projected_crs','EPSG','10851','EPSG','4799','EPSG','1141');
INSERT INTO "projected_crs" VALUES('EPSG','10857','SIRGAS 2000 / Brazil Albers',NULL,'EPSG','4400','EPSG','4674','EPSG','10856',NULL,0);
INSERT INTO "usage" VALUES('EPSG','22838','projected_crs','EPSG','10857','EPSG','3223','EPSG','1162');
INSERT INTO "projected_crs" VALUES('EPSG','11114','MAGNA-SIRGAS 2018 / Colombia Far West zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18065',NULL,0);
INSERT INTO "usage" VALUES('EPSG','18947','projected_crs','EPSG','11114','EPSG','3091','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','11115','MAGNA-SIRGAS 2018 / Colombia West zone',NULL,'EPSG','4500','EPSG','20046','EPSG','18066',NULL,0);
+4 -3
View File
@@ -53,7 +53,6 @@ INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1753','helmer
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15895','grid_transformation','EPSG','15932','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15907','grid_transformation','EPSG','15933','EPSG',1);
INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8581','helmert_transformation','EPSG','1439','EPSG',1);
INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8657','helmert_transformation','EPSG','15846','EPSG',1);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1672','helmert_transformation','EPSG','15934','EPSG',1);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1829','helmert_transformation','EPSG','1449','EPSG',1);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1830','helmert_transformation','EPSG','1448','EPSG',1);
@@ -228,7 +227,6 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7870','grid_tran
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7869','grid_transformation','EPSG','9321','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7868','grid_transformation','EPSG','9320','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7867','grid_transformation','EPSG','9319','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7866','grid_transformation','EPSG','9318','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7865','grid_transformation','EPSG','9317','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7864','grid_transformation','EPSG','9316','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7863','grid_transformation','EPSG','9315','EPSG',1);
@@ -258,7 +256,6 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9168','grid_tran
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9169','grid_transformation','EPSG','9174','EPSG',0);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15932','grid_transformation','EPSG','9409','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15932','grid_transformation','EPSG','9408','EPSG',1);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7675','helmert_transformation','EPSG','9495','EPSG',0);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7676','helmert_transformation','EPSG','9486','EPSG',1);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','15779','helmert_transformation','EPSG','9679','EPSG',1);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1458','helmert_transformation','EPSG','5827','EPSG',1);
@@ -344,3 +341,7 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10530','grid_tra
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10537','grid_transformation','EPSG','10716','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9483','grid_transformation','EPSG','10707','EPSG',0);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8676','grid_transformation','EPSG','9483','EPSG',0);
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7675','helmert_transformation','EPSG','9495','EPSG',0);
INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','8657','helmert_transformation','EPSG','15846','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9764','grid_transformation','EPSG','10850','EPSG',0);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7866','grid_transformation','EPSG','9318','EPSG',1);
+10 -10
View File
@@ -84,6 +84,8 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5713','CGVD28 height',NULL,'EPSG','649
INSERT INTO "usage" VALUES('EPSG','4156','vertical_crs','EPSG','5713','EPSG','1289','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','5714','MSL height',NULL,'EPSG','6499','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','4157','vertical_crs','EPSG','5714','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','5715','MSL depth',NULL,'EPSG','6498','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','4158','vertical_crs','EPSG','5715','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','5716','Piraeus height',NULL,'EPSG','6499','EPSG','5115',0);
INSERT INTO "usage" VALUES('EPSG','4159','vertical_crs','EPSG','5716','EPSG','3254','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','5717','N60 height',NULL,'EPSG','6499','EPSG','5116',0);
@@ -362,6 +364,14 @@ INSERT INTO "vertical_crs" VALUES('EPSG','7890','SHVD2015 height',NULL,'EPSG','6
INSERT INTO "usage" VALUES('EPSG','5532','vertical_crs','EPSG','7890','EPSG','3183','EPSG','1027');
INSERT INTO "vertical_crs" VALUES('EPSG','7979','KOC WD height',NULL,'EPSG','6499','EPSG','5187',0);
INSERT INTO "usage" VALUES('EPSG','5571','vertical_crs','EPSG','7979','EPSG','3267','EPSG','1205');
INSERT INTO "vertical_crs" VALUES('EPSG','8050','MSL height (ft)',NULL,'EPSG','1030','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5600','vertical_crs','EPSG','8050','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8051','MSL depth (ft)',NULL,'EPSG','6495','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5601','vertical_crs','EPSG','8051','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8052','MSL height (ftUS)',NULL,'EPSG','6497','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5602','vertical_crs','EPSG','8052','EPSG','1245','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8053','MSL depth (ftUS)',NULL,'EPSG','1043','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5603','vertical_crs','EPSG','8053','EPSG','1245','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8089','ISH2004 height',NULL,'EPSG','6499','EPSG','1190',0);
INSERT INTO "usage" VALUES('EPSG','5616','vertical_crs','EPSG','8089','EPSG','4662','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','8266','GVR2000 height',NULL,'EPSG','6499','EPSG','1199',0);
@@ -530,8 +540,6 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5612','Baltic 1977 depth',NULL,'EPSG',
INSERT INTO "usage" VALUES('EPSG','4081','vertical_crs','EPSG','5612','EPSG','2423','EPSG','1136');
INSERT INTO "vertical_crs" VALUES('EPSG','5706','Caspian depth',NULL,'EPSG','6498','EPSG','5106',0);
INSERT INTO "usage" VALUES('EPSG','4149','vertical_crs','EPSG','5706','EPSG','1291','EPSG','1198');
INSERT INTO "vertical_crs" VALUES('EPSG','5715','MSL depth',NULL,'EPSG','6498','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','4158','vertical_crs','EPSG','5715','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','5734','AIOC95 depth',NULL,'EPSG','6498','EPSG','5133',0);
INSERT INTO "usage" VALUES('EPSG','4177','vertical_crs','EPSG','5734','EPSG','2592','EPSG','1136');
INSERT INTO "vertical_crs" VALUES('EPSG','5789','KOC WD depth',NULL,'EPSG','6498','EPSG','5187',0);
@@ -550,10 +558,6 @@ INSERT INTO "vertical_crs" VALUES('EPSG','7968','NGVD29 height (m)',NULL,'EPSG',
INSERT INTO "usage" VALUES('EPSG','5569','vertical_crs','EPSG','7968','EPSG','1323','EPSG','1203');
INSERT INTO "vertical_crs" VALUES('EPSG','7976','HKPD depth',NULL,'EPSG','6498','EPSG','5135',0);
INSERT INTO "usage" VALUES('EPSG','5570','vertical_crs','EPSG','7976','EPSG','3334','EPSG','1203');
INSERT INTO "vertical_crs" VALUES('EPSG','8050','MSL height (ft)',NULL,'EPSG','1030','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5600','vertical_crs','EPSG','8050','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8052','MSL height (ftUS)',NULL,'EPSG','6497','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5602','vertical_crs','EPSG','8052','EPSG','1245','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8228','NAVD88 height (ft)',NULL,'EPSG','1030','EPSG','5103',0);
INSERT INTO "usage" VALUES('EPSG','5736','vertical_crs','EPSG','8228','EPSG','4464','EPSG','1144');
INSERT INTO "vertical_crs" VALUES('EPSG','8358','Baltic 1957 depth',NULL,'EPSG','6498','EPSG','1202',0);
@@ -584,7 +588,3 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5614','KOC WD depth (ft)',NULL,'EPSG',
INSERT INTO "usage" VALUES('EPSG','4083','vertical_crs','EPSG','5614','EPSG','3267','EPSG','1205');
INSERT INTO "vertical_crs" VALUES('EPSG','6358','NAVD88 depth (ftUS)',NULL,'EPSG','1043','EPSG','5103',0);
INSERT INTO "usage" VALUES('EPSG','4592','vertical_crs','EPSG','6358','EPSG','3664','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','8051','MSL depth (ft)',NULL,'EPSG','6495','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5601','vertical_crs','EPSG','8051','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_crs" VALUES('EPSG','8053','MSL depth (ftUS)',NULL,'EPSG','1043','EPSG','5100',0);
INSERT INTO "usage" VALUES('EPSG','5603','vertical_crs','EPSG','8053','EPSG','1245','EPSG','1199');
+2 -2
View File
@@ -66,7 +66,7 @@ The following command-line options can appear in any order:
.. option:: -f <format>
Where *format* is a printf format string to control the output form of the
geographic coordinate values. The default mode is DMS.
geographic coordinate and azimuth values. The default mode is DMS.
.. option:: -F <format>
@@ -122,7 +122,7 @@ Input geographic coordinates (latitude and longitude) and
azimuthal data must be in decimal degrees or DMS format and
input distance data must be in units consistent with the ellipsoid
major axis or sphere radius units. The latitude must lie
in the range [-90d,90d]. Output geographic coordinates will be
in the range [-90d,90d]. Output geographic coordinates and azimuths will be
in DMS (if the :option:`-f` switch is not employed) to 0.001" with trailing,
zero-valued minute-second fields deleted. Output distance
data will be in the same units as the ellipsoid or sphere
+5 -5
View File
@@ -26,13 +26,13 @@ author = "PROJ contributors"
version = "9.6"
# The full project version, used as the replacement for |release|
release = "9.6.0-dev"
release = "9.6.2"
# PROJ-data version
data_version = "1.20"
data_version = "1.22"
today_date = date.today()
# today_date = date(Y, M, D) # or use a specific date
#today_date = date.today()
today_date = date(2025, 6, 2) # or use a specific date
today_fmt = "%d %b %Y"
copyright = "1983-{}, PROJ contributors".format(today_date.year)
@@ -136,7 +136,7 @@ html_context = {
"theme_vcs_pageview_mode": "edit",
"github_user": "OSGeo",
"github_repo": "PROJ",
"github_version": "master",
"github_version": "9.6",
"conf_py_path": "/docs/source/",
}
+11 -3
View File
@@ -26,8 +26,8 @@ Download
Current Release
--------------------------------------------------------------------------------
* **2024-12-01** `proj-9.5.1.tar.gz`_ (`md5`_)
* **2024-12-01** `proj-data-1.20.tar.gz`_
* **2025-06-02** `proj-9.6.1.tar.gz`_ (`md5`_)
* **2025-06-02** `proj-data-1.22.tar.gz`_
.. note::
@@ -40,6 +40,8 @@ Current Release
Past Releases
--------------------------------------------------------------------------------
* **2025-03-15** `proj-9.6.0.tar.gz`_
* **2024-12-01** `proj-9.5.1.tar.gz`_
* **2024-09-15** `proj-9.5.0.tar.gz`_
* **2024-06-01** `proj-9.4.1.tar.gz`_
* **2024-03-01** `proj-9.4.0.tar.gz`_
@@ -79,6 +81,8 @@ Past Releases
* **2015-09-13** `proj-4.9.2.tar.gz`_
* **2015-03-04** `proj-4.9.1.tar.gz`_
* **2025-03-15** `proj-data-1.21.tar.gz`_
* **2024-12-01** `proj-data-1.20.tar.gz`_
* **2024-09-15** `proj-data-1.19.tar.gz`_
* **2024-06-01** `proj-data-1.18.tar.gz`_
* **2024-06-01** `proj-data-1.17.tar.gz`_
@@ -120,7 +124,9 @@ Past Releases
* **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
.. _`md5`: https://download.osgeo.org/proj/proj-9.5.1.tar.gz.md5
.. _`md5`: https://download.osgeo.org/proj/proj-9.6.1.tar.gz.md5
.. _`proj-9.6.1.tar.gz`: https://download.osgeo.org/proj/proj-9.6.1.tar.gz
.. _`proj-9.6.0.tar.gz`: https://download.osgeo.org/proj/proj-9.6.0.tar.gz
.. _`proj-9.5.1.tar.gz`: https://download.osgeo.org/proj/proj-9.5.1.tar.gz
.. _`proj-9.5.0.tar.gz`: https://download.osgeo.org/proj/proj-9.5.0.tar.gz
.. _`proj-9.4.1.tar.gz`: https://download.osgeo.org/proj/proj-9.4.1.tar.gz
@@ -162,6 +168,8 @@ Past Releases
.. _`proj-4.9.2.tar.gz`: https://download.osgeo.org/proj/proj-4.9.2.tar.gz
.. _`proj-4.9.3.tar.gz`: https://download.osgeo.org/proj/proj-4.9.3.tar.gz
.. _`proj-data-1.22.tar.gz`: https://download.osgeo.org/proj/proj-data-1.22.tar.gz
.. _`proj-data-1.21.tar.gz`: https://download.osgeo.org/proj/proj-data-1.21.tar.gz
.. _`proj-data-1.20.tar.gz`: https://download.osgeo.org/proj/proj-data-1.20.tar.gz
.. _`proj-data-1.19.tar.gz`: https://download.osgeo.org/proj/proj-data-1.19.tar.gz
.. _`proj-data-1.18.tar.gz`: https://download.osgeo.org/proj/proj-data-1.18.tar.gz
+122
View File
@@ -3,6 +3,128 @@
News
###############################################################################
9.6.1
++++++++++++++++++++
*June 2nd 2025*
Updates
-------
* Update EPSG to 12.012 (`#4498 <https://github.com/OSGeo/PROJ/issues/4498>`_)
* Update ESRI CRS DB to ArcGIS Pro 3.5 (`#4493 <https://github.com/OSGeo/PROJ/issues/4493>`_)
* Add an option to ship PDB files (`#4505 <https://github.com/OSGeo/PROJ/issues/4505>`_)
Bug Fixes
---------
* Deal with South Orientated TMerc presented as regular TMerc but with Scale_Factor=-1 (`#4427 <https://github.com/OSGeo/PROJ/issues/4427>`_)
* Add missing 'limits' and 'algorithm' includes (`#4444 <https://github.com/OSGeo/PROJ/issues/4444>`_)
* CMake: avoid detection of C23 ``#embed`` on too old compilers (`#4463 <https://github.com/OSGeo/PROJ/issues/4463>`_)
* :cpp:func:`createOperations()`: for NAD83(CSRS)[x] to NAD83(CSRS)[y], do not go through NAD83 (`#4467 <https://github.com/OSGeo/PROJ/issues/4467>`_)
* Add missing include for ``uint32_t`` on Windows with gcc 15.1 (`#4478 <https://github.com/OSGeo/PROJ/issues/4478>`_)
* :cpp:func:`getGeoidModels`: use ``vertical_crs.datum_code`` to get vcrss that uses different units (`#4480 <https://github.com/OSGeo/PROJ/issues/4480>`_)
* :cpp:func:`FileManager::open_resource_file()`: honour known URLs from ``grid_alternatives`` that don't point to cdn.proj.org (`#4481 <https://github.com/OSGeo/PROJ/issues/4481>`_)
* :cpp:func:`createOperationsCompoundToGeog()`: avoid bringing non-sensical transformations (`#4494 <https://github.com/OSGeo/PROJ/issues/4494>`_)
* Bug correction in Wagner VI projection parameters (`#4453 <https://github.com/OSGeo/PROJ/issues/4453>`_)
* C++: Fix bare ``isnan()`` to ``std::isnan()`` (`#4472 <https://github.com/OSGeo/PROJ/issues/4472>`_)
* Database: fix duplicated entries with auxiliary database (`#4482 <https://github.com/OSGeo/PROJ/issues/4482>`_)
* Use ``std::abs`` instead of ``abs`` for NetBSD (`#4486 <https://github.com/OSGeo/PROJ/issues/4486>`_)
* Fix Windows build when both :envvar:`EMBED_RESOURCE_FILES` and :envvar:`USE_ONLY_EMBEDDED_RESOURCE_FILES` are set (`#4508 <https://github.com/OSGeo/PROJ/issues/4508>`_)
9.6.0
++++++++++++++++++++
*March 15th 2025*
Updates
-------
* :program:`projinfo`: display whether an operation is time-dependent (`#4255 <https://github.com/OSGeo/PROJ/issues/4255>`_)
* Add CMake options ``EMBED_RESOURCE_FILES`` and ``USE_ONLY_EMBEDDED_RESOURCE_FILES`` for ``proj.db`` and ``proj.ini`` embedding (`#4265 <https://github.com/OSGeo/PROJ/issues/4265>`_, `#4274 <https://github.com/OSGeo/PROJ/issues/4274>`_)
* Database: ingest deprecated ESRI names to be able to better import old WKT ESRI (`#4282 <https://github.com/OSGeo/PROJ/issues/4282>`_)
* :c:func:`proj_factors()`: enhance speed when called repeatedly on same compound or projected CRS (`#4289 <https://github.com/OSGeo/PROJ/issues/4289>`_)
* Add Airocean projection (formerly Dymaxion) (`#4303 <https://github.com/OSGeo/PROJ/issues/4303>`_)
* :cpp:func:`createOperations()`: Optimization by avoiding database lookups for CRS (typically PROJ strings) using unknown datums (`#4320 <https://github.com/OSGeo/PROJ/issues/4320>`_)
* PROJJSON export: for a Projected CRS, add an explicit type=GeographicCRS/GeodeticCRS members to the base_crs member (`#4331 <https://github.com/OSGeo/PROJ/issues/4331>`_)
* :c:func:`proj_trans_bounds()`: make it work when target CRS is a CompoundCRS (`#4333 <https://github.com/OSGeo/PROJ/issues/4333>`_)
* :cpp:func:`createOperations()`: do Helmert transformation in 2D when one of source or target CRS is compound (`#4337 <https://github.com/OSGeo/PROJ/issues/4337>`_)
* Map EPSG method 'Vertical Offset by Grid Interpolation (asc)' to ``+proj=vgridshift`` (`#4344 <https://github.com/OSGeo/PROJ/issues/4344>`_)
* Add support for 'Coordinate Frame rotation full matrix (geocen)' and Coordinate Frame rotation full matrix (geog2D)' methods (`#4348 <https://github.com/OSGeo/PROJ/issues/4348>`_)
* Add a CMake ``EMBED_RESOURCE_DIRECTORY`` option to embed .tif/.json files in to libproj (`#4349 <https://github.com/OSGeo/PROJ/issues/4349>`_, `#4373 <https://github.com/OSGeo/PROJ/issues/4373>`_)
* Take into account new EPSG methods 'Cartesian Grid Offsets by TIN Interpolation (JSON)' and 'Vertical Offset by TIN Interpolation (JSON)' (`#4353 <https://github.com/OSGeo/PROJ/issues/4353>`_)
* Added an option ``native_ca`` to ``proj.ini`` and an environment variable :envvar:`PROJ_NATIVE_CA` to be able to configure curl to use the operating system CA store. (`#4356 <https://github.com/OSGeo/PROJ/issues/4356>`_)
* Database: add an optional ``step_direction`` column to the ``concatenated_operation_step`` table (`#4357 <https://github.com/OSGeo/PROJ/issues/4357>`_)
* Database: replicate EGM2008 grid transformation record to WGS 84 realizations (`#4363 <https://github.com/OSGeo/PROJ/issues/4363>`_)
* Improve ETRFxxx to ETRFyyy, and WGS 84 (xxx) to WGS 84 (yyy) (`#4364 <https://github.com/OSGeo/PROJ/issues/4364>`_)
* Build: Update to C++17 version (`#4366 <https://github.com/OSGeo/PROJ/issues/4366>`_, `#4369 <https://github.com/OSGeo/PROJ/issues/4369>`_)
* Add bash completion script for projinfo (`#4371 <https://github.com/OSGeo/PROJ/issues/4371>`_)
* Dispatch content of ``4D_api.cpp`` into multiple .cpp files (`#4393 <https://github.com/OSGeo/PROJ/issues/4393>`_)
* Add :c:func:`proj_trans_bounds_3D()` (`#4394 <https://github.com/OSGeo/PROJ/issues/4394>`_)
* Database: add a ``engineering_datum`` and ``engineering_crs`` tables; import few related EPSG records (`#4396 <https://github.com/OSGeo/PROJ/issues/4396>`_)
* NKG transformations: Add support for EUREF-FIN in Finish transformations (`#4399 <https://github.com/OSGeo/PROJ/issues/4399>`_)
* Add Spilhaus projection (`#4401 <https://github.com/OSGeo/PROJ/issues/4401>`_)
* Export ESRI:54099 `WGS_1984_Spilhaus_Ocean_Map_in_Square` as PROJ string (`#4402 <https://github.com/OSGeo/PROJ/issues/4402>`_)
* Database: update to EPSG v12.004 (`#4413 <https://github.com/OSGeo/PROJ/issues/4413>`_)
* :c:func:`proj_download_file()`: invalidate in-memory caches related to downloaded file (for the current context) (`#4414 <https://github.com/OSGeo/PROJ/issues/4414>`_)
Bug Fixes
---------
* :cpp:func:`createObjectsFromName()`: be more tolerant about N/S vs North/South, absence of zone or height (`#4318 <https://github.com/OSGeo/PROJ/issues/4318>`_)
* :cpp:func:`createFromPROJString`: avoid repeated openings of proj.db and proj.ini and lookup of 'epsg' (`#4334 <https://github.com/OSGeo/PROJ/issues/4334>`_)
* Debugging/internals: append sub-grid index to grid name when opening a multi-grid TIFF file (`#4381 <https://github.com/OSGeo/PROJ/issues/4381>`_)
* :cpp:func:`createOperations()`: use more appropriate operation when using a 'PROJ {grid_name}' geoid model, based on matching the vertical datum (`#4379 <https://github.com/OSGeo/PROJ/issues/4379>`_)
* :c:func:`proj_clone()`: properly propagate ``errorIfBestTransformationNotAvailable`` and other flags from source object (`#4382 <https://github.com/OSGeo/PROJ/issues/4382>`_)
* Inverse ``+proj=cass``: fix non-convergence on inputs where easting=false_easting or northing=false_northing (`#4386 <https://github.com/OSGeo/PROJ/issues/4386>`_)
* Fix typo in parameter for ITRF97 in ITRF2014 file (`#4408 <https://github.com/OSGeo/PROJ/issues/4408>`_)
9.5.1. Release Notes
++++++++++++++++++++
*December 1st 2024*
+34 -2
View File
@@ -59,6 +59,13 @@ is more complex, involving initial steps projecting from the ellipsoid to anothe
curved surface, the "aposphere", then projection from the aposphere to the skew
uv-plane, before finally rectifying the skew uv-plane onto the map XY plane.
.. note::
In certain special circumstances of the ellipsoidal form of the Oblique
Mercator it is possible for two different input coordinates to project to the
same output coordinate. This can happen when the input coordinates are far away
from the projection center. A work around is to use the spherical version of the
projection instead. See an example in the Usage section below.
Usage
########
@@ -91,7 +98,7 @@ projections are limiting forms of the Oblique Mercator
$ echo 12 55 | proj +proj=tmerc +R=6400000
766869.97 6209742.96
Example: Second case - indirectly given azimuth
::
@@ -116,6 +123,31 @@ The input coordinate represents the System 34 datum point "Agri Bavnehoj", with
This use case represents a datum shift from a cylinder projection on an old, slightly
misaligned datum, to a similar projection on a modern datum.
Example: Non-unique results of the ellipsoidal form
::
proj +proj=omerc +lat_0=0.377041113875403 +lonc=33.8250934444081 +alpha=8.16321575614333 +gamma=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 << EOF
-146.23 -78.19112222222222
-145.02309217 -78.19112222
EOF
875464.92 -11348616.86
875464.92 -11348616.86
Here we see that two coordinates with roughly a difference in latitude of about
a degree results in the same projected coordinate. As mention above, a work around
is to use the spherical form instead:
::
proj +proj=omerc +lat_0=0.377041113875403 +lonc=33.8250934444081 +alpha=8.16321575614333 +gamma=0 +k=1 +x_0=0 +y_0=0 +ellps=sphere << EOF
-146.23 -78.19112222222222
-145.02309217 -78.19112222
EOF
891266.38 -11376037.53
863563.62 -11374939.17
Parameters
################################################################################
@@ -178,7 +210,7 @@ Optional
No rectification (not "no rotation" as one may well assume).
Do not take the last step from the skew uv-plane to the map
XY plane.
.. note:: This option is probably only marginally useful, but remains for (mostly) historical reasons.
.. option:: +no_off
+3
View File
@@ -169,12 +169,15 @@ of a "object usage" class. An object usage has the following optional members:
- ``area``: (optional) value of type string which describes a geographic area
over which a CRS or coordinate operation is applicable. e.g. "World"
- ``bbox``: (optional) value of type object, with 4 required members:
* ``east_longitude``: (required) number expressing the longitude in degrees of the eastern most part of the extent, within [-180,180] range.
* ``west_longitude``: (required) number expressing the longitude in degrees of the western most part of the extent, within [-180,180] range.. For an extent crossing the anti-meridian, west_longitude is lower than east_longitude.
* ``south_latitude``: (required) number expressing the latitude in degrees of the southern most part of the extent, within [-90,90] range.
* ``north_latitude``: (required) number expressing the latitude in degrees of the northern most part of the extent, within [-90,90] range.
The coordinates are expressed in a unspecified datum, with the longitudes
relative to the international reference meridian.
- ``remarks``: (optional) value of type string with an informative text that does
not modify the defining parameters of the object. e.g "Use NTv2 file for better accuracy"
- ``id`` (mutually exclusive with ``ids``): (optional) Identifier of the object, as defined in :ref:`identifiers`
+9
View File
@@ -274,6 +274,7 @@ duplicateBreak
d'utilisation
dx
dy
Dymaxion
eastBoundLongitude
easting
eastings
@@ -365,6 +366,7 @@ generalization
generalized
geobotanical
geoc
geocen
geocent
geocentriques
geod
@@ -374,10 +376,12 @@ Geodesique
geodesist
geodesists
geodeticCRS
GeodeticCRS
geodtest
GEOGCRS
geogoffset
geographicCRS
GeographicCRS
Geographique
geographiques
geoid
@@ -841,6 +845,7 @@ Selftest
selftests
semimajor
semiminor
sensical
serialization
serialized
serverless
@@ -930,6 +935,7 @@ timespan
tinshift
Tissot
tmerc
TMerc
Tobler
tobmerc
toFullyQualifiedName
@@ -981,6 +987,7 @@ vandg
Vanua
vcpkg
Vcpkg
vcrss
VDatum
vendored
Vening
@@ -1029,6 +1036,7 @@ xmax
xmin
xml
xoff
xxx
xxxNNPtr
xxxx
XXXX
@@ -1036,6 +1044,7 @@ xyzgridshift
ymax
ymin
yoff
yyy
yyyymmdd
Zajaç
zenodo
+6 -6
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CCT" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "CCT" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
cct \- Coordinate Conversion and Transformation
.SH SYNOPSIS
@@ -54,13 +54,13 @@ a proj\-string,
.IP \(bu 2
a WKT string,
.IP \(bu 2
an object code (like "EPSG:1671" "urn:ogc:def:coordinateOperation:EPSG::1671"),
an object code (like \(dqEPSG:1671\(dq \(dqurn:ogc:def:coordinateOperation:EPSG::1671\(dq),
.IP \(bu 2
an object name. e.g. "ITRF2014 to ETRF2014 (1)". In that case as
an object name. e.g. \(dqITRF2014 to ETRF2014 (1)\(dq. In that case as
uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match.
.IP \(bu 2
a OGC URN combining references for concatenated operations
(e.g. "\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP")
(e.g. \(dq\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP\(dq)
.IP \(bu 2
a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.4/projjson.schema.json\fP
.UNINDENT
@@ -165,7 +165,7 @@ Usage varies with operation.
\fI\%cct\fP is an acronym meaning \fICoordinate Conversion and Transformation\fP\&.
.sp
The acronym refers to definitions given in the OGC 08\-015r2/ISO\-19111
standard "Geographical Information \-\- Spatial Referencing by Coordinates",
standard \(dqGeographical Information \-\- Spatial Referencing by Coordinates\(dq,
which defines two different classes of \fIcoordinate operations\fP:
.sp
\fICoordinate Conversions\fP, which are coordinate operations where input
@@ -322,7 +322,7 @@ Coordinate operation referenced through its name
.sp
.nf
.ft C
$ echo 3541657.3778 948984.2343 5201383.5231 2020.5 | cct "ITRF2014 to ETRF2014 (1)"
$ echo 3541657.3778 948984.2343 5201383.5231 2020.5 | cct \(dqITRF2014 to ETRF2014 (1)\(dq
3541657.9112 948983.7503 5201383.2482 2020.5000
.ft P
.fi
+16 -16
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CS2CS" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "CS2CS" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
cs2cs \- Cartographic coordinate system filter
.SH SYNOPSIS
@@ -54,29 +54,29 @@ a proj\-string,
.IP \(bu 2
a WKT string,
.IP \(bu 2
an object code (like "EPSG:4326", "urn:ogc:def:crs:EPSG::4326",
"urn:ogc:def:coordinateOperation:EPSG::1671"),
an object code (like \(dqEPSG:4326\(dq, \(dqurn:ogc:def:crs:EPSG::4326\(dq,
\(dqurn:ogc:def:coordinateOperation:EPSG::1671\(dq),
.IP \(bu 2
an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that case as
an Object name. e.g \(dqWGS 84\(dq, \(dqWGS 84 / UTM zone 31N\(dq. In that case as
uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match.
.IP \(bu 2
a CRS name and a coordinate epoch, separated with \(aq@\(aq. For example "\fI\%ITRF2014@2025.0\fP". (\fIadded in 9.2\fP)
a CRS name and a coordinate epoch, separated with \(aq@\(aq. For example \(dq\fI\%ITRF2014@2025.0\fP\(dq. (\fIadded in 9.2\fP)
.IP \(bu 2
a OGC URN combining references for compound coordinate reference systems
(e.g "\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP" or custom abbreviated
syntax "EPSG:2393+5717"),
(e.g \(dq\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP\(dq or custom abbreviated
syntax \(dqEPSG:2393+5717\(dq),
.IP \(bu 2
a OGC URN combining references for references for projected or derived CRSs
e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)":
"\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP"
e.g. for Projected 3D CRS \(dqUTM zone 31N / WGS 84 (3D)\(dq:
\(dq\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP\(dq
(\fIadded in 6.2\fP)
.IP \(bu 2
a OGC URN combining references for concatenated operations
(e.g. "\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP")
(e.g. \(dq\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP\(dq)
.IP \(bu 2
a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.4/projjson.schema.json\fP (\fIadded in 6.2\fP)
.IP \(bu 2
a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (\fIadded in 7.1\fP)
a compound CRS made from two object names separated with \(dq + \(dq. e.g. \(dqWGS 84 + EGM96 height\(dq (\fIadded in 7.1\fP)
.UNINDENT
.sp
New in version 6.0.0.
@@ -189,7 +189,7 @@ third.
Where \fIformat\fP is a printf format string to control the form of the output values.
For inverse projections, the output will be in degrees when this option is
employed. If a format is specified for inverse projection the output data
will be in decimal degrees. The default format is \fB"%.2f"\fP for forward
will be in decimal degrees. The default format is \fB\(dq%.2f\(dq\fP for forward
projection and DMS for inverse.
.UNINDENT
.INDENT 0.0
@@ -219,7 +219,7 @@ New in version 8.0.0.
.sp
Specify an area of interest to restrict the results when researching
coordinate operations between 2 CRS. The area of interest can be specified either
as a name (e.g "Denmark \- onshore") or a AUTHORITY:CODE (EPSG:3237)
as a name (e.g \(dqDenmark \- onshore\(dq) or a AUTHORITY:CODE (EPSG:3237)
.sp
This option is mutually exclusive with \fI\%\-\-bbox\fP\&.
.UNINDENT
@@ -296,7 +296,7 @@ This option is mutually exclusive with \fI\%\-\-bbox\fP\&.
New in version 9.1.
.sp
"Promote" 2D CRS(s) to their 3D version, where the vertical axis is the
\(dqPromote\(dq 2D CRS(s) to their 3D version, where the vertical axis is the
ellipsoidal height in metres, using the ellipsoid of the base geodetic CRS.
Depending on PROJ versions and the exact nature of the CRS involved,
especially before PROJ 9.1, a mix of 2D and 3D CRS could lead to 2D or 3D
@@ -378,7 +378,7 @@ The following script
.nf
.ft C
cs2cs +proj=latlong +datum=NAD83 +to +proj=utm +zone=10 +datum=NAD27 \-r <<EOF
45°15\(aq33.1" 111.5W
45°15\(aq33.1\(dq 111.5W
45d15.551666667N \-111d30
+45.25919444444 111d30\(aq000w
EOF
@@ -494,7 +494,7 @@ UTM Zone 31N/WGS 84 with WGS84 ellipsoidal height
.sp
.nf
.ft C
echo 45 2 0 | cs2cs "WGS 84 + EGM96 height" "WGS 84 / UTM zone 31N" \-\-3d
echo 45 2 0 | cs2cs \(dqWGS 84 + EGM96 height\(dq \(dqWGS 84 / UTM zone 31N\(dq \-\-3d
.ft P
.fi
.UNINDENT
+8 -8
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "GEOD" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "GEOD" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
geod \- Geodesic computations
.SH SYNOPSIS
@@ -86,13 +86,13 @@ option. (Default units are meters.)
.TP
.B \-f <format>
Where \fIformat\fP is a printf format string to control the output form of the
geographic coordinate values. The default mode is DMS.
geographic coordinate and azimuth values. The default mode is DMS.
.UNINDENT
.INDENT 0.0
.TP
.B \-F <format>
Where \fIformat\fP is a printf format string to control the output form of the distance
value. The default mode is \fB"%.3f"\fP\&.
value. The default mode is \fB\(dq%.3f\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
@@ -140,8 +140,8 @@ Input geographic coordinates (latitude and longitude) and
azimuthal data must be in decimal degrees or DMS format and
input distance data must be in units consistent with the ellipsoid
major axis or sphere radius units. The latitude must lie
in the range [\-90d,90d]. Output geographic coordinates will be
in DMS (if the \fI\%\-f\fP switch is not employed) to 0.001" with trailing,
in the range [\-90d,90d]. Output geographic coordinates and azimuths will be
in DMS (if the \fI\%\-f\fP switch is not employed) to 0.001\(dq with trailing,
zero\-valued minute\-second fields deleted. Output distance
data will be in the same units as the ellipsoid or sphere
radius.
@@ -189,7 +189,7 @@ which gives the results:
.sp
.nf
.ft C
\-66d31\(aq50.141" 75d39\(aq13.083" 2587.504
\-66d31\(aq50.141\(dq 75d39\(aq13.083\(dq 2587.504
.ft P
.fi
.UNINDENT
@@ -206,7 +206,7 @@ and determine Portland\(aqs location by azimuth and distance:
.nf
.ft C
geod +ellps=clrk66 +units=us\-mi <<EOF
42d15\(aqN 71d07\(aqW \-66d31\(aq50.141" 2587.504
42d15\(aqN 71d07\(aqW \-66d31\(aq50.141\(dq 2587.504
EOF
.ft P
.fi
@@ -219,7 +219,7 @@ which gives:
.sp
.nf
.ft C
45d31\(aq0.003"N 123d40\(aq59.985"W 75d39\(aq13.094"
45d31\(aq0.003\(dqN 123d40\(aq59.985\(dqW 75d39\(aq13.094\(dq
.ft P
.fi
.UNINDENT
+6 -6
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "GIE" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "GIE" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
gie \- The Geospatial Integrity Investigation Environment
.SH SYNOPSIS
@@ -343,7 +343,7 @@ expect 12 55 0 0
.UNINDENT
.UNINDENT
.sp
The default direction is "forward".
The default direction is \(dqforward\(dq.
.UNINDENT
.INDENT 0.0
.TP
@@ -458,7 +458,7 @@ end with the space character followed by backslash to mark the continuation.
<gie\-strict>
# This is a comment. The following line with multiple repeated characters too
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
# A command on several lines must use " \e" continuation
# A command on several lines must use \(dq \e\(dq continuation
operation proj=hgridshift +grids=nzgd2kgrid0005.gsb \e
ellps=GRS80
tolerance 1 mm
@@ -474,8 +474,8 @@ expect 173 \-45
.UNINDENT
.SH BACKGROUND
.sp
More importantly than being an acronym for "Geospatial Integrity Investigation
Environment", gie were also the initials, user id, and USGS email address of
More importantly than being an acronym for \(dqGeospatial Integrity Investigation
Environment\(dq, gie were also the initials, user id, and USGS email address of
Gerald Ian Evenden (1935\-\-2016), the geospatial visionary, who, already in the
1980s, started what was to become the PROJ of today.
.sp
@@ -497,7 +497,7 @@ call like \fBhypot(x,y)\fP\&.
.sp
While today, we may have more formally well defined metadata systems (most
prominent the OGC WKT2 representation), nothing comes close being as easily
readable ("human compatible") as Gerald\(aqs key\-value system. This system in
readable (\(dqhuman compatible\(dq) as Gerald\(aqs key\-value system. This system in
particular, and the PROJ system in general, was Gerald\(aqs great gift to anyone
using and/or communicating about geodata.
.sp
+8 -8
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PROJ" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "PROJ" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
proj \- Cartographic projection filter
.SH SYNOPSIS
@@ -163,7 +163,7 @@ reciprocal value of \fImult\fP is employed.
.B \-f <format>
Where \fIformat\fP is a printf format string to control the form of the output values.
For inverse projections, the output will be in degrees when this option is
employed. The default format is \fB"%.2f"\fP for forward projection and DMS for
employed. The default format is \fB\(dq%.2f\(dq\fP for forward projection and DMS for
inverse.
.UNINDENT
.INDENT 0.0
@@ -202,7 +202,7 @@ default directory for a file reference without an absolute path. This is
also used for supporting files like datum shift files.
.sp
New in version 9.3.0: \fI{crs}\fP is one of the possibilities accepted by :c:\fBproj_create()\fP, provided it
expresses a projected CRS, like a WKT string, an object code (like "EPSG:32632")
expresses a projected CRS, like a WKT string, an object code (like \(dqEPSG:32632\(dq)
a PROJJSON string, etc.
The projection computed will be those of the map projection implied by
the transformation from the base geographic CRS of the projected CRS to the projected CRS.
@@ -218,7 +218,7 @@ portions of the input line are appended to the output line.
Input geographic data (longitude and latitude) must be in DMS or decimal degrees format and input
cartesian data must be in units consistent with the ellipsoid major axis or
sphere radius units. Output geographic coordinates will be in DMS (if the
\fB\-w\fP switch is not employed) and precise to 0.001" with trailing, zero\-valued
\fB\-w\fP switch is not employed) and precise to 0.001\(dq with trailing, zero\-valued
minute\-second fields deleted.
.SH EXAMPLE
.sp
@@ -229,7 +229,7 @@ The following script
.nf
.ft C
proj +proj=utm +zone=12 \-r <<EOF
45d15\(aq33.1" 111.5W
45d15\(aq33.1\(dq 111.5W
45d15.551666667N \-111d30
+45.25919444444 111d30\(aq000w
EOF
@@ -268,8 +268,8 @@ EOF
.UNINDENT
.UNINDENT
.sp
Will perform the projection of the coordinates in "NAD83(2011) / California zone 4"
(\fIEPSG:6421\fP) into its geographic system, "NAD83(2011)", showing the expanded annotated listing.
Will perform the projection of the coordinates in \(dqNAD83(2011) / California zone 4\(dq
(\fIEPSG:6421\fP) into its geographic system, \(dqNAD83(2011)\(dq, showing the expanded annotated listing.
The output will appear as:
.INDENT 0.0
.INDENT 3.5
@@ -294,7 +294,7 @@ Parallel scale (k) : 1.00004382 ( 0.004382 % error )
Areal scale (s): 1.00008765 ( 0.008765 % error )
Angular distortion (w): 0.000
Meridian/Parallel angle: 90.00000
Convergence : \-0d35\(aq47.714" [ \-0.59658715 ]
Convergence : \-0d35\(aq47.714\(dq [ \-0.59658715 ]
Max\-min (Tissot axis a\-b) scale error: 1.00004 1.00004
.ft P
.fi
+122 -122
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PROJINFO" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "PROJINFO" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
projinfo \- Geodetic object and coordinate operation queries
.SH SYNOPSIS
@@ -70,39 +70,39 @@ a proj\-string,
.IP \(bu 2
a WKT string,
.IP \(bu 2
an object code (like "EPSG:4326", "urn:ogc:def:crs:EPSG::4326",
"urn:ogc:def:coordinateOperation:EPSG::1671"),
an object code (like \(dqEPSG:4326\(dq, \(dqurn:ogc:def:crs:EPSG::4326\(dq,
\(dqurn:ogc:def:coordinateOperation:EPSG::1671\(dq),
.IP \(bu 2
an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that case as
an Object name. e.g \(dqWGS 84\(dq, \(dqWGS 84 / UTM zone 31N\(dq. In that case as
uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match.
.IP \(bu 2
a CRS name and a coordinate epoch, separated with \(aq@\(aq. For example "\fI\%ITRF2014@2025.0\fP". (\fIadded in 9.2\fP)
a CRS name and a coordinate epoch, separated with \(aq@\(aq. For example \(dq\fI\%ITRF2014@2025.0\fP\(dq. (\fIadded in 9.2\fP)
.IP \(bu 2
a OGC URN combining references for compound coordinate reference systems
(e.g "\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP" or custom abbreviated
syntax "EPSG:2393+5717"),
(e.g \(dq\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP\(dq or custom abbreviated
syntax \(dqEPSG:2393+5717\(dq),
.IP \(bu 2
a OGC URN combining references for references for projected or derived CRSs
e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)":
"\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP"
e.g. for Projected 3D CRS \(dqUTM zone 31N / WGS 84 (3D)\(dq:
\(dq\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP\(dq
(\fIadded in 6.2\fP)
.IP \(bu 2
Extension of OGC URN for CoordinateMetadata.
e.g. "\fI\%urn:ogc:def:CoordinateMetadata:NRCAN::NAD83_CSRS_1997_MTM11_HT2_1997\fP"
e.g. \(dq\fI\%urn:ogc:def:CoordinateMetadata:NRCAN::NAD83_CSRS_1997_MTM11_HT2_1997\fP\(dq
.IP \(bu 2
a OGC URN combining references for concatenated operations
(e.g. "\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP")
(e.g. \(dq\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP\(dq)
.IP \(bu 2
a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.4/projjson.schema.json\fP (\fIadded in 6.2\fP)
.IP \(bu 2
a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (\fIadded in 7.1\fP)
a compound CRS made from two object names separated with \(dq + \(dq. e.g. \(dqWGS 84 + EGM96 height\(dq (\fIadded in 7.1\fP)
.UNINDENT
.sp
{object_reference} is a filename preceded by the \(aq@\(aq character. The
file referenced by the {object_reference} must contain a valid
{object_definition}.
.sp
The usage of "{srs_def} {srs_def}" is equivalent to "\-s {srs_def} \-t {srs_def}" (\fIadded in 9.5\fP).
The usage of \(dq{srs_def} {srs_def}\(dq is equivalent to \(dq\-s {srs_def} \-t {srs_def}\(dq (\fIadded in 9.5\fP).
.UNINDENT
.UNINDENT
.SH DESCRIPTION
@@ -182,7 +182,7 @@ potentially compatible of being piped in other utilities.
.B \-\-area name_or_code
Specify an area of interest to restrict the results when researching
coordinate operations between 2 CRS. The area of interest can be specified either
as a name (e.g "Denmark \- onshore") or a AUTHORITY:CODE (EPSG:3237)
as a name (e.g \(dqDenmark \- onshore\(dq) or a AUTHORITY:CODE (EPSG:3237)
This option is exclusive of \fI\%\-\-bbox\fP\&.
.sp
\fBNOTE:\fP
@@ -439,7 +439,7 @@ A visual alternative is the webpage
New in version 6.3.
.sp
"Promote" 2D CRS(s) to their 3D version, where the vertical axis is the
\(dqPromote\(dq 2D CRS(s) to their 3D version, where the vertical axis is the
ellipsoidal height in metres, using the ellipsoid of the base geodetic CRS.
Depending on PROJ versions and the exact nature of the CRS involved,
especially before PROJ 9.1, a mix of 2D and 3D CRS could lead to 2D or 3D
@@ -543,24 +543,24 @@ PROJ.4 string:
+proj=longlat +datum=WGS84 +no_defs +type=crs
WKT2:2019 string:
GEOGCRS["WGS 84",
DATUM["World Geodetic System 1984",
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
GEOGCRS[\(dqWGS 84\(dq,
DATUM[\(dqWorld Geodetic System 1984\(dq,
ELLIPSOID[\(dqWGS 84\(dq,6378137,298.257223563,
LENGTHUNIT[\(dqmetre\(dq,1]]],
PRIMEM[\(dqGreenwich\(dq,0,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
AXIS[\(dqgeodetic latitude (Lat)\(dq,north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
AXIS[\(dqgeodetic longitude (Lon)\(dq,east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
USAGE[
SCOPE["unknown"],
AREA["World"],
SCOPE[\(dqunknown\(dq],
AREA[\(dqWorld\(dq],
BBOX[\-90,\-180,90,180]],
ID["EPSG",4326]]
ID[\(dqEPSG\(dq,4326]]
.ft P
.fi
.UNINDENT
@@ -575,7 +575,7 @@ and NAD83 (designed with its EPSG code 4269) within an area of interest
.sp
.nf
.ft C
projinfo \-s NAD27 \-t EPSG:4269 \-\-area "USA \- Missouri"
projinfo \-s NAD27 \-t EPSG:4269 \-\-area \(dqUSA \- Missouri\(dq
.ft P
.fi
.UNINDENT
@@ -595,43 +595,43 @@ PROJ string:
+step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1
WKT2:2019 string:
COORDINATEOPERATION["NAD27 to NAD83 (1)",
COORDINATEOPERATION[\(dqNAD27 to NAD83 (1)\(dq,
SOURCECRS[
GEOGCRS["NAD27",
DATUM["North American Datum 1927",
ELLIPSOID["Clarke 1866",6378206.4,294.978698213898,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
GEOGCRS[\(dqNAD27\(dq,
DATUM[\(dqNorth American Datum 1927\(dq,
ELLIPSOID[\(dqClarke 1866\(dq,6378206.4,294.978698213898,
LENGTHUNIT[\(dqmetre\(dq,1]]],
PRIMEM[\(dqGreenwich\(dq,0,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
AXIS[\(dqgeodetic latitude (Lat)\(dq,north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
AXIS[\(dqgeodetic longitude (Lon)\(dq,east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]]]],
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]]]],
TARGETCRS[
GEOGCRS["NAD83",
DATUM["North American Datum 1983",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
GEOGCRS[\(dqNAD83\(dq,
DATUM[\(dqNorth American Datum 1983\(dq,
ELLIPSOID[\(dqGRS 1980\(dq,6378137,298.257222101,
LENGTHUNIT[\(dqmetre\(dq,1]]],
PRIMEM[\(dqGreenwich\(dq,0,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
AXIS[\(dqgeodetic latitude (Lat)\(dq,north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
AXIS[\(dqgeodetic longitude (Lon)\(dq,east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]]]],
METHOD["CTABLE2"],
PARAMETERFILE["Latitude and longitude difference file","conus"],
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]]]],
METHOD[\(dqCTABLE2\(dq],
PARAMETERFILE[\(dqLatitude and longitude difference file\(dq,\(dqconus\(dq],
OPERATIONACCURACY[0.15],
USAGE[
SCOPE["unknown"],
AREA["USA \- CONUS including EEZ"],
SCOPE[\(dqunknown\(dq],
AREA[\(dqUSA \- CONUS including EEZ\(dq],
BBOX[23.81,\-129.17,49.38,\-65.69]],
ID["DERIVED_FROM(EPSG)",1241]]
ID[\(dqDERIVED_FROM(EPSG)\(dq,1241]]
.ft P
.fi
.UNINDENT
@@ -658,44 +658,44 @@ Output:
.nf
.ft C
{
"type": "GeographicCRS",
"name": "GDA94",
"datum": {
"type": "GeodeticReferenceFrame",
"name": "Geocentric Datum of Australia 1994",
"ellipsoid": {
"name": "GRS 1980",
"semi_major_axis": 6378137,
"inverse_flattening": 298.257222101
\(dqtype\(dq: \(dqGeographicCRS\(dq,
\(dqname\(dq: \(dqGDA94\(dq,
\(dqdatum\(dq: {
\(dqtype\(dq: \(dqGeodeticReferenceFrame\(dq,
\(dqname\(dq: \(dqGeocentric Datum of Australia 1994\(dq,
\(dqellipsoid\(dq: {
\(dqname\(dq: \(dqGRS 1980\(dq,
\(dqsemi_major_axis\(dq: 6378137,
\(dqinverse_flattening\(dq: 298.257222101
}
},
"coordinate_system": {
"subtype": "ellipsoidal",
"axis": [
\(dqcoordinate_system\(dq: {
\(dqsubtype\(dq: \(dqellipsoidal\(dq,
\(dqaxis\(dq: [
{
"name": "Geodetic latitude",
"abbreviation": "Lat",
"direction": "north",
"unit": "degree"
\(dqname\(dq: \(dqGeodetic latitude\(dq,
\(dqabbreviation\(dq: \(dqLat\(dq,
\(dqdirection\(dq: \(dqnorth\(dq,
\(dqunit\(dq: \(dqdegree\(dq
},
{
"name": "Geodetic longitude",
"abbreviation": "Lon",
"direction": "east",
"unit": "degree"
\(dqname\(dq: \(dqGeodetic longitude\(dq,
\(dqabbreviation\(dq: \(dqLon\(dq,
\(dqdirection\(dq: \(dqeast\(dq,
\(dqunit\(dq: \(dqdegree\(dq
}
]
},
"area": "Australia \- GDA",
"bbox": {
"south_latitude": \-60.56,
"west_longitude": 93.41,
"north_latitude": \-8.47,
"east_longitude": 173.35
\(dqarea\(dq: \(dqAustralia \- GDA\(dq,
\(dqbbox\(dq: {
\(dqsouth_latitude\(dq: \-60.56,
\(dqwest_longitude\(dq: 93.41,
\(dqnorth_latitude\(dq: \-8.47,
\(dqeast_longitude\(dq: 173.35
},
"id": {
"authority": "EPSG",
"code": 4283
\(dqid\(dq: {
\(dqauthority\(dq: \(dqEPSG\(dq,
\(dqcode\(dq: 4283
}
}
.ft P
@@ -712,11 +712,11 @@ Exporting the SQL statements to insert a new CRS in an auxiliary database.
.nf
.ft C
# Get the SQL statements for a custom CRS
projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" \-\-output\-id HOBU:MY_CRS \-o SQL \-q > my_crs.sql
projinfo \(dq+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs\(dq \-\-output\-id HOBU:MY_CRS \-o SQL \-q > my_crs.sql
cat my_crs.sql
# Initialize an auxiliary database with the schema of the reference database
echo ".schema" | sqlite3 /path/to/proj.db | sqlite3 aux.db
echo \(dq.schema\(dq | sqlite3 /path/to/proj.db | sqlite3 aux.db
# Append the content of the definition of HOBU:MY_CRS
sqlite3 aux.db < my_crs.db
@@ -735,7 +735,7 @@ or more simply:
.nf
.ft C
# Create an auxiliary database with the definition of a custom CRS.
projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" \-\-output\-id HOBU:MY_CRS \-\-dump\-db\-structure | sqlite3 aux.db
projinfo \(dq+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs\(dq \-\-output\-id HOBU:MY_CRS \-\-dump\-db\-structure | sqlite3 aux.db
# Check that everything works OK
projinfo \-\-aux\-db\-path aux.db HOBU:MY_CRS
@@ -769,44 +769,44 @@ PROJ.4 string:
+proj=merc +lat_ts=5 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +type=crs
WKT2:2019 string:
PROJCRS["my_crs",
BASEGEOGCRS["unknown",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
PROJCRS[\(dqmy_crs\(dq,
BASEGEOGCRS[\(dqunknown\(dq,
ENSEMBLE[\(dqWorld Geodetic System 1984 ensemble\(dq,
MEMBER[\(dqWorld Geodetic System 1984 (Transit)\(dq],
MEMBER[\(dqWorld Geodetic System 1984 (G730)\(dq],
MEMBER[\(dqWorld Geodetic System 1984 (G873)\(dq],
MEMBER[\(dqWorld Geodetic System 1984 (G1150)\(dq],
MEMBER[\(dqWorld Geodetic System 1984 (G1674)\(dq],
MEMBER[\(dqWorld Geodetic System 1984 (G1762)\(dq],
ELLIPSOID[\(dqWGS 84\(dq,6378137,298.257223563,
LENGTHUNIT[\(dqmetre\(dq,1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["HOBU","GEODETIC_CRS_MY_CRS"]],
CONVERSION["unknown",
METHOD["Mercator (variant B)",
ID["EPSG",9805]],
PARAMETER["Latitude of 1st standard parallel",5,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8823]],
PARAMETER["Longitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["False easting",0,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",0,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
PRIMEM[\(dqGreenwich\(dq,0,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433]],
ID[\(dqHOBU\(dq,\(dqGEODETIC_CRS_MY_CRS\(dq]],
CONVERSION[\(dqunknown\(dq,
METHOD[\(dqMercator (variant B)\(dq,
ID[\(dqEPSG\(dq,9805]],
PARAMETER[\(dqLatitude of 1st standard parallel\(dq,5,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433],
ID[\(dqEPSG\(dq,8823]],
PARAMETER[\(dqLongitude of natural origin\(dq,0,
ANGLEUNIT[\(dqdegree\(dq,0.0174532925199433],
ID[\(dqEPSG\(dq,8802]],
PARAMETER[\(dqFalse easting\(dq,0,
LENGTHUNIT[\(dqmetre\(dq,1],
ID[\(dqEPSG\(dq,8806]],
PARAMETER[\(dqFalse northing\(dq,0,
LENGTHUNIT[\(dqmetre\(dq,1],
ID[\(dqEPSG\(dq,8807]]],
CS[Cartesian,2],
AXIS["(E)",east,
AXIS[\(dq(E)\(dq,east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["(N)",north,
LENGTHUNIT[\(dqmetre\(dq,1]],
AXIS[\(dq(N)\(dq,north,
ORDER[2],
LENGTHUNIT["metre",1]],
ID["HOBU","MY_CRS"]]
LENGTHUNIT[\(dqmetre\(dq,1]],
ID[\(dqHOBU\(dq,\(dqMY_CRS\(dq]]
.ft P
.fi
.UNINDENT
@@ -833,7 +833,7 @@ Output:
.nf
.ft C
WKT1:GDAL string:
PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","25832"]]
PROJCS[\(dqETRS89 / UTM zone 32N\(dq,GEOGCS[\(dqETRS89\(dq,DATUM[\(dqEuropean_Terrestrial_Reference_System_1989\(dq,SPHEROID[\(dqGRS 1980\(dq,6378137,298.257222101,AUTHORITY[\(dqEPSG\(dq,\(dq7019\(dq]],AUTHORITY[\(dqEPSG\(dq,\(dq6258\(dq]],PRIMEM[\(dqGreenwich\(dq,0,AUTHORITY[\(dqEPSG\(dq,\(dq8901\(dq]],UNIT[\(dqdegree\(dq,0.0174532925199433,AUTHORITY[\(dqEPSG\(dq,\(dq9122\(dq]],AUTHORITY[\(dqEPSG\(dq,\(dq4258\(dq]],PROJECTION[\(dqTransverse_Mercator\(dq],PARAMETER[\(dqlatitude_of_origin\(dq,0],PARAMETER[\(dqcentral_meridian\(dq,9],PARAMETER[\(dqscale_factor\(dq,0.9996],PARAMETER[\(dqfalse_easting\(dq,500000],PARAMETER[\(dqfalse_northing\(dq,0],UNIT[\(dqmetre\(dq,1,AUTHORITY[\(dqEPSG\(dq,\(dq9001\(dq]],AXIS[\(dqEasting\(dq,EAST],AXIS[\(dqNorthing\(dq,NORTH],AUTHORITY[\(dqEPSG\(dq,\(dq25832\(dq]]
.ft P
.fi
.UNINDENT
+1 -1
View File
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "PROJSYNC" "1" "15 Mar 2025" "9.6" "PROJ"
.TH "PROJSYNC" "1" "02 juin 2025" "9.6" "PROJ"
.SH NAME
projsync \- Downloading tool of resource files
.SH SYNOPSIS
+93 -13
View File
@@ -101,19 +101,17 @@ VALUES
('portugal/DLX_ETRS89_geo','pt_dgt_DLx_ETRS89_geo.tif','DLX_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL),
('portugal/D73_ETRS89_geo','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL),
('netherlands/rdtrans2008','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL),
('uk/OSTN15_NTv2','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',1 -- reverse direction
,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL),
('canada/GS7783','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL),
('spain/100800401','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL),
('australia/QLD_0900','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), -- From https://www.dnrme.qld.gov.au/__data/assets/pdf_file/0006/105765/gday-21-user-guide.pdf: "Note that the Queensland grid QLD_0900.gsb produces identical results to the National AGD84 grid for the equivalent coverage."
('spain/PENR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL),
('spain/BALR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL),
('spain/peninsula','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL);
('spain/peninsula','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL),
('spain/baleares','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL);
-- 'france/RGNC1991_IGN72GrandeTerre' : we have a 3D geocentric corresponding one: no need for mapping
-- 'france/RGNC1991_NEA74Noumea' : we have a 3D geocentric corresponding one: no need for mapping
"""
def escape_literal(x):
return x.replace("'", "''")
@@ -305,7 +303,8 @@ def import_spheroid():
assert unit_size == 1, 'Unhandled spheroid unit size: {}'.format(unit_size)
description = row[idx_description]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
if esri_name not in map_spheroid_esri_name_to_auth_code:
map_spheroid_esri_name_to_auth_code[esri_name] = [
@@ -406,7 +405,8 @@ def import_prime_meridian():
assert angle_unit == 'Degree', 'Unhandled prime meridian unit: {}'.format(angle_unit)
assert unit_size == 0.0174532925199433, 'Unhandled prime meridian unit size: {}'.format(unit_size)
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
if esri_name not in map_pm_esri_name_to_auth_code:
map_pm_esri_name_to_auth_code[esri_name] = ['ESRI', code]
@@ -503,7 +503,8 @@ def import_datum():
all_sql.append(sql)
description = row[idx_description]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
map_datum_esri_to_parameters[code] = {
'esri_name': esri_name,
@@ -528,7 +529,8 @@ def import_datum():
ellps_auth_name, ellps_code = map_spheroid_esri_name_to_auth_code[ellps_name]
description = row[idx_description]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
map_datum_esri_to_parameters[code] = {
'esri_name': esri_name,
@@ -692,7 +694,8 @@ def import_geogcs():
else:
geodetic_crs_type = "geographic 2D"
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
extent_auth_name, extent_code = find_extent(
row[idx_areaname], row[idx_slat], row[idx_nlat], row[idx_llon], row[idx_rlon])
@@ -1448,7 +1451,8 @@ def import_projcs():
map_projcs_esri_name_to_auth_code[esri_name] = ['ESRI', code]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
method = parsed_conv_wkt2['CONVERSION'][0]
@@ -1682,7 +1686,8 @@ def import_vdatum():
map_vdatum_esri_name_to_auth_code[esri_name] = ['ESRI', wkid]
description = row[idx_description]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
map_vdatum_esri_to_parameters[wkid] = {
'esri_name': esri_name,
@@ -1841,7 +1846,8 @@ def import_vertcs():
continue
datum_auth_name, datum_code = map_datum_esri_name_to_auth_code[datum_name]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
extent_auth_name, extent_code = find_extent(
row[idx_areaname], row[idx_slat], row[idx_nlat], row[idx_llon], row[idx_rlon])
@@ -2109,6 +2115,8 @@ def import_geogtran():
idx_accuracy = header.index('accuracy')
assert idx_accuracy >= 0
set_names = set()
while True:
try:
row = next(reader)
@@ -2120,7 +2128,8 @@ def import_geogtran():
authority = row[idx_authority]
esri_name = row[idx_name]
wkt2 = row[idx_wkt2]
deprecated = 1 if row[idx_deprecated] == 'yes' else 0
assert row[idx_deprecated] in ('yes', 'codechange', 'no')
deprecated = 1 if row[idx_deprecated] in ('yes', 'codechange') else 0
if authority == 'EPSG':
@@ -2154,6 +2163,11 @@ def import_geogtran():
# print('Skipping deprecated GEOGTRAN %s' % esri_name)
continue
if esri_name in set_names:
print(f'Skipping ESRI:{wkid} since transformation with same name {esri_name} already found!')
continue
set_names.add(esri_name)
parsed_wkt2 = parse_wkt_array(wkt2)
assert 'COORDINATEOPERATION' in parsed_wkt2
@@ -2599,11 +2613,77 @@ import_geogtran() # transformations between GeogCRS
script_dir_name = os.path.dirname(os.path.realpath(__file__))
sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql')
old_aliases = """-------------------
-- ESRI old aliases
-------------------
-- Changed in ArcGIS Pro 3.0
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6181','D_Luxembourg_1930','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4181','GCS_Luxembourg_1930','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','2169','Luxembourg_1930_Gauss','ESRI_OLD');
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5774','NG_L','ESRI_OLD');
-- Changed in ArcGIS Pro 3.2
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1064','D_SIRGAS-Chile','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1254','D_SIRGAS-Chile','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6737','D_Korea_2000','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4737','GCS_Korea_2000','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4927','Korea_2000_3D','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5342','POSGAR_3D','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5360','GCS_SIRGAS-Chile','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9183','SIRGAS-Chile_3D','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9184','GCS_SIRGAS-Chile','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9308','ATRF2014_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9332','KSA-GRF17_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9379','IGb14_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9469','SRGI2013_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9546','LTF2004(G)_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9695','REDGEOMIN_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9701','ETRF2000-PL_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9754','WGS_84_(G2139)_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9893','LUREF_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20040','SIRGAS-Chile_2021_(3D)','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','2176','ETRS_1989_Poland_CS2000_Zone_5','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','2177','ETRS_1989_Poland_CS2000_Zone_6','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','2178','ETRS_1989_Poland_CS2000_Zone_7','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','2179','ETRS_1989_Poland_CS2000_Zone_8','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','2180','ETRS_1989_Poland_CS92','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5179','Korea_2000_Korea_Unified_Coordinate_System','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5180','Korea_2000_Korea_West_Belt','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5181','Korea_2000_Korea_Central_Belt','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5182','Korea_2000_Korea_Central_Belt_Jeju','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5183','Korea_2000_Korea_East_Belt','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5184','Korea_2000_Korea_East_Sea_Belt','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5185','Korea_2000_Korea_West_Belt_2010','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5186','Korea_2000_Korea_Central_Belt_2010','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5187','Korea_2000_Korea_East_Belt_2010','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5188','Korea_2000_Korea_East_Sea_Belt_2010','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5361','SIRGAS-Chile_UTM_Zone_19S','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','5362','SIRGAS-Chile_UTM_Zone_18S','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','6622','NAD_1983_CSRS_Quebec_Lambert','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','6624','NAD_1983_CSRS_Quebec_Albers','ESRI_OLD');
INSERT INTO alias_name VALUES('projected_crs','EPSG','9377','MAGNA-SIRGAS_Origen-Nacional','ESRI_OLD');
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5193','Incheon_height','ESRI_OLD');
INSERT INTO alias_name VALUES('compound_crs','EPSG','9462','GDA2020_+_AVWS_height','ESRI_OLD');
INSERT INTO alias_name VALUES('compound_crs','EPSG','9463','GDA2020_+_AHD_height','ESRI_OLD');
INSERT INTO alias_name VALUES('compound_crs','EPSG','9464','GDA94_+_AHD_height','ESRI_OLD');
-- Changed in ArcGIS Pro 3.3
INSERT INTO alias_name VALUES('vertical_datum','EPSG','5181','Deutches_Haupthoehennetz_1992','ESRI_OLD');
INSERT INTO alias_name VALUES('vertical_datum','EPSG','5182','Deutches_Haupthoehennetz_1985','ESRI_OLD');
-- Changed in ArcGIS Pro 3.4
INSERT INTO alias_name VALUES('projected_crs','EPSG','9895','LUREF_Luxembourg_TM_(3D)','ESRI_OLD');
-- Changed in ArcGIS Pro 3.5
INSERT INTO alias_name VALUES('vertical_crs','EPSG','3855','EGM2008_Geoid','ESRI_OLD');
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5773','EGM96_Geoid','ESRI_OLD');
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5798','EGM84_Geoid','ESRI_OLD');
"""
f = open(os.path.join(sql_dir_name, 'esri') + '.sql', 'wb')
f.write("--- This file has been generated by scripts/build_db_from_esri.py. DO NOT EDIT !\n\n".encode('UTF-8'))
for sql in all_sql:
f.write((sql + '\n').encode('UTF-8'))
f.write(manual_grids.encode('UTF-8'))
f.write(old_aliases.encode('UTF-8'))
f.close()
print('')
+83
View File
@@ -0,0 +1,83 @@
#!/bin/bash
set -eu
SCRIPT_DIR=$(dirname "$0")
case $SCRIPT_DIR in
"/"*)
;;
".")
SCRIPT_DIR=$(pwd)
;;
*)
SCRIPT_DIR=$(pwd)/$(dirname "$0")
;;
esac
GDAL_ROOT=$SCRIPT_DIR/..
cd "$GDAL_ROOT"
ret_code=0
find src test \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) > /tmp/proj_list_files.txt
echo "Checking for missing #include <algorithm> statements..."
rm -f /tmp/missing_include.txt
while read -r i; do
grep -e std::min -e std::max $i >/dev/null && (grep "#include <algorithm>" $i >/dev/null || echo $i) | tee -a /tmp/missing_include.txt;
done < /tmp/proj_list_files.txt
if test -s /tmp/missing_include.txt; then
echo "FAIL: missing #include <algorithm> in above listed files"
ret_code=1
else
echo "OK."
fi
echo "Checking for missing #include <limits> statements..."
rm -f /tmp/missing_include.txt
while read -r i; do
grep -e std::numeric_limits $i >/dev/null && (grep "#include <limits>" $i >/dev/null || echo $i) | tee -a /tmp/missing_include.txt;
done < /tmp/proj_list_files.txt
if test -s /tmp/missing_include.txt; then
echo "FAIL: missing #include <limits> in above listed files"
ret_code=1
else
echo "OK."
fi
echo "Checking for missing #include <cctype> statements..."
rm -f /tmp/missing_include.txt
while read -r i; do
grep -e std::isalpha $i >/dev/null && (grep "#include <cctype>" $i >/dev/null || echo $i) | tee -a /tmp/missing_include.txt;
done < /tmp/proj_list_files.txt
if test -s /tmp/missing_include.txt; then
echo "FAIL: missing #include <cctype> in above listed files"
ret_code=1
else
echo "OK."
fi
echo "Checking for missing #include <cmath> statements..."
rm -f /tmp/missing_include.txt
while read -r i; do
grep -e std::isnan -e std::isinf -e std::isfinite $i >/dev/null && (grep "#include <cmath>" $i >/dev/null || echo $i) | tee -a /tmp/missing_include.txt;
done < /tmp/proj_list_files.txt
if test -s /tmp/missing_include.txt; then
echo "FAIL: missing #include <cmath> in above listed files"
ret_code=1
else
echo "OK."
fi
rm -f /tmp/missing_include.txt
rm -f /tmp/proj_list_files.txt
exit $ret_code
+1 -1
View File
@@ -1,4 +1,4 @@
#!/bin/bash
# Hashbang deliberately missing because this file should be sourced, not executed
function_exists() {
declare -f -F "$1" > /dev/null
+1
View File
@@ -29,6 +29,7 @@
#define FROM_PROJ_CPP
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <limits>
+1
View File
@@ -33,6 +33,7 @@
#include <math.h>
#include <algorithm>
#include <limits>
#include "proj/internal/internal.hpp"
+56 -10
View File
@@ -41,6 +41,7 @@
#include <stdlib.h>
#include <algorithm>
#include <cstdint>
#include <limits>
#include <string>
@@ -143,8 +144,6 @@ std::string File::read_line(size_t maxLen, bool &maxLenReached,
// ---------------------------------------------------------------------------
#if !USE_ONLY_EMBEDDED_RESOURCE_FILES
#ifdef _WIN32
/* The bulk of utf8towc()/utf8fromwc() is derived from the utf.c module from
@@ -589,6 +588,12 @@ static std::string Win32Recode(const char *src, unsigned src_code_page,
return out;
}
#endif // _defined(_WIN32)
#if !(EMBED_RESOURCE_FILES && USE_ONLY_EMBEDDED_RESOURCE_FILES)
#ifdef _WIN32
// ---------------------------------------------------------------------------
class FileWin32 : public File {
@@ -728,7 +733,8 @@ std::unique_ptr<File> FileWin32::open(PJ_CONTEXT *ctx, const char *filename,
return nullptr;
}
}
#else
#else // if !defined(_WIN32)
// ---------------------------------------------------------------------------
@@ -798,7 +804,7 @@ unsigned long long FileStdio::tell() {
std::unique_ptr<File> FileStdio::open(PJ_CONTEXT *ctx, const char *filename,
FileAccess access) {
auto fp = fopen(filename, access == FileAccess::READ_ONLY ? "rb"
auto fp = fopen(filename, access == FileAccess::READ_ONLY ? "rb"
: access == FileAccess::READ_UPDATE ? "r+b"
: "w+b");
return std::unique_ptr<File>(fp ? new FileStdio(filename, ctx, fp)
@@ -807,7 +813,7 @@ std::unique_ptr<File> FileStdio::open(PJ_CONTEXT *ctx, const char *filename,
#endif // _WIN32
#endif // !USE_ONLY_EMBEDDED_RESOURCE_FILES
#endif // !(EMBED_RESOURCE_FILES && USE_ONLY_EMBEDDED_RESOURCE_FILES)
// ---------------------------------------------------------------------------
@@ -1854,12 +1860,52 @@ NS_PROJ::FileManager::open_resource_file(PJ_CONTEXT *ctx, const char *name,
!is_rel_or_absolute_filename(name) && !starts_with(name, "http://") &&
!starts_with(name, "https://") &&
proj_context_is_network_enabled(ctx)) {
std::string remote_file(proj_context_get_url_endpoint(ctx));
if (!remote_file.empty()) {
if (remote_file.back() != '/') {
remote_file += '/';
std::string remote_file;
auto dbContext = getDBcontext(ctx);
if (dbContext) {
try {
std::string fullFilename, packageName, url;
bool directDownload = false;
bool openLicense = false;
bool gridAvailable = false;
proj_context_set_enable_network(ctx,
false); // prevent recursion
const bool found = dbContext->lookForGridInfo(
name, /* considerKnownGridsAsAvailable = */ true,
fullFilename, packageName, url, directDownload, openLicense,
gridAvailable);
proj_context_set_enable_network(ctx, true);
if (found && !url.empty() && directDownload) {
remote_file = url;
if (starts_with(url, "https://cdn.proj.org/")) {
const std::string endpoint =
proj_context_get_url_endpoint(ctx);
if (!endpoint.empty()) {
remote_file = endpoint;
if (remote_file.back() != '/') {
remote_file += '/';
}
remote_file += name;
}
}
}
} catch (const std::exception &e) {
proj_context_set_enable_network(ctx, true);
pj_log(ctx, PJ_LOG_DEBUG, "%s", e.what());
return nullptr;
}
remote_file += name;
}
if (remote_file.empty()) {
remote_file = proj_context_get_url_endpoint(ctx);
if (!remote_file.empty()) {
if (remote_file.back() != '/') {
remote_file += '/';
}
remote_file += name;
}
}
if (!remote_file.empty()) {
file =
open(ctx, remote_file.c_str(), NS_PROJ::FileAccess::READ_ONLY);
if (file) {
+3 -1
View File
@@ -45,6 +45,7 @@
#include <cmath>
#include <cstdint>
#include <cstring>
#include <limits>
NS_PROJ_START
@@ -57,7 +58,8 @@ using namespace internal;
/************************************************************************/
static const int byte_order_test = 1;
#define IS_LSB (1 == ((const unsigned char *)(&byte_order_test))[0])
#define IS_LSB \
(1 == (reinterpret_cast<const unsigned char *>(&byte_order_test))[0])
static void swap_words(void *dataIn, size_t word_size, size_t word_count)
+78 -49
View File
@@ -1560,63 +1560,92 @@ bool GeodeticReferenceFrame::_isEquivalentTo(
bool GeodeticReferenceFrame::hasEquivalentNameToUsingAlias(
const IdentifiedObject *other,
const io::DatabaseContextPtr &dbContext) const {
if (nameStr() == other->nameStr() || nameStr() == "unknown" ||
other->nameStr() == "unknown") {
return true;
}
if (ci_starts_with(nameStr(), UNKNOWN_BASED_ON) ||
ci_starts_with(other->nameStr(), UNKNOWN_BASED_ON)) {
return false;
}
if (dbContext) {
if (!identifiers().empty()) {
const auto &id = identifiers().front();
const std::string officialNameFromId = dbContext->getName(
"geodetic_datum", *(id->codeSpace()), id->code());
const auto aliasesResult =
dbContext->getAliases(*(id->codeSpace()), id->code(), nameStr(),
"geodetic_datum", std::string());
const auto compare = [this, other,
&dbContext](const std::string &thisName,
const std::string &otherName) {
if (thisName == otherName || thisName == "unknown" ||
otherName == "unknown") {
return true;
}
const auto isNameMatching =
[&aliasesResult, &officialNameFromId](const std::string &name) {
const char *nameCstr = name.c_str();
if (metadata::Identifier::isEquivalentName(
nameCstr, officialNameFromId.c_str())) {
return true;
} else {
for (const auto &aliasResult : aliasesResult) {
if (metadata::Identifier::isEquivalentName(
nameCstr, aliasResult.c_str())) {
return true;
}
}
}
return false;
};
return isNameMatching(nameStr()) &&
isNameMatching(other->nameStr());
} else if (!other->identifiers().empty()) {
auto otherGRF = dynamic_cast<const GeodeticReferenceFrame *>(other);
if (otherGRF) {
return otherGRF->hasEquivalentNameToUsingAlias(this, dbContext);
}
if (ci_starts_with(thisName, UNKNOWN_BASED_ON) ||
ci_starts_with(otherName, UNKNOWN_BASED_ON)) {
// Note: they cannot be equal based on initial test.
return false;
}
auto aliasesResult =
dbContext->getAliases(std::string(), std::string(), nameStr(),
"geodetic_datum", std::string());
const char *otherName = other->nameStr().c_str();
for (const auto &aliasResult : aliasesResult) {
if (metadata::Identifier::isEquivalentName(otherName,
aliasResult.c_str())) {
return true;
if (dbContext) {
if (!identifiers().empty()) {
const auto &id = identifiers().front();
const std::string officialNameFromId = dbContext->getName(
"geodetic_datum", *(id->codeSpace()), id->code());
const auto aliasesResult = dbContext->getAliases(
*(id->codeSpace()), id->code(), thisName, "geodetic_datum",
std::string());
const auto isNameMatching =
[&aliasesResult,
&officialNameFromId](const std::string &name) {
const char *nameCstr = name.c_str();
if (metadata::Identifier::isEquivalentName(
nameCstr, officialNameFromId.c_str())) {
return true;
} else {
for (const auto &aliasResult : aliasesResult) {
if (metadata::Identifier::isEquivalentName(
nameCstr, aliasResult.c_str())) {
return true;
}
}
}
return false;
};
return isNameMatching(thisName) && isNameMatching(otherName);
} else if (!other->identifiers().empty()) {
auto otherGRF =
dynamic_cast<const GeodeticReferenceFrame *>(other);
if (otherGRF) {
return otherGRF->hasEquivalentNameToUsingAlias(this,
dbContext);
}
return false;
}
auto aliasesResult =
dbContext->getAliases(std::string(), std::string(), thisName,
"geodetic_datum", std::string());
const char *otherNamePtr = otherName.c_str();
for (const auto &aliasResult : aliasesResult) {
if (metadata::Identifier::isEquivalentName(
otherNamePtr, aliasResult.c_str())) {
return true;
}
}
}
return false;
};
// Try to work around issues with Esri style "D_" name prefixing
// Cf https://github.com/OSGeo/PROJ/issues/4514
const bool thisStartsWithDUnderscore = ci_starts_with(nameStr(), "D_");
const bool otherStartsWithDUnderscore =
ci_starts_with(other->nameStr(), "D_");
if (thisStartsWithDUnderscore && !otherStartsWithDUnderscore) {
const std::string thisNameMod = nameStr().substr(2);
return metadata::Identifier::isEquivalentName(
thisNameMod.c_str(), other->nameStr().c_str()) ||
compare(thisNameMod, other->nameStr());
} else if (!thisStartsWithDUnderscore && otherStartsWithDUnderscore) {
const std::string otherNameMod = other->nameStr().substr(2);
return metadata::Identifier::isEquivalentName(nameStr().c_str(),
otherNameMod.c_str()) ||
compare(nameStr(), otherNameMod);
} else {
return compare(nameStr(), other->nameStr());
}
return false;
}
// ---------------------------------------------------------------------------
+208 -184
View File
@@ -1322,18 +1322,30 @@ void DatabaseContext::Private::attachExtraDatabases(
auto l_handle = handle();
assert(l_handle);
auto tables =
run("SELECT name FROM sqlite_master WHERE type IN ('table', 'view') "
"AND name NOT LIKE 'sqlite_stat%'");
std::map<std::string, std::vector<std::string>> tableStructure;
auto tables = run("SELECT name, type, sql FROM sqlite_master WHERE type IN "
"('table', 'view') "
"AND name NOT LIKE 'sqlite_stat%'");
struct TableStructure {
std::string name{};
bool isTable = false;
std::string sql{};
std::vector<std::string> columns{};
};
std::vector<TableStructure> tablesStructure;
for (const auto &rowTable : tables) {
const auto &tableName = rowTable[0];
auto tableInfo = run("PRAGMA table_info(\"" +
replaceAll(tableName, "\"", "\"\"") + "\")");
TableStructure tableStructure;
tableStructure.name = rowTable[0];
tableStructure.isTable = rowTable[1] == "table";
tableStructure.sql = rowTable[2];
auto tableInfo =
run("PRAGMA table_info(\"" +
replaceAll(tableStructure.name, "\"", "\"\"") + "\")");
for (const auto &rowCol : tableInfo) {
const auto &colName = rowCol[1];
tableStructure[tableName].push_back(colName);
tableStructure.columns.push_back(colName);
}
tablesStructure.push_back(std::move(tableStructure));
}
const int nLayoutVersionMajor = l_handle->getLayoutVersionMajor();
@@ -1370,38 +1382,46 @@ void DatabaseContext::Private::attachExtraDatabases(
attachedDbName + '.');
}
for (const auto &pair : tableStructure) {
std::string sql("CREATE TEMP VIEW ");
sql += pair.first;
sql += " AS ";
for (size_t i = 0; i <= auxiliaryDatabasePaths.size(); ++i) {
std::string selectFromAux("SELECT ");
bool firstCol = true;
for (const auto &colName : pair.second) {
if (!firstCol) {
selectFromAux += ", ";
for (const auto &tableStructure : tablesStructure) {
if (tableStructure.isTable) {
std::string sql("CREATE TEMP VIEW ");
sql += tableStructure.name;
sql += " AS ";
for (size_t i = 0; i <= auxiliaryDatabasePaths.size(); ++i) {
std::string selectFromAux("SELECT ");
bool firstCol = true;
for (const auto &colName : tableStructure.columns) {
if (!firstCol) {
selectFromAux += ", ";
}
firstCol = false;
selectFromAux += colName;
}
firstCol = false;
selectFromAux += colName;
}
selectFromAux += " FROM db_";
selectFromAux += toString(static_cast<int>(i));
selectFromAux += ".";
selectFromAux += pair.first;
selectFromAux += " FROM db_";
selectFromAux += toString(static_cast<int>(i));
selectFromAux += ".";
selectFromAux += tableStructure.name;
try {
// Check that the request will succeed. In case of 'sparse'
// databases...
run(selectFromAux + " LIMIT 0");
try {
// Check that the request will succeed. In case of 'sparse'
// databases...
run(selectFromAux + " LIMIT 0");
if (i > 0) {
sql += " UNION ALL ";
if (i > 0) {
if (tableStructure.name == "conversion_method")
sql += " UNION ";
else
sql += " UNION ALL ";
}
sql += selectFromAux;
} catch (const std::exception &) {
}
sql += selectFromAux;
} catch (const std::exception &) {
}
run(sql);
} else {
run(replaceAll(tableStructure.sql, "CREATE VIEW",
"CREATE TEMP VIEW"));
}
run(sql);
}
}
@@ -6910,60 +6930,23 @@ AuthorityFactory::getGeoidModels(const std::string &code) const {
ListOfParams params;
std::string sql;
sql += "SELECT DISTINCT GM0.name "
" FROM geoid_model GM0 "
" FROM geoid_model GM0 "
"INNER JOIN grid_transformation GT0 "
" ON GT0.code = GM0.operation_code "
" AND GT0.auth_name = GM0.operation_auth_name "
" AND GT0.target_crs_code = ? ";
" ON GT0.code = GM0.operation_code "
" AND GT0.auth_name = GM0.operation_auth_name "
" AND GT0.deprecated = 0 "
"INNER JOIN vertical_crs VC0 "
" ON VC0.code = GT0.target_crs_code "
" AND VC0.auth_name = GT0.target_crs_auth_name "
"INNER JOIN vertical_crs VC1 "
" ON VC1.datum_code = VC0.datum_code "
" AND VC1.datum_auth_name = VC0.datum_auth_name "
" AND VC1.code = ? ";
params.emplace_back(code);
if (d->hasAuthorityRestriction()) {
sql += " AND GT0.target_crs_auth_name = ? ";
params.emplace_back(d->authority());
}
/// The second part of the query is for CRSs that use that geoid model via
/// Height Depth Reversal (EPSG:1068) or Change of Vertical Unit (EPSG:1069)
sql += "UNION "
"SELECT DISTINCT GM0.name "
" FROM geoid_model GM0 "
"INNER JOIN grid_transformation GT1 "
" ON GT1.code = GM0.operation_code "
" AND GT1.auth_name = GM0.operation_auth_name "
"INNER JOIN other_transformation OT1 "
" ON OT1.source_crs_code = GT1.target_crs_code "
" AND OT1.source_crs_auth_name = GT1.target_crs_auth_name "
" AND OT1.method_auth_name = 'EPSG' "
" AND OT1.method_code IN (1068, 1069, 1104) "
" AND OT1.target_crs_code = ? ";
params.emplace_back(code);
if (d->hasAuthorityRestriction()) {
sql += " AND OT1.target_crs_auth_name = ? ";
params.emplace_back(d->authority());
}
/// The third part of the query is for CRSs that use that geoid model via
/// other_transformation table twice, like transforming depth and feet
sql += "UNION "
"SELECT DISTINCT GM0.name "
" FROM geoid_model GM0 "
"INNER JOIN grid_transformation GT1 "
" ON GT1.code = GM0.operation_code "
" AND GT1.auth_name = GM0.operation_auth_name "
"INNER JOIN other_transformation OT1 "
" ON OT1.source_crs_code = GT1.target_crs_code "
" AND OT1.source_crs_auth_name = GT1.target_crs_auth_name "
" AND OT1.method_auth_name = 'EPSG' "
" AND OT1.method_code IN (1068, 1069, 1104) "
"INNER JOIN other_transformation OT2 "
" ON OT2.source_crs_code = OT1.target_crs_code "
" AND OT2.source_crs_auth_name = OT1.target_crs_auth_name "
" AND OT2.method_code IN (1068, 1069, 1104) "
" AND OT2.target_crs_code = ? ";
params.emplace_back(code);
if (d->hasAuthorityRestriction()) {
sql += " AND OT2.target_crs_auth_name = ? ";
params.emplace_back(d->authority());
}
sql += " ORDER BY 1 ";
auto sqlRes = d->run(sql, params);
@@ -7459,8 +7442,8 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
return listTmp;
}
const auto CheckIfHasOperations = [=](const std::string &auth_name,
const std::string &code) {
const auto CheckIfHasOperations = [this](const std::string &auth_name,
const std::string &code) {
return !(d->run("SELECT 1 FROM coordinate_operation_view WHERE "
"(source_crs_auth_name = ? AND source_crs_code = ?) OR "
"(target_crs_auth_name = ? AND target_crs_code = ?) "
@@ -7572,6 +7555,10 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
const bool ETRFtoETRF = starts_with(sourceCRS->nameStr(), "ETRF") &&
starts_with(targetCRS->nameStr(), "ETRF");
const bool NAD83_CSRS_to_NAD83_CSRS =
starts_with(sourceCRS->nameStr(), "NAD83(CSRS)") &&
starts_with(targetCRS->nameStr(), "NAD83(CSRS)");
if (allowedIntermediateObjectType == ObjectType::GEOGRAPHIC_CRS) {
const auto &sourceGeogCRS =
dynamic_cast<const crs::GeographicCRS *>(sourceCRS.get());
@@ -7757,31 +7744,39 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
res = filterOutSuperseded(std::move(res));
}
const auto checkPivotForETRFToETRF =
[ETRFtoETRF, &sourceCRS,
&targetCRS](const crs::CRSPtr &intermediateCRS) {
// Make sure that ETRF2000 to ETRF2014 doesn't go through ITRF9x or
// ITRF>2014
if (ETRFtoETRF && intermediateCRS &&
starts_with(intermediateCRS->nameStr(), "ITRF")) {
const auto normalizeDate = [](int v) {
return (v >= 80 && v <= 99) ? v + 1900 : v;
};
const int srcDate = normalizeDate(
atoi(sourceCRS->nameStr().c_str() + strlen("ETRF")));
const int tgtDate = normalizeDate(
atoi(targetCRS->nameStr().c_str() + strlen("ETRF")));
const int intermDate = normalizeDate(
atoi(intermediateCRS->nameStr().c_str() + strlen("ITRF")));
if (srcDate > 0 && tgtDate > 0 && intermDate > 0) {
if (intermDate < std::min(srcDate, tgtDate) ||
intermDate > std::max(srcDate, tgtDate)) {
return false;
}
const auto checkPivot = [ETRFtoETRF, NAD83_CSRS_to_NAD83_CSRS, &sourceCRS,
&targetCRS](const crs::CRSPtr &intermediateCRS) {
// Make sure that ETRF2000 to ETRF2014 doesn't go through ITRF9x or
// ITRF>2014
if (ETRFtoETRF && intermediateCRS &&
starts_with(intermediateCRS->nameStr(), "ITRF")) {
const auto normalizeDate = [](int v) {
return (v >= 80 && v <= 99) ? v + 1900 : v;
};
const int srcDate = normalizeDate(
atoi(sourceCRS->nameStr().c_str() + strlen("ETRF")));
const int tgtDate = normalizeDate(
atoi(targetCRS->nameStr().c_str() + strlen("ETRF")));
const int intermDate = normalizeDate(
atoi(intermediateCRS->nameStr().c_str() + strlen("ITRF")));
if (srcDate > 0 && tgtDate > 0 && intermDate > 0) {
if (intermDate < std::min(srcDate, tgtDate) ||
intermDate > std::max(srcDate, tgtDate)) {
return false;
}
}
return true;
};
}
// Make sure that NAD83(CSRS)[x] to NAD83(CSRS)[y) doesn't go through
// NAD83 generic. Cf https://github.com/OSGeo/PROJ/issues/4464
if (NAD83_CSRS_to_NAD83_CSRS && intermediateCRS &&
(intermediateCRS->nameStr() == "NAD83" ||
intermediateCRS->nameStr() == "WGS 84")) {
return false;
}
return true;
};
for (const auto &row : res) {
const auto &table1 = row[0];
@@ -7801,7 +7796,7 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
targetCRSAuthName, targetCRSCode)) {
continue;
}
if (!checkPivotForETRFToETRF(op1->targetCRS())) {
if (!checkPivot(op1->targetCRS())) {
continue;
}
auto op2 =
@@ -7861,7 +7856,7 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
targetCRSAuthName, targetCRSCode)) {
continue;
}
if (!checkPivotForETRFToETRF(op1->targetCRS())) {
if (!checkPivot(op1->targetCRS())) {
continue;
}
auto op2 =
@@ -7941,7 +7936,7 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
targetCRSAuthName, targetCRSCode)) {
continue;
}
if (!checkPivotForETRFToETRF(op1->sourceCRS())) {
if (!checkPivot(op1->sourceCRS())) {
continue;
}
auto op2 =
@@ -8000,7 +7995,7 @@ AuthorityFactory::createFromCRSCodesWithIntermediates(
targetCRSAuthName, targetCRSCode)) {
continue;
}
if (!checkPivotForETRFToETRF(op1->sourceCRS())) {
if (!checkPivot(op1->sourceCRS())) {
continue;
}
auto op2 =
@@ -8080,6 +8075,10 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
return listTmp;
}
const bool NAD83_CSRS_to_NAD83_CSRS =
starts_with(sourceGeodCRS->nameStr(), "NAD83(CSRS)") &&
starts_with(targetGeodCRS->nameStr(), "NAD83(CSRS)");
const auto GetListCRSWithSameDatum = [this](const crs::GeodeticCRS *crs,
const std::string &crsAuthName,
const std::string &crsCode) {
@@ -8132,78 +8131,85 @@ AuthorityFactory::createBetweenGeodeticCRSWithDatumBasedIntermediates(
}
ListOfParams params;
const auto BuildSQLPart =
[this, &allowedAuthorities, &params, &listSourceCRS,
&listTargetCRS](bool isSourceCRS, bool selectOnTarget) {
std::string situation;
if (isSourceCRS)
situation = "src";
else
situation = "tgt";
if (selectOnTarget)
situation += "_is_tgt";
else
situation += "_is_src";
const std::string prefix1(selectOnTarget ? "source" : "target");
const std::string prefix2(selectOnTarget ? "target" : "source");
std::string sql("SELECT '");
sql += situation;
sql += "' as situation, v.table_name, v.auth_name, "
"v.code, v.name, gcrs.datum_auth_name, gcrs.datum_code, "
"a.west_lon, a.south_lat, a.east_lon, a.north_lat "
"FROM coordinate_operation_view v "
"JOIN geodetic_crs gcrs on gcrs.auth_name = ";
sql += prefix1;
sql += "_crs_auth_name AND gcrs.code = ";
sql += prefix1;
sql += "_crs_code "
const auto BuildSQLPart = [this, NAD83_CSRS_to_NAD83_CSRS,
&allowedAuthorities, &params, &listSourceCRS,
&listTargetCRS](bool isSourceCRS,
bool selectOnTarget) {
std::string situation;
if (isSourceCRS)
situation = "src";
else
situation = "tgt";
if (selectOnTarget)
situation += "_is_tgt";
else
situation += "_is_src";
const std::string prefix1(selectOnTarget ? "source" : "target");
const std::string prefix2(selectOnTarget ? "target" : "source");
std::string sql("SELECT '");
sql += situation;
sql += "' as situation, v.table_name, v.auth_name, "
"v.code, v.name, gcrs.datum_auth_name, gcrs.datum_code, "
"a.west_lon, a.south_lat, a.east_lon, a.north_lat "
"FROM coordinate_operation_view v "
"JOIN geodetic_crs gcrs on gcrs.auth_name = ";
sql += prefix1;
sql += "_crs_auth_name AND gcrs.code = ";
sql += prefix1;
sql += "_crs_code "
"LEFT JOIN usage u ON "
"u.object_table_name = v.table_name AND "
"u.object_auth_name = v.auth_name AND "
"u.object_code = v.code "
"LEFT JOIN extent a "
"ON a.auth_name = u.extent_auth_name AND "
"a.code = u.extent_code "
"WHERE v.deprecated = 0 AND (";
"LEFT JOIN usage u ON "
"u.object_table_name = v.table_name AND "
"u.object_auth_name = v.auth_name AND "
"u.object_code = v.code "
"LEFT JOIN extent a "
"ON a.auth_name = u.extent_auth_name AND "
"a.code = u.extent_code "
"WHERE v.deprecated = 0 AND (";
std::string cond;
std::string cond;
const auto &list = isSourceCRS ? listSourceCRS : listTargetCRS;
for (const auto &row : list) {
if (!cond.empty())
cond += " OR ";
cond += '(';
cond += prefix2;
cond += "_crs_auth_name = ? AND ";
cond += prefix2;
cond += "_crs_code = ?)";
params.emplace_back(row[0]);
params.emplace_back(row[1]);
const auto &list = isSourceCRS ? listSourceCRS : listTargetCRS;
for (const auto &row : list) {
if (!cond.empty())
cond += " OR ";
cond += '(';
cond += prefix2;
cond += "_crs_auth_name = ? AND ";
cond += prefix2;
cond += "_crs_code = ?)";
params.emplace_back(row[0]);
params.emplace_back(row[1]);
}
sql += cond;
sql += ") ";
if (!allowedAuthorities.empty()) {
sql += "AND v.auth_name IN (";
for (size_t i = 0; i < allowedAuthorities.size(); i++) {
if (i > 0)
sql += ',';
sql += '?';
}
sql += cond;
sql += ") ";
if (!allowedAuthorities.empty()) {
sql += "AND v.auth_name IN (";
for (size_t i = 0; i < allowedAuthorities.size(); i++) {
if (i > 0)
sql += ',';
sql += '?';
}
sql += ") ";
for (const auto &allowedAuthority : allowedAuthorities) {
params.emplace_back(allowedAuthority);
}
}
if (d->hasAuthorityRestriction()) {
sql += "AND v.auth_name = ? ";
params.emplace_back(d->authority());
for (const auto &allowedAuthority : allowedAuthorities) {
params.emplace_back(allowedAuthority);
}
}
if (d->hasAuthorityRestriction()) {
sql += "AND v.auth_name = ? ";
params.emplace_back(d->authority());
}
if (NAD83_CSRS_to_NAD83_CSRS) {
// Make sure that NAD83(CSRS)[x] to NAD83(CSRS)[y) doesn't go
// through NAD83 generic. Cf
// https://github.com/OSGeo/PROJ/issues/4464
sql += "AND gcrs.name NOT IN ('NAD83', 'WGS 84') ";
}
return sql;
};
return sql;
};
std::string sql(BuildSQLPart(true, true));
sql += "UNION ALL ";
@@ -9036,8 +9042,12 @@ std::string AuthorityFactory::getOfficialNameFromAlias(
params.push_back(tableName);
}
if (!source.empty()) {
sql += " AND source = ?";
params.push_back(source);
if (source == "ESRI") {
sql += " AND source IN ('ESRI', 'ESRI_OLD')";
} else {
sql += " AND source = ?";
params.push_back(source);
}
}
auto res = d->run(sql, params);
if (res.empty()) {
@@ -9932,12 +9942,12 @@ AuthorityFactory::createProjectedCRSFromExisting(
}
}
std::string sql(
"SELECT projected_crs.auth_name, projected_crs.code FROM projected_crs "
"JOIN conversion_table conv ON "
"projected_crs.conversion_auth_name = conv.auth_name AND "
"projected_crs.conversion_code = conv.code WHERE "
"projected_crs.deprecated = 0 AND ");
std::string sql("SELECT projected_crs.auth_name, projected_crs.code, "
"projected_crs.name FROM projected_crs "
"JOIN conversion_table conv ON "
"projected_crs.conversion_auth_name = conv.auth_name AND "
"projected_crs.conversion_code = conv.code WHERE "
"projected_crs.deprecated = 0 AND ");
ListOfParams params;
if (!candidatesGeodCRS.empty()) {
sql += buildSqlLookForAuthNameCode(candidatesGeodCRS, params,
@@ -10050,6 +10060,20 @@ AuthorityFactory::createProjectedCRSFromExisting(
}
auto sqlRes = d->run(sql, params);
for (const auto &row : sqlRes) {
const auto &name = row[2];
if (metadata::Identifier::isEquivalentName(crs->nameStr().c_str(),
name.c_str())) {
const auto &auth_name = row[0];
const auto &code = row[1];
res.emplace_back(
d->createFactory(auth_name)->createProjectedCRS(code));
}
}
if (!res.empty()) {
return res;
}
params.clear();
sql = "SELECT auth_name, code FROM projected_crs WHERE "
+6
View File
@@ -2412,6 +2412,8 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
codeFromAlias = "6258";
} else if (name == "D_unknown") {
name = "unknown";
} else if (name == "D_Unknown_based_on_WGS_84_ellipsoid") {
name = "Unknown based on WGS 84 ellipsoid";
} else {
tableNameForAlias = "geodetic_datum";
}
@@ -8321,6 +8323,10 @@ WKTParser::attachDatabaseContext(const DatabaseContextPtr &dbContext) {
*/
WKTParser::WKTGuessedDialect
WKTParser::guessDialect(const std::string &inputWkt) noexcept {
// cppcheck complains (rightly) that the method could be static
(void)this;
std::string wkt = inputWkt;
std::size_t idxFirstCharNotSpace = wkt.find_first_not_of(" \t\r\n");
if (idxFirstCharNotSpace > 0 && idxFirstCharNotSpace != std::string::npos) {
+20
View File
@@ -1352,6 +1352,13 @@ std::string Identifier::canonicalizeName(const std::string &str,
continue;
}
}
if (matchesLowerCase(c_str + i, "_IntlFeet") &&
c_str[i + strlen("_IntlFeet")] == 0) {
res += "feet";
break;
}
if (!isIgnoredChar(ch)) {
res.push_back(ch);
}
@@ -1390,6 +1397,18 @@ bool Identifier::isEquivalentName(const char *a, const char *b,
j += 3;
continue;
}
if (matchesLowerCase(a + i, "_IntlFeet") &&
a[i + strlen("_IntlFeet")] == 0 &&
matchesLowerCase(b + j, "_Feet") && b[j + strlen("_Feet")] == 0) {
return true;
} else if (matchesLowerCase(a + i, "_Feet") &&
a[i + strlen("_Feet")] == 0 &&
matchesLowerCase(b + j, "_IntlFeet") &&
b[j + strlen("_IntlFeet")] == 0) {
return true;
}
if (isIgnoredChar(aCh)) {
++i;
continue;
@@ -1475,6 +1494,7 @@ bool Identifier::isEquivalentName(const char *a, const char *b,
j += strlen(replacement->utf8) - 1;
}
}
if (aCh != bCh) {
return false;
}
+33
View File
@@ -3891,6 +3891,8 @@ void Conversion::_exportToPROJString(
bool bConversionDone = false;
bool bEllipsoidParametersDone = false;
bool useApprox = false;
bool insertAxisWSU = false;
bool negateScaleFactor = false;
if (methodEPSGCode == EPSG_CODE_METHOD_TRANSVERSE_MERCATOR) {
// Check for UTM
int zone = 0;
@@ -3909,7 +3911,29 @@ void Conversion::_exportToPROJString(
if (!north) {
formatter->addParam("south");
}
} else if (l_targetCRS &&
parameterValueNumeric(
EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN,
common::UnitOfMeasure::SCALE_UNITY) < 0 &&
parameterValueNumeric(EPSG_CODE_PARAMETER_FALSE_EASTING,
common::UnitOfMeasure::METRE) == 0 &&
parameterValueNumeric(EPSG_NAME_PARAMETER_FALSE_NORTHING,
common::UnitOfMeasure::METRE) == 0) {
// Deal with ESRI:102470 that use Transverse Mercator with k=-1
// to indicate a westing-southing coordinate system, by inserting a
// +axis=wsu and changing k to 1.
auto projCRS =
dynamic_cast<const crs::ProjectedCRS *>(l_targetCRS.get());
if (projCRS) {
const auto &axisList = projCRS->coordinateSystem()->axisList();
if (axisList[0]->direction() == cs::AxisDirection::EAST &&
axisList[1]->direction() == cs::AxisDirection::NORTH) {
insertAxisWSU = true;
negateScaleFactor = true;
}
}
}
} else if (methodEPSGCode ==
EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A) {
const double azimuth =
@@ -4289,6 +4313,10 @@ void Conversion::_exportToPROJString(
}
}
if (insertAxisWSU) {
formatter->addParam("axis", "wsu");
}
if (mapping->epsg_code ==
EPSG_CODE_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B) {
double latitudeStdParallel = parameterValueNumeric(
@@ -4336,6 +4364,11 @@ void Conversion::_exportToPROJString(
strcmp(param->proj_name, "lat_1") == 0) {
formatter->addParam(param->proj_name, valueConverted);
formatter->addParam("lat_0", valueConverted);
} else if (
negateScaleFactor &&
param->epsg_code ==
EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN) {
formatter->addParam(param->proj_name, -valueConverted);
} else {
formatter->addParam(param->proj_name, valueConverted);
}
@@ -6221,6 +6221,7 @@ void CoordinateOperationFactory::Private::createOperationsCompoundToGeog(
std::map<std::string, PairOfTransforms>
cacheHorizToInterpAndInterpToTarget;
bool hasVerticalTransformWithInterpGeogCRS = false;
for (const auto &verticalTransform : verticalTransforms) {
#ifdef TRACE_CREATE_OPERATIONS
ENTER_BLOCK("Considering vertical transform " +
@@ -6414,11 +6415,20 @@ void CoordinateOperationFactory::Private::createOperationsCompoundToGeog(
verticalTransform, interpToTarget,
interpolationGeogCRS, true);
res.emplace_back(op);
hasVerticalTransformWithInterpGeogCRS = true;
} catch (const std::exception &) {
}
}
}
} else {
}
}
for (const auto &verticalTransform : verticalTransforms) {
crs::GeographicCRSPtr interpolationGeogCRS =
getInterpolationGeogCRS(verticalTransform, dbContext);
if (!interpolationGeogCRS &&
(!hasVerticalTransformWithInterpGeogCRS ||
verticalTransform->hasBallparkTransformation())) {
// This case is probably only correct if
// verticalTransform and horizTransform are independent
// and in particular that verticalTransform does not
+1 -1
View File
@@ -58,7 +58,7 @@ double pj_conformal_lat_inverse(double chi, double e, double threshold) {
2 * atan(taninit *
std::pow(((1 + esinphi) / (1 - esinphi)), (e / 2))) -
0.5 * M_PI;
if (abs(new_phi - phi) < threshold) {
if (std::abs(new_phi - phi) < threshold) {
phi = new_phi;
break;
}
-8
View File
@@ -1,13 +1,5 @@
message(STATUS "Configuring proj library:")
##############################################
### SWITCH BETWEEN STATIC OR SHARED LIBRARY###
##############################################
# default config is shared
option(BUILD_SHARED_LIBS
"Build PROJ library shared." ON)
find_package(Threads QUIET)
if(Threads_FOUND AND CMAKE_USE_PTHREADS_INIT)
add_definitions(-DPROJ_HAS_PTHREADS)
+2 -1
View File
@@ -1696,7 +1696,8 @@ static double GetNewRetryDelay(int response_code, double dfOldDelay,
(response_code == 400 && pszErrBuf &&
strstr(pszErrBuf, "RequestTimeout")) ||
(pszCurlError && strstr(pszCurlError, "Connection reset by peer")) ||
(pszCurlError && strstr(pszCurlError, "Connection timed out"))) {
(pszCurlError && strstr(pszCurlError, "Connection timed out")) ||
(pszCurlError && strstr(pszCurlError, "SSL connection timeout"))) {
// Use an exponential backoff factor of 2 plus some random jitter
// We don't care about cryptographic quality randomness, hence:
// coverity[dont_call]
+1 -1
View File
@@ -175,7 +175,7 @@ extern "C" {
/* The version numbers should be updated with every release! **/
#define PROJ_VERSION_MAJOR 9
#define PROJ_VERSION_MINOR 6
#define PROJ_VERSION_PATCH 0
#define PROJ_VERSION_PATCH 2
/* Note: the following 3 defines have been introduced in PROJ 8.0.1 */
/* Macro to compute a PROJ version number from its components */
+2 -4
View File
@@ -594,10 +594,8 @@ struct pj_airocean_data {
double air_ico_trans[23][4][4] = {};
void initialize() {
memcpy((char *)this->ico_faces, (char *)base_ico_faces,
sizeof(pj_face[23]));
memcpy((char *)this->airocean_faces, (char *)base_airocean_faces,
sizeof(pj_face[23]));
memcpy(this->ico_faces, base_ico_faces, sizeof(pj_face[23]));
memcpy(this->airocean_faces, base_airocean_faces, sizeof(pj_face[23]));
memcpy(this->ico_centers, base_ico_centers, sizeof(PJ_XYZ[23]));
memcpy(this->ico_normals, base_ico_normals, sizeof(PJ_XYZ[23]));
memcpy(this->ico_air_trans, base_ico_air_trans,
+2 -2
View File
@@ -87,8 +87,8 @@ PJ *PJ_PROJECTION(wag6) {
return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/);
P->opaque = Q;
Q->C_x = 0.94745;
Q->C_y = 0.94745;
Q->C_x = 1.0;
Q->C_y = 1.0;
Q->A = 0.0;
Q->B = 0.30396355092701331433;
+3 -3
View File
@@ -1,7 +1,7 @@
#include "proj.h"
#include "proj_internal.h"
#include <math.h>
#include <cmath>
PROJ_HEAD(robin, "Robinson") "\n\tPCyl, Sph";
@@ -82,7 +82,7 @@ static PJ_XY robin_s_forward(PJ_LP lp, PJ *P) { /* Spheroidal, forward */
(void)P;
dphi = fabs(lp.phi);
i = isnan(lp.phi) ? -1 : lround(floor(dphi * C1 + 1e-15));
i = std::isnan(lp.phi) ? -1 : lround(floor(dphi * C1 + 1e-15));
if (i < 0) {
proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return xy;
@@ -116,7 +116,7 @@ static PJ_LP robin_s_inverse(PJ_XY xy, PJ *P) { /* Spheroidal, inverse */
}
} else { /* general problem */
/* in Y space, reduce to table interval */
long i = isnan(lp.phi) ? -1 : lround(floor(lp.phi * NODES));
long i = std::isnan(lp.phi) ? -1 : lround(floor(lp.phi * NODES));
if (i < 0 || i >= NODES) {
proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return lp;
+1 -1
View File
@@ -8,6 +8,6 @@
char const pj_release[] = "Rel. " STR(PROJ_VERSION_MAJOR) "." STR(
PROJ_VERSION_MINOR) "." STR(PROJ_VERSION_PATCH) ", "
"March 15th, 2025";
"June 4th, 2025";
const char *pj_get_release() { return pj_release; }
+7 -4
View File
@@ -33,6 +33,9 @@
#include "proj_internal.h"
#include <math.h>
#include <cmath>
#include <limits>
#include "proj/internal/io_internal.hpp"
inline bool pj_coord_has_nans(PJ_COORD coo) {
@@ -549,19 +552,19 @@ size_t proj_trans_generic(PJ *P, PJ_DIRECTION direction, double *x, size_t sx,
/* they tell compilers and static analyzers that we know what we do */
if (nx > 1) {
*x = coord.xyzt.x;
x = (double *)((void *)(((char *)x) + sx));
x = reinterpret_cast<double *>((reinterpret_cast<char *>(x) + sx));
}
if (ny > 1) {
*y = coord.xyzt.y;
y = (double *)((void *)(((char *)y) + sy));
y = reinterpret_cast<double *>((reinterpret_cast<char *>(y) + sy));
}
if (nz > 1) {
*z = coord.xyzt.z;
z = (double *)((void *)(((char *)z) + sz));
z = reinterpret_cast<double *>((reinterpret_cast<char *>(z) + sz));
}
if (nt > 1) {
*t = coord.xyzt.t;
t = (double *)((void *)(((char *)t) + st));
t = reinterpret_cast<double *>((reinterpret_cast<char *>(t) + st));
}
}
+146 -53
View File
@@ -29,12 +29,16 @@
#define FROM_PROJ_CPP
#include "proj.h"
#include "proj/internal/internal.hpp"
#include "proj_internal.h"
#include <math.h>
#include <algorithm>
#include <cmath>
#include <limits>
using namespace NS_PROJ::internal;
// ---------------------------------------------------------------------------
static double simple_min(const double *data, const int arr_len) {
double min_value = data[0];
@@ -296,6 +300,31 @@ static int target_crs_lon_lat_order(PJ_CONTEXT *transformer_ctx,
PJ *target_crs =
get_output_crs(transformer_ctx, transformer_pj, pj_direction);
if (target_crs == nullptr) {
const char *proj_string = proj_as_proj_string(
transformer_ctx, transformer_pj, PJ_PROJ_5, nullptr);
if (pj_direction == PJ_FWD) {
if (ends_with(proj_string,
"+step +proj=unitconvert +xy_in=rad +xy_out=deg")) {
return true;
}
if (ends_with(proj_string,
"+step +proj=unitconvert +xy_in=rad +xy_out=deg "
"+step +proj=axisswap +order=2,1")) {
return false;
}
} else {
if (starts_with(proj_string,
"+proj=pipeline +step +proj=unitconvert +xy_in=deg "
"+xy_out=rad")) {
return true;
}
if (starts_with(proj_string,
"+proj=pipeline +step +proj=axisswap +order=2,1 "
"+step +proj=unitconvert +xy_in=deg +xy_out=rad")) {
return false;
}
}
proj_context_log_debug(transformer_ctx,
"Unable to retrieve target CRS");
return -1;
@@ -336,16 +365,18 @@ static int target_crs_lon_lat_order(PJ_CONTEXT *transformer_ctx,
* transformations along these edges and extracting the outermost bounds.
*
* If the destination CRS is geographic, the first axis is longitude,
* and xmax < xmin then the bounds crossed the antimeridian.
* and *out_xmax < *out_xmin then the bounds crossed the antimeridian.
* In this scenario there are two polygons, one on each side of the
* antimeridian. The first polygon should be constructed with (xmin, ymin, 180,
* ymax) and the second with (-180, ymin, xmax, ymax).
* antimeridian. The first polygon should be constructed with
* (*out_xmin, *out_ymin, 180, ymax) and the second with
* (-180, *out_ymin, *out_xmax, *out_ymax).
*
* If the destination CRS is geographic, the first axis is latitude,
* and ymax < ymin then the bounds crossed the antimeridian.
* and *out_ymax < *out_ymin then the bounds crossed the antimeridian.
* In this scenario there are two polygons, one on each side of the
* antimeridian. The first polygon should be constructed with (ymin, xmin, ymax,
* 180) and the second with (ymin, -180, ymax, xmax).
* antimeridian. The first polygon should be constructed with
* (*out_ymin, *out_xmin, *out_ymax, 180) and the second with
* (*out_ymin, -180, *out_ymax, *out_xmax).
*
* For transformations involving a 3D CRS, consult proj_trans_bounds_3D().
*
@@ -499,39 +530,64 @@ int proj_trans_bounds(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction,
boundary_len, y_boundary_array.data(), sizeof(double),
boundary_len, nullptr, 0, 0, nullptr, 0, 0);
if (output_lon_lat_order) {
// Use GIS frienly order
if (degree_output && !output_lon_lat_order) {
// Use GIS friendly order
std::swap(x_boundary_array, y_boundary_array);
}
bool crossed_antimeridian = false;
if (!degree_output) {
*out_xmin = simple_min(x_boundary_array.data(), boundary_len);
*out_xmax = simple_max(x_boundary_array.data(), boundary_len);
*out_ymin = simple_min(y_boundary_array.data(), boundary_len);
*out_ymax = simple_max(y_boundary_array.data(), boundary_len);
} else if (north_pole_in_bounds) {
*out_xmin = simple_min(x_boundary_array.data(), boundary_len);
*out_ymin = -180;
*out_xmax = 90;
*out_ymax = 180;
*out_xmin = -180;
*out_xmax = 180;
*out_ymin = simple_min(y_boundary_array.data(), boundary_len);
*out_ymax = 90;
} else if (south_pole_in_bounds) {
*out_xmin = -90;
*out_ymin = -180;
*out_xmax = simple_max(x_boundary_array.data(), boundary_len);
*out_ymax = 180;
*out_xmin = -180;
*out_xmax = 180;
*out_ymin = -90;
*out_ymax = simple_max(y_boundary_array.data(), boundary_len);
} else {
*out_xmin = simple_min(x_boundary_array.data(), boundary_len);
*out_xmax = simple_max(x_boundary_array.data(), boundary_len);
*out_ymin = antimeridian_min(y_boundary_array.data(), boundary_len);
*out_ymax = antimeridian_max(y_boundary_array.data(), boundary_len);
*out_xmin = antimeridian_min(x_boundary_array.data(), boundary_len);
*out_xmax = antimeridian_max(x_boundary_array.data(), boundary_len);
crossed_antimeridian = *out_xmin > *out_xmax;
*out_ymin = simple_min(y_boundary_array.data(), boundary_len);
*out_ymax = simple_max(y_boundary_array.data(), boundary_len);
}
if (output_lon_lat_order) {
if (degree_output && !output_lon_lat_order) {
// Go back to CRS axis order
std::swap(*out_xmin, *out_ymin);
std::swap(*out_xmax, *out_ymax);
}
if (!crossed_antimeridian) {
// Sample points within the source grid
for (int j = 1; j < side_pts - 1; ++j) {
for (int i = 0; i < side_pts; ++i) {
x_boundary_array[i] = std::min(xmin, xmax) + i * delta_x;
y_boundary_array[i] = std::min(ymin, ymax) + j * delta_y;
}
proj_trans_generic(P, direction, x_boundary_array.data(),
sizeof(double), side_pts,
y_boundary_array.data(), sizeof(double),
side_pts, nullptr, 0, 0, nullptr, 0, 0);
for (int i = 0; i < side_pts; ++i) {
if (std::isfinite(x_boundary_array[i]) &&
std::isfinite(y_boundary_array[i])) {
*out_xmin = std::min(*out_xmin, x_boundary_array[i]);
*out_xmax = std::max(*out_xmax, x_boundary_array[i]);
*out_ymin = std::min(*out_ymin, y_boundary_array[i]);
*out_ymax = std::max(*out_ymax, y_boundary_array[i]);
}
}
}
}
return true;
}
@@ -830,11 +886,13 @@ int proj_trans_bounds_3D(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction,
boundary_len, z_boundary_array.data(),
sizeof(double), boundary_len, nullptr, 0, 0);
if (output_lon_lat_order) {
// Use GIS frienly order
if (degree_output && !output_lon_lat_order) {
// Use GIS friendly order
std::swap(x_boundary_array, y_boundary_array);
}
bool crossed_antimeridian = false;
if (!degree_output) {
*out_xmin =
std::min(*out_xmin,
@@ -849,45 +907,80 @@ int proj_trans_bounds_3D(PJ_CONTEXT *context, PJ *P, PJ_DIRECTION direction,
std::max(*out_ymax,
simple_max(y_boundary_array.data(), boundary_len));
} else if (north_pole_in_bounds) {
*out_xmin =
std::min(*out_xmin,
simple_min(x_boundary_array.data(), boundary_len));
*out_ymin = -180;
*out_xmax = 90;
*out_ymax = 180;
*out_xmin = -180;
*out_xmax = 180;
*out_ymin =
std::min(*out_ymin,
simple_min(y_boundary_array.data(), boundary_len));
*out_ymax = 90;
} else if (south_pole_in_bounds) {
*out_xmin = -90;
*out_ymin = -180;
*out_xmax =
std::max(*out_xmax,
simple_max(x_boundary_array.data(), boundary_len));
*out_ymax = 180;
*out_xmin = -180;
*out_xmax = 180;
*out_ymin = -90;
*out_ymax =
std::max(*out_ymax,
simple_max(y_boundary_array.data(), boundary_len));
} else {
*out_xmin =
std::min(*out_xmin,
simple_min(x_boundary_array.data(), boundary_len));
*out_xmax =
std::max(*out_xmax,
simple_max(x_boundary_array.data(), boundary_len));
*out_ymin = std::min(
*out_ymin,
antimeridian_min(y_boundary_array.data(), boundary_len));
*out_ymax = std::max(
*out_ymax,
antimeridian_max(y_boundary_array.data(), boundary_len));
*out_xmin = std::min(
*out_xmin,
antimeridian_min(x_boundary_array.data(), boundary_len));
*out_xmax = std::max(
*out_xmax,
antimeridian_max(x_boundary_array.data(), boundary_len));
crossed_antimeridian = *out_xmin > *out_xmax;
*out_ymin =
std::min(*out_ymin,
simple_min(y_boundary_array.data(), boundary_len));
*out_ymax =
std::max(*out_ymax,
simple_max(y_boundary_array.data(), boundary_len));
}
*out_zmin = std::min(
*out_zmin, simple_min(z_boundary_array.data(), boundary_len));
*out_zmax = std::max(
*out_zmax, simple_max(z_boundary_array.data(), boundary_len));
}
}
if (output_lon_lat_order) {
// Go back to CRS axis order
std::swap(*out_xmin, *out_ymin);
std::swap(*out_xmax, *out_ymax);
if (degree_output && !output_lon_lat_order) {
// Go back to CRS axis order
std::swap(*out_xmin, *out_ymin);
std::swap(*out_xmax, *out_ymax);
}
if (!crossed_antimeridian) {
// Sample points within the source grid
for (int j = 1; j < side_pts - 1; ++j) {
for (int i = 0; i < side_pts; ++i) {
x_boundary_array[i] = xmin + i * delta_x;
y_boundary_array[i] = ymin + j * delta_y;
z_boundary_array[i] = z;
}
proj_trans_generic(P, direction, x_boundary_array.data(),
sizeof(double), side_pts,
y_boundary_array.data(), sizeof(double),
side_pts, z_boundary_array.data(),
sizeof(double), side_pts, nullptr, 0, 0);
for (int i = 0; i < side_pts; ++i) {
if (std::isfinite(x_boundary_array[i]) &&
std::isfinite(y_boundary_array[i])) {
*out_xmin =
std::min(*out_xmin, x_boundary_array[i]);
*out_xmax =
std::max(*out_xmax, x_boundary_array[i]);
*out_ymin =
std::min(*out_ymin, y_boundary_array[i]);
*out_ymax =
std::max(*out_ymax, y_boundary_array[i]);
*out_zmin =
std::min(*out_zmin, z_boundary_array[i]);
*out_zmax =
std::max(*out_zmax, z_boundary_array[i]);
}
}
}
}
}
}
return true;
+3
View File
@@ -29,6 +29,9 @@
#error "Should be included only by defmodel.hpp"
#endif
#include <algorithm>
#include <limits>
namespace DEFORMATON_MODEL_NAMESPACE {
// ---------------------------------------------------------------------------
+2 -3
View File
@@ -640,12 +640,11 @@ PJ *PJ_PROJECTION(horner) {
}
}
if (0 == parse_coefs(P, (double *)(Q->fwd_origin), "fwd_origin", 2)) {
if (0 == parse_coefs(P, &(Q->fwd_origin->u), "fwd_origin", 2)) {
proj_log_error(P, _("missing fwd_origin"));
return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
if (has_inv &&
0 == parse_coefs(P, (double *)(Q->inv_origin), "inv_origin", 2)) {
if (has_inv && 0 == parse_coefs(P, &(Q->inv_origin->u), "inv_origin", 2)) {
proj_log_error(P, _("missing inv_origin"));
return horner_freeup(P, PROJ_ERR_INVALID_OP_MISSING_ARG);
}
+2
View File
@@ -29,6 +29,8 @@
#error "Should be included only by tinshift.hpp"
#endif
#include <algorithm>
#include <cmath>
#include <limits>
namespace TINSHIFT_NAMESPACE {
+11 -2
View File
@@ -1811,11 +1811,10 @@ tests:
- args: --list-crs geographic_2d,allow_deprecated --bbox -100,40,-90,41 --spatial-test intersects
grep:
- deprecated
- NAD83\(FBN\)|GCS_IGS08
- NAD83\(FBN\)
sort:
out: |
EPSG:8449 "NAD83(FBN)" [deprecated]
ESRI:104010 "GCS_IGS08" [deprecated]
- args: --list-crs projected --bbox -100,40,-90,41 --spatial-test intersects
grep: (2011).*Missouri East|York
sort:
@@ -1934,3 +1933,13 @@ tests:
- args: -s "Christmas Island Grid 1985" -t "Christmas Island Grid 1985" -o PROJ -q
out: |
+proj=noop
- comment: Test bugfix of https://github.com/OSGeo/PROJ/issues/4464 (NAD83(CSRS) to NAD83(CSRS)v2 should not go through NAD83)
args: -s "NAD83(CSRS)" -t "NAD83(CSRS)v2" --spatial-test intersects --summary
out: |
Candidate operations found: 1
unknown id, Ballpark geographic offset from NAD83(CSRS) to NAD83(CSRS)v2, unknown accuracy, Canada - onshore and offshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon., has ballpark transformation
- comment: Test that EPSG:4979 to EPSG:10645 does not include a non-sensical 'Inverse of Inverse of BES2020 Saba to Saba height (1) + Inverse of Saba to WGS 84 (1) + Saba Transverse Mercator 2020'
args: -s EPSG:4979 -t EPSG:10645 --hide-ballpark --summary
out: |
Candidate operations found: 1
unknown id, Inverse of Saba to WGS 84 (1) + Saba to Saba height (1) + Saba Transverse Mercator 2020, 1.2 m, Bonaire, Sint Eustatius and Saba (BES Islands or Caribbean Netherlands) - Saba - onshore.
+13 -13
View File
@@ -1286,7 +1286,7 @@ expect failure
-------------------------------------------------------------------------------
operation +proj=airocean +orient=horizontal +ellps=GRS80
operation +proj=airocean +orient=horizontal +ellps=GRS80
-------------------------------------------------------------------------------
tolerance 0.1 mm
accept 23 28
@@ -7948,24 +7948,24 @@ expect -0.001968072 -0.000721216
operation +proj=wag6 +a=6400000
-------------------------------------------------------------------------------
tolerance 0.1 mm
accept 2 1
expect 211652.562164410 105831.180787330
accept 2 -1
expect 211652.562164410 -105831.180787330
accept 2 1
expect 223391.801323985 111701.072127637
accept 2 -1
expect 223391.801323985 -111701.072127637
accept -2 1
expect -211652.562164410 105831.180787330
expect -223391.801323985 111701.072127637
accept -2 -1
expect -211652.562164410 -105831.180787330
expect -223391.801323985 -111701.072127637
direction inverse
accept 200 100
expect 0.001889802 0.000944901
accept 200 -100
expect 0.001889802 -0.000944901
accept 200 100
expect 0.001790493 0.000895247
accept 200 -100
expect 0.001790493 -0.000895247
accept -200 100
expect -0.001889802 0.000944901
expect -0.001790493 0.000895247
accept -200 -100
expect -0.001889802 -0.000944901
expect -0.001790493 -0.000895247
===============================================================================
+256 -7
View File
@@ -6223,8 +6223,8 @@ TEST_F(CApi, proj_trans_bounds_antimeridian_xy) {
&out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 1722483.900174921, 1);
EXPECT_NEAR(out_bottom, 5228058.6143420935, 1);
EXPECT_NEAR(out_right, 4624385.494808555, 1);
EXPECT_NEAR(out_bottom, 4795714.1718160734, 1);
EXPECT_NEAR(out_right, 7095599.9757999768, 1);
EXPECT_NEAR(out_top, 8692574.544944234, 1);
double out_left_inv;
double out_bottom_inv;
@@ -6255,10 +6255,10 @@ TEST_F(CApi, proj_trans_bounds_antimeridian) {
proj_trans_bounds(m_ctxt, P, PJ_FWD, -55.95, 160.6, -25.88, -171.2,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 5228058.6143420935, 1);
EXPECT_NEAR(out_left, 4695514.1225397848, 1);
EXPECT_NEAR(out_bottom, 1722483.900174921, 1);
EXPECT_NEAR(out_right, 8692574.544944234, 1);
EXPECT_NEAR(out_top, 4624385.494808555, 1);
EXPECT_NEAR(out_top, 7053083.9457852989, 1);
double out_left_inv;
double out_bottom_inv;
double out_right_inv;
@@ -6327,10 +6327,10 @@ TEST_F(CApi, proj_trans_bounds_ignore_inf) {
proj_trans_bounds(m_ctxt, P, PJ_FWD, -180.0, -90.0, 180.0, 1.3,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 0, 1);
EXPECT_NEAR(out_left, -49621755.4, 1);
EXPECT_NEAR(out_bottom, -116576598.5, 1);
EXPECT_NEAR(out_right, 0, 1);
EXPECT_NEAR(out_top, 0, 1);
EXPECT_NEAR(out_right, 49621755.4, 1);
EXPECT_NEAR(out_top, 50132027.2, 1);
}
// ---------------------------------------------------------------------------
@@ -6543,6 +6543,204 @@ TEST_F(CApi, proj_trans_bounds_to_compound_crs) {
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_from_pipeline_lon_lat_to_x_y) {
// EPSG:4326 to EPSG:3844 in GIS friendly order
auto P = proj_create(
m_ctxt,
"+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step "
"+proj=push +v_3 +step +proj=cart +ellps=WGS84 +step +inv "
"+proj=helmert +x=2.329 +y=-147.042 +z=-92.08 +rx=0.309 +ry=-0.325 "
"+rz=-0.497 +s=5.69 +convention=coordinate_frame +step +inv +proj=cart "
"+ellps=krass +step +proj=pop +v_3 +step +proj=sterea +lat_0=46 "
"+lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass");
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success =
proj_trans_bounds(m_ctxt, P, PJ_INV, 4e5, 4e5, 4.5e5, 4.5e5,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 23.717708, 1e-6);
EXPECT_NEAR(out_bottom, 45.092624, 1e-6);
EXPECT_NEAR(out_right, 24.363125, 1e-6);
EXPECT_NEAR(out_top, 45.547942, 1e-6);
}
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, 23.717708, 45.092624,
24.363125, 45.547942, &out_left,
&out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 4e5, 1e3);
EXPECT_NEAR(out_bottom, 4e5, 1e3);
EXPECT_NEAR(out_right, 4.5e5, 1e3);
EXPECT_NEAR(out_top, 4.5e5, 1e3);
}
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_from_pipeline_lat_lon_to_x_y) {
// EPSG:4326 to EPSG:3844 in authority compliant axis order
auto P = proj_create(
m_ctxt,
"+proj=pipeline +step +proj=axisswap +order=2,1 +step "
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=push +v_3 +step "
"+proj=cart +ellps=WGS84 +step +inv +proj=helmert +x=2.329 +y=-147.042 "
"+z=-92.08 +rx=0.309 +ry=-0.325 +rz=-0.497 +s=5.69 "
"+convention=coordinate_frame +step +inv +proj=cart +ellps=krass +step "
"+proj=pop +v_3 +step +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 "
"+x_0=500000 +y_0=500000 +ellps=krass +step +proj=axisswap +order=2,1");
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success =
proj_trans_bounds(m_ctxt, P, PJ_INV, 4e5, 4e5, 4.5e5, 4.5e5,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 45.092624, 1e-6);
EXPECT_NEAR(out_bottom, 23.717708, 1e-6);
EXPECT_NEAR(out_right, 45.547942, 1e-6);
EXPECT_NEAR(out_top, 24.363125, 1e-6);
}
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success = proj_trans_bounds(m_ctxt, P, PJ_FWD, 45.092624, 23.717708,
45.547942, 24.363125, &out_left,
&out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 4e5, 1e3);
EXPECT_NEAR(out_bottom, 4e5, 1e3);
EXPECT_NEAR(out_right, 4.5e5, 1e3);
EXPECT_NEAR(out_top, 4.5e5, 1e3);
}
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_from_pipeline_x_y_to_lon_lat) {
// EPSG:3844 to EPSG:4326 in GIS friendly order
auto P = proj_create(
m_ctxt,
"+proj=pipeline +step +inv +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 "
"+x_0=500000 +y_0=500000 +ellps=krass +step +proj=push +v_3 +step "
"+proj=cart +ellps=krass +step +proj=helmert +x=2.329 +y=-147.042 "
"+z=-92.08 +rx=0.309 +ry=-0.325 +rz=-0.497 +s=5.69 "
"+convention=coordinate_frame +step +inv +proj=cart +ellps=WGS84 +step "
"+proj=pop +v_3 +step +proj=unitconvert +xy_in=rad +xy_out=deg");
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success =
proj_trans_bounds(m_ctxt, P, PJ_FWD, 4e5, 4e5, 4.5e5, 4.5e5,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 23.717708, 1e-6);
EXPECT_NEAR(out_bottom, 45.092624, 1e-6);
EXPECT_NEAR(out_right, 24.363125, 1e-6);
EXPECT_NEAR(out_top, 45.547942, 1e-6);
}
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success = proj_trans_bounds(m_ctxt, P, PJ_INV, 23.717708, 45.092624,
24.363125, 45.547942, &out_left,
&out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 4e5, 1e3);
EXPECT_NEAR(out_bottom, 4e5, 1e3);
EXPECT_NEAR(out_right, 4.5e5, 1e3);
EXPECT_NEAR(out_top, 4.5e5, 1e3);
}
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_from_pipeline_x_y_to_lat_lon) {
// EPSG:3844 to EPSG:4326 in authority compliant axis order
auto P = proj_create(
m_ctxt,
"+proj=pipeline +step +proj=axisswap +order=2,1 +step +inv "
"+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 "
"+ellps=krass +step +proj=push +v_3 +step +proj=cart +ellps=krass "
"+step +proj=helmert +x=2.329 +y=-147.042 +z=-92.08 +rx=0.309 "
"+ry=-0.325 +rz=-0.497 +s=5.69 +convention=coordinate_frame +step +inv "
"+proj=cart +ellps=WGS84 +step +proj=pop +v_3 +step +proj=unitconvert "
"+xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1");
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success =
proj_trans_bounds(m_ctxt, P, PJ_FWD, 4e5, 4e5, 4.5e5, 4.5e5,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 45.092624, 1e-6);
EXPECT_NEAR(out_bottom, 23.717708, 1e-6);
EXPECT_NEAR(out_right, 45.547942, 1e-6);
EXPECT_NEAR(out_top, 24.363125, 1e-6);
}
{
double out_left;
double out_bottom;
double out_right;
double out_top;
int success = proj_trans_bounds(m_ctxt, P, PJ_INV, 45.092624, 23.717708,
45.547942, 24.363125, &out_left,
&out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, 4e5, 1e3);
EXPECT_NEAR(out_bottom, 4e5, 1e3);
EXPECT_NEAR(out_right, 4.5e5, 1e3);
EXPECT_NEAR(out_top, 4.5e5, 1e3);
}
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_world_geodetic_to_spilhaus) {
auto P = proj_create_crs_to_crs(m_ctxt, "OGC:CRS84", "ESRI:54099", nullptr);
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
double out_left;
double out_bottom;
double out_right;
double out_top;
int success =
proj_trans_bounds(m_ctxt, P, PJ_FWD, -180.0, -90.0, 180.0, 90.0,
&out_left, &out_bottom, &out_right, &out_top, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, -16336432.4, 1);
EXPECT_NEAR(out_bottom, -16605405.9, 1);
EXPECT_NEAR(out_right, 16574104.3, 1);
EXPECT_NEAR(out_top, 16640152.9, 1);
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_3d_densify_0_geog3D_to_proj2D) {
auto P =
proj_create_crs_to_crs(m_ctxt, "EPSG:4979",
@@ -6667,6 +6865,57 @@ TEST_F(CApi, proj_trans_bounds_3d_geocentric_to_geog3D) {
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_3d_geocentric_to_geog2D_lon_lat_ordered) {
auto P = proj_create_crs_to_crs(
m_ctxt, "EPSG:4978", "+proj=longlat +datum=WGS84 +type=crs", nullptr);
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
double xmin;
double ymin;
double xmax;
double ymax;
double zmin;
double zmax;
int success = proj_trans_bounds_3D(
m_ctxt, P, PJ_FWD, 4102234.41, 143362.39, 4790558.75, 4189946.59,
219418.53, 4862865.64, &xmin, &ymin, &zmin, &xmax, &ymax, &zmax, 2);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(xmin, 2, .15);
EXPECT_NEAR(ymin, 49., .15);
EXPECT_NEAR(xmax, 3., .15);
EXPECT_NEAR(ymax, 50, .15);
EXPECT_NEAR(zmin, -57187, 1);
EXPECT_NEAR(zmax, 56862.2, 1);
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_trans_bounds_3D_ignore_inf) {
// cf proj_trans_bounds_ignore_inf
auto P =
proj_create_crs_to_crs(m_ctxt, "OGC:CRS84", "ESRI:102036", nullptr);
ObjectKeeper keeper_P(P);
ASSERT_NE(P, nullptr);
double out_left;
double out_bottom;
double out_right;
double out_top;
double z_min;
double z_max;
int success = proj_trans_bounds_3D(
m_ctxt, P, PJ_FWD, -180.0, -90.0, 0, 180.0, 1.3, 0, &out_left,
&out_bottom, &z_min, &out_right, &out_top, &z_max, 21);
EXPECT_TRUE(success == 1);
EXPECT_NEAR(out_left, -49621755.4, 1);
EXPECT_NEAR(out_bottom, -116576598.5, 1);
EXPECT_NEAR(out_right, 49621755.4, 1);
EXPECT_NEAR(out_top, 50132027.2, 1);
EXPECT_NEAR(z_min, 0, 1);
EXPECT_NEAR(z_max, 0, 1);
}
// ---------------------------------------------------------------------------
TEST_F(CApi, proj_crs_has_point_motion_operation) {
auto ctxt = proj_create_operation_factory_context(m_ctxt, nullptr);
ASSERT_NE(ctxt, nullptr);
+28 -5
View File
@@ -3147,8 +3147,7 @@ TEST(crs, projectedCRS_identify_db) {
"PARAMETER[\"Latitude_Of_Origin\",33],UNIT[\"Meter\",1.0]]");
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
auto factoryAll = AuthorityFactory::create(dbContext, std::string());
auto res = crs->identify(factoryAll);
auto res = crs->identify(factoryEPSG);
ASSERT_EQ(res.size(), 1U);
EXPECT_EQ(res.front().first->getEPSGCode(), 6670);
EXPECT_EQ(res.front().second, 90);
@@ -3519,9 +3518,33 @@ TEST(crs, projectedCRS_identify_db) {
auto allFactory = AuthorityFactory::create(dbContext, std::string());
auto res = crs->identify(allFactory);
ASSERT_GE(res.size(), 1U);
EXPECT_EQ(res.front().first->identifiers()[0]->code(), "102082");
EXPECT_EQ(*(res.front().first->identifiers()[0]->codeSpace()), "ESRI");
EXPECT_EQ(res.front().second, 90);
EXPECT_EQ(res.front().first->identifiers()[0]->code(), "5186");
EXPECT_EQ(*(res.front().first->identifiers()[0]->codeSpace()), "EPSG");
EXPECT_EQ(res.front().second, 100);
}
{
// Identify a WKT ESRI using deprecated ESRI names
// Cf https://github.com/OSGeo/gdal/issues/12511
auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(
"PROJCS[\"NAD_1983_StatePlane_Arizona_Central_FIPS_0202_IntlFeet\","
"GEOGCS[\"GCS_North_American_1983\","
"DATUM[\"D_North_American_1983\","
"SPHEROID[\"GRS_1980\",6378137.0,298.257222101]],"
"PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],"
"PROJECTION[\"Transverse_Mercator\"],"
"PARAMETER[\"False_Easting\",700000.0],"
"PARAMETER[\"False_Northing\",0.0],"
"PARAMETER[\"Central_Meridian\",-111.9166666666667],"
"PARAMETER[\"Scale_Factor\",0.9999],"
"PARAMETER[\"Latitude_Of_Origin\",31.0],UNIT[\"Foot\",0.3048]]");
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
auto allFactory = AuthorityFactory::create(dbContext, std::string());
auto res = crs->identify(allFactory);
ASSERT_GE(res.size(), 1U);
EXPECT_EQ(res.front().first->identifiers()[0]->code(), "2223");
EXPECT_EQ(*(res.front().first->identifiers()[0]->codeSpace()), "EPSG");
EXPECT_EQ(res.front().second, 70);
}
}
+33
View File
@@ -317,6 +317,39 @@ TEST(datum, unknown_datum) {
// ---------------------------------------------------------------------------
TEST(datum, compare_with_D_prefixing) {
auto my_datum = GeodeticReferenceFrame::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "my_datum"),
Ellipsoid::GRS1980, optional<std::string>(), optional<Measure>(),
PrimeMeridian::GREENWICH);
auto d_my_datum = GeodeticReferenceFrame::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "D_my_datum"),
Ellipsoid::GRS1980, optional<std::string>(), optional<Measure>(),
PrimeMeridian::GREENWICH);
EXPECT_FALSE(my_datum->isEquivalentTo(d_my_datum.get(),
IComparable::Criterion::STRICT));
EXPECT_TRUE(my_datum->isEquivalentTo(d_my_datum.get(),
IComparable::Criterion::EQUIVALENT));
EXPECT_FALSE(d_my_datum->isEquivalentTo(my_datum.get(),
IComparable::Criterion::STRICT));
EXPECT_TRUE(d_my_datum->isEquivalentTo(my_datum.get(),
IComparable::Criterion::EQUIVALENT));
auto d_other_datum = GeodeticReferenceFrame::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "D_other_datum"),
Ellipsoid::GRS1980, optional<std::string>(), optional<Measure>(),
PrimeMeridian::GREENWICH);
EXPECT_FALSE(my_datum->isEquivalentTo(d_other_datum.get(),
IComparable::Criterion::EQUIVALENT));
EXPECT_FALSE(d_my_datum->isEquivalentTo(
d_other_datum.get(), IComparable::Criterion::EQUIVALENT));
EXPECT_FALSE(d_other_datum->isEquivalentTo(
my_datum.get(), IComparable::Criterion::EQUIVALENT));
}
// ---------------------------------------------------------------------------
TEST(datum, dynamic_geodetic_reference_frame) {
auto drf = DynamicGeodeticReferenceFrame::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "test"), Ellipsoid::WGS84,
+14 -1
View File
@@ -896,7 +896,7 @@ TEST(wkt_parse, wkt1_non_conformant_inf_inverse_flattening) {
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt1_esri_GCS_unknown_D_unknown) {
auto obj = WKTParser().setStrict(false).createFromWKT(
auto obj = WKTParser().createFromWKT(
"GEOGCS[\"GCS_unknown\",DATUM[\"D_unknown\","
"SPHEROID[\"unknown\",6370997,0]],"
"PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]]");
@@ -908,6 +908,19 @@ TEST(wkt_parse, wkt1_esri_GCS_unknown_D_unknown) {
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt1_esri_GCS_unknown_D_Unknown_based_on_WGS_84_ellipsoid) {
auto obj = WKTParser().createFromWKT(
"GEOGCS[\"GCS_unknown\",DATUM[\"D_Unknown_based_on_WGS_84_ellipsoid\","
"SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],"
"PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]");
auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
ASSERT_TRUE(crs != nullptr);
EXPECT_EQ(crs->nameStr(), "unknown");
EXPECT_EQ(crs->datum()->nameStr(), "Unknown based on WGS 84 ellipsoid");
}
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt2_GEODCRS_EPSG_4326) {
auto obj = WKTParser().createFromWKT("GEODCRS" + contentWKT2_EPSG_4326);
auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+9
View File
@@ -28,6 +28,8 @@
#include "gtest_include.h"
#include <limits>
#include "proj/io.hpp"
#include "proj/metadata.hpp"
#include "proj/util.hpp"
@@ -512,4 +514,11 @@ TEST(metadata, Identifier_isEquivalentName) {
EXPECT_TRUE(Identifier::isEquivalentName("foo + ", "foo + "));
EXPECT_TRUE(Identifier::isEquivalentName("foo + bar", "foo + bar"));
EXPECT_TRUE(Identifier::isEquivalentName("foo + bar", "foobar"));
EXPECT_TRUE(Identifier::isEquivalentName("foo_IntlFeet", "foo_Feet"));
EXPECT_TRUE(Identifier::isEquivalentName("foo_Feet", "foo_IntlFeet"));
EXPECT_FALSE(
Identifier::isEquivalentName("foo_IntlFeet_bar", "foo_Feet_bar"));
EXPECT_FALSE(
Identifier::isEquivalentName("foo_Feet_bar", "foo_IntlFeet_bar"));
}
+24
View File
@@ -1416,6 +1416,30 @@ TEST(operation, tmerc_south_oriented_export) {
// ---------------------------------------------------------------------------
TEST(operation, tmerc_south_oriented_export_esri_102470) {
// South Orientated TMerc presented as regular TMerc but with
// Scale_Factor=-1
auto wkt = "PROJCS[\"Cape_Lo15\",GEOGCS[\"GCS_Cape\",DATUM[\"D_Cape\","
"SPHEROID[\"Clarke_1880_Arc\",6378249.145,293.4663077]],"
"PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],"
"PROJECTION[\"Transverse_Mercator\"],"
"PARAMETER[\"False_Easting\",0.0],"
"PARAMETER[\"False_Northing\",0.0],"
"PARAMETER[\"Central_Meridian\",15.0],"
"PARAMETER[\"Scale_Factor\",-1.0],"
"PARAMETER[\"Latitude_Of_Origin\",0.0],"
"UNIT[\"Meter\",1.0]]";
auto obj = WKTParser().createFromWKT(wkt);
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
EXPECT_EQ(crs->exportToPROJString(PROJStringFormatter::create().get()),
"+proj=tmerc +axis=wsu +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 "
"+a=6378249.145 +rf=293.4663077 +units=m +no_defs +type=crs");
}
// ---------------------------------------------------------------------------
TEST(operation, tped_export) {
auto conv = Conversion::createTwoPointEquidistant(
PropertyMap(), Angle(1), Angle(2), Angle(3), Angle(4), Length(5),
+1 -8
View File
@@ -6274,15 +6274,8 @@ TEST(
{
auto list = CoordinateOperationFactory::create()->createOperations(
NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt);
ASSERT_GE(list.size(), 2U);
ASSERT_GE(list.size(), 1U);
EXPECT_EQ(list[0]->nameStr(),
"Inverse of NAD83(CSRS)v6 to CGVD28 height (1) + "
"NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) "
"using Null geographic offset "
"from NAD83(CSRS)v6 (geog3D) to NAD83(CSRS)v6 (geog2D) + "
"Inverse of NAD83 to NAD83(CSRS)v6 (10) + "
"NAD83 to NAD83(CSRS) (4)");
EXPECT_EQ(list[1]->nameStr(),
"Inverse of NAD83(CSRS)v6 to CGVD28 height (1) + "
"NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) "
"using Ballpark geographic offset "
+12 -2
View File
@@ -81,7 +81,12 @@ ctest --output-on-failure
make install
# find /tmp/proj_shared_install_from_dist
$TRAVIS_BUILD_DIR/test/postinstall/test_cmake.sh /tmp/proj_shared_install_from_dist shared
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_shared_install_from_dist shared
if [ "$BUILD_NAME" != "osx" ]; then
# Fail on osx Conda with "autom4te: error: need GNU m4 1.4 or later: /Users/runner/miniforge3/conda-bld/autoconf_1746873780934/_build_env/bin/m4"
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_shared_install_from_dist
else
echo "Skipping test_autotools.sh test for $BUILD_NAME"
fi
# Test install and uninstall targets with DESTDIR
make install DESTDIR=/tmp/destdir
@@ -115,7 +120,12 @@ ctest --output-on-failure
make install
# find /tmp/proj_static_install_from_dist
$TRAVIS_BUILD_DIR/test/postinstall/test_cmake.sh /tmp/proj_static_install_from_dist static PROJ_CONFIG
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_static_install_from_dist static
if [ "$BUILD_NAME" != "osx" ]; then
# Fail on osx Conda with "autom4te: error: need GNU m4 1.4 or later: /Users/runner/miniforge3/conda-bld/autoconf_1746873780934/_build_env/bin/m4"
$TRAVIS_BUILD_DIR/test/postinstall/test_autotools.sh /tmp/proj_static_install_from_dist static
else
echo "Skipping test_autotools.sh test for $BUILD_NAME"
fi
# Re-run by unsetting CMAKE_INSTALL_INCLUDEDIR/CMAKE_INSTALL_LIBDIR/CMAKE_INSTALL_BINDIR
# so that later test which involve renaming/moving the installation prefix work.