Compare commits

...
54 Commits
Author SHA1 Message Date
Kristian Evers deb1a5720f Update NEWS for 8.2.1 release 2021-12-26 16:16:27 +01:00
Kristian Evers 406eda9b8d Bump year in CITATION file 2021-12-26 15:59:22 +01:00
Kristian Evers 6d36efa97c Update man-pages from Sphinx-docs 2021-12-26 15:58:09 +01:00
Kristian Evers 631e80d426 Update ABI numbers for 8.2.1 release 2021-12-26 15:40:30 +01:00
Kristian Evers ac3ac2f27e Update version number for 8.2.1 release 2021-12-26 15:39:27 +01:00
Even Rouault 0c61db5a98 Merge pull request #2995 from OSGeo/backport-2994-to-8.2
[Backport 8.2] Fix build with Intel C++ compiler
2021-12-26 10:08:08 +01:00
Kristian Evers 247e6ed4ce Merge pull request #2994 from rouault/icx_fix
Fix build with Intel C++ compiler
2021-12-25 14:39:17 +00:00
Kristian Evers 99d365185d Merge pull request #2993 from OSGeo/backport-2992-to-8.2
[Backport 8.2] bertin1953.rst: fix formatting
2021-12-24 10:23:29 +01:00
Even Rouault 96388832c7 Merge pull request #2992 from anbj/fix-formatting
bertin1953.rst: fix formatting
2021-12-23 19:47:48 +00:00
Even Rouault c8346e9f0a Merge pull request #2991 from OSGeo/backport-2978-to-8.2
[Backport 8.2] Fix and additional options for Peirce Quincuncial projections
2021-12-21 19:39:10 +01:00
Toby C. Wilkinson d5d60b7154 Fix and additional options for Peirce Quincuncial projections (#2978)
This fixes the current forward implementation of Peirce Quincuncial proj to correctly flip/reflect out the southern hemisphere to four triangles, and rotate entire result to a square or diamond. (It there resolves the issues identified with pull request https://github.com/OSGeo/PROJ/pull/2230 , where southern hemisphere was wrongly projected over northern, and reverses the restriction to northern hemisphere introduced there). It also adds additional lateral projection of the hemispheres.

- This PR adds an optional parameter `+type` which allows selection of projection. The `+type=square` and `+type=diamond` types match in principle ESRI's twin implementations of square and diamond PQ projs. The **default** if not specified is `+type=diamond`.

- The previous behaviour restricted to the northern hemisphere can be reproduced using the `+type=nhemisphere`, though this is an edge case only.

- An additional `+type=horizontal` and `+type=vertical` rectangular lateral versions have been added that place each hemisphere side-by-side. This is primarily to allow creation of projections such as Greiger Triptychial, which also require the additional optional params `scrollx` or `scrolly` in order to shift parts of the projection from one side of the map to the other. 

- Additional documentation has been added to proj description, including quoting the usual meridian used in common usage of projection, and images showing the different types.
2021-12-20 20:23:20 +00:00
Martijn Visser 247a79e6c7 Update website for 8.2 release (#2989)
* Update website for 8.2 release

* update "Edit on GitHub" button branch
2021-12-20 20:26:31 +01:00
Even Rouault b013d24bff Merge pull request #2986 from OSGeo/backport-2985-to-8.2
[Backport 8.2] WKT1 import: correctly deal with missing rectified_grid_angle parameter
2021-12-17 11:34:27 +01:00
Even Rouault 4608ef43d6 Merge pull request #2985 from rouault/wkt1_hotine_without_rectified_grid_angle
WKT1 import: correctly deal with missing rectified_grid_angle parameter
2021-12-17 00:18:17 +00:00
github-actions[bot]andEven Rouault 0845df6025 Merge pull request #2982 from DFEvans/patch-1 (#2984)
Remove git stash holdover in news.rst

Co-authored-by: Even Rouault <even.rouault@spatialys.com>
2021-12-14 15:07:01 +13:00
Even Rouault 587d80536d Merge pull request #2977 from OSGeo/backport-2976-to-8.2
[Backport 8.2] createOperations(): improvement for "NAD83(CSRS) + CGVD28 height" to "NAD83(CSRS) + CGVD2013(CGG2013) height"
2021-12-09 18:17:45 +01:00
Even Rouault c9fe5a1a06 Merge pull request #2976 from rouault/compound_to_compound_ballpark
createOperations(): improvement for "NAD83(CSRS) + CGVD28 height" to "NAD83(CSRS) + CGVD2013(CGG2013) height"
2021-12-09 16:38:19 +00:00
Even Rouault 90997086e1 Merge pull request #2974 from OSGeo/backport-2973-to-8.2
[Backport 8.2] Database: update to EPSG v10.041
2021-12-09 16:44:56 +01:00
Even Rouault 389b2a1378 Merge pull request #2973 from rouault/epsg_10_041
Database: update to EPSG v10.041
2021-12-07 18:33:01 +00:00
github-actions[bot]andEven Rouault 8bda42cc12 Merge pull request #2970 from mwtoews/static-extra-libs (#2971)
Refactor proj.pc to use EXTRA_LIBS; add -lpthread to Libs.private

Co-authored-by: Even Rouault <even.rouault@spatialys.com>
2021-12-05 13:55:33 +13:00
Even Rouault ebe3aadd69 Merge pull request #2969 from OSGeo/backport-2964-to-8.2
[Backport 8.2] Fix github path for crs2crs2grid.py in HTDP
2021-12-04 10:56:38 +01:00
Even Rouault 7178175eca Merge pull request #2964 from Fa7C0n/master
Fix github path for crs2crs2grid.py in HTDP
2021-12-02 22:50:52 +00:00
Even Rouault d9d55ed203 Merge pull request #2967 from OSGeo/backport-2966-to-8.2
[Backport 8.2] Cache result of proj_get_type() to help for performance of proj_factors() (fixes #2965)
2021-12-02 23:08:35 +01:00
Even Rouault 8a156921b9 Merge pull request #2966 from rouault/fix_2965
Cache result of proj_get_type() to help for performance of proj_factors() (fixes #2965)
2021-12-02 16:18:44 +00:00
Even Rouault 30f059a018 Merge pull request #2950 from OSGeo/backport-2949-to-8.2
[Backport 8.2] Fix windows.h conflict with Criterion::STRICT
2021-11-20 11:26:46 +01:00
Even Rouault 2f2c150a52 Merge pull request #2951 from OSGeo/backport-2922-to-8.2
[Backport 8.2] Docs: Add new Ellipsoids page to explain ellipsoidal parameters.
2021-11-20 11:26:32 +01:00
f932502233 Docs: Add new Ellipsoids page to explain ellipsoidal parameters (#2922)
Co-authored-by: Rohit <rohitpingale103@gmail.com>
Co-authored-by: Brendan Jurd <brendan.jurd@geoplex.com.au>
Co-authored-by: Mike Taves <mwtoews@gmail.com>
2021-11-20 07:58:48 +00:00
Even Rouault acfa9ce91f Merge pull request #2949 from jschueller/patch-1
Fix windows.h conflict with Criterion::STRICT
2021-11-20 00:08:28 +00:00
Kristian Evers 0510077777 Merge pull request #2946 from OSGeo/backport-2945-to-8.2
[Backport 8.2] DOCS: Remove LATEX_SOURCE_CODE setting from Doxyfile.
2021-11-19 12:08:49 +01:00
Kristian Evers 6f544ca29e Merge pull request #2947 from OSGeo/backport-2944-to-8.2
[Backport 8.2] DOCS: Add doxygen entry for proj_context_set_search_paths.
2021-11-19 12:08:36 +01:00
Kristian Evers 86118e8478 Merge pull request #2944 from direvus/2540-docs-missing-funcs
DOCS: Add doxygen entry for proj_context_set_search_paths.
2021-11-19 09:24:13 +00:00
Kristian Evers 85db269ba9 Merge pull request #2945 from direvus/doxy-latex-setting
DOCS: Remove LATEX_SOURCE_CODE setting from Doxyfile.
2021-11-19 09:23:46 +00:00
Kristian Evers 3aabf2f5b9 Set doc deploy branch to 8.2 (was forgotten at release time) 2021-11-17 08:53:36 +01:00
Even Rouault 93a0de1018 createOperationsGeogToGeog(): avoid potential harmless floating-point division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=41045 2021-11-15 18:59:03 +01:00
Even Rouault aeba9bdfe3 Merge pull request #2940 from OSGeo/backport-2938-to-8.2
[Backport 8.2] createOperationsCompoundToCompound(): fix null pointer dereference when connection to proj.db doesn't exist.
2021-11-15 12:43:33 +01:00
Even Rouault 97a5fad1f0 Merge pull request #2939 from OSGeo/backport-2937-to-8.2
[Backport 8.2] createOperations(): do not stop at the first operation in the PROJ namespace for vertical transformations
2021-11-15 12:43:20 +01:00
Even Rouault 4cb9fdb631 Merge pull request #2938 from rouault/fix_ossfuzz_40955
createOperationsCompoundToCompound(): fix null pointer dereference when connection to proj.db doesn't exist.
2021-11-14 14:55:29 +00:00
Even Rouault 4db10d9e13 Merge pull request #2937 from rouault/fix_2936
createOperations(): do not stop at the first operation in the PROJ namespace for vertical transformations
2021-11-14 14:49:06 +00:00
Even Rouault cf8c1a825b Merge pull request #2935 from OSGeo/backport-2934-to-8.2
[Backport 8.2] test: Make CApi test cross-platform
2021-11-10 17:56:27 +01:00
Even Rouault a461817ade Merge pull request #2934 from toonn/cross-platform-test
test: Make CApi test cross-platform
2021-11-10 14:51:23 +00:00
Even Rouault ce6be7d20c Merge pull request #2933 from OSGeo/backport-2932-to-8.2
[Backport 8.2] PROJStringFormatter::toString(): avoid invalid iterator increment (fixes #2931)
2021-11-09 13:39:01 +01:00
Mike Taves 4a96ce5f6f RFC 7: Drop Autotools, maintain CMake (#2880) 2021-11-09 13:35:10 +01:00
Even Rouault 5ba4e6d453 Merge pull request #2932 from rouault/fix_2931
PROJStringFormatter::toString(): avoid invalid iterator increment (fixes #2931)
2021-11-09 11:43:37 +00:00
Even Rouault fa8a542f40 Merge pull request #2928 from OSGeo/backport-2926-to-8.2
[Backport 8.2] DOC: Add warning in proj_as_proj_string about potential information loss with CRS
2021-11-07 20:07:26 +01:00
Even Rouault 96910fc0bb Merge pull request #2927 from OSGeo/backport-2925-to-8.2
[Backport 8.2] DOC: add available keys to proj_context_get_database_metadata
2021-11-07 20:07:17 +01:00
Even Rouault 730b7b9e9f Merge pull request #2926 from snowman2/warn
DOC: Add warning in proj_as_proj_string about potential information loss with CRS
2021-11-06 17:53:26 +00:00
Even Rouault 0f2efd7cfc Merge pull request #2925 from snowman2/docs
DOC: add available keys to proj_context_get_database_metadata
2021-11-06 17:52:53 +00:00
Even Rouault b980912325 Merge pull request #2923 from OSGeo/backport-2921-to-8.2
[Backport 8.2] Database: update to EPSG v10.039
2021-11-06 18:18:58 +01:00
Even Rouault d76d1adffd Merge pull request #2921 from rouault/epsg_10_039
Database: update to EPSG v10.039
2021-11-05 10:39:36 +00:00
Even Rouault b71bee7b60 Merge pull request #2918 from OSGeo/backport-2917-to-8.2
[Backport 8.2] BoundCRS WKT import: fix setting of name
2021-11-03 18:49:16 +01:00
Even Rouault 4739adcc55 Merge pull request #2917 from rouault/fix_boundcrs_name
BoundCRS WKT import: fix setting of name
2021-11-03 10:26:06 +00:00
Even Rouault 94ebc12cce Doc: news.rst: formatting fixes 2021-11-03 10:58:04 +01:00
Kristian Evers 9a4820add3 docs: Fix errors in 8.2.0 news section 2021-11-01 19:49:36 +01:00
Kristian Evers f988536d85 Update website for 8.1.1 release 2021-11-01 18:02:39 +01:00
69 changed files with 2798 additions and 1450 deletions
+10 -4
View File
@@ -8,9 +8,15 @@ jobs:
runs-on: windows-latest
if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')"
strategy:
fail-fast: false
matrix:
BUILD_TYPE: [Release, Debug]
env:
ARCH: x64
BUILD_SHARED_LIBS: ON
BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
steps:
@@ -42,7 +48,7 @@ jobs:
mkdir %PROJ_BUILD%
cd %PROJ_BUILD%
set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir
cmake -GNinja .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS="{{ env.BUILD_SHARED_LIBS }}" -DCMAKE_C_FLAGS="/WX" -DCMAKE_CXX_FLAGS="/WX" -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIX="%PROJ_DIR%"
cmake -GNinja .. -DCMAKE_BUILD_TYPE="${{ env.BUILD_TYPE }}" -DBUILD_SHARED_LIBS="${{ env.BUILD_SHARED_LIBS }}" -DCMAKE_C_FLAGS="/WX" -DCMAKE_CXX_FLAGS="/WX" -DCMAKE_TOOLCHAIN_FILE=c:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_INSTALL_PREFIX="%PROJ_DIR%"
ninja -v
ninja install
dir %PROJ_DIR%\bin
@@ -55,10 +61,10 @@ jobs:
set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir
set PROJ_BUILD=%GITHUB_WORKSPACE%\build
cd %PROJ_BUILD%
ctest -V -C Release
ctest -V -C "${{ env.BUILD_TYPE }}"
set PATH=%PROJ_DIR%\bin;%PATH%
call %GITHUB_WORKSPACE%\test\postinstall\test_cmake.bat %PROJ_DIR%
proj
if "${{ env.BUILD_TYPE }}"=="Release" call %GITHUB_WORKSPACE%\test\postinstall\test_cmake.bat %PROJ_DIR%
if "${{ env.BUILD_TYPE }}"=="Release" proj
MSYS2:
runs-on: windows-latest
+1 -1
View File
@@ -11,6 +11,6 @@ A BibTeX entry for LaTeX users is
title = {{PROJ} coordinate transformation software library},
author = {{PROJ contributors}},
organization = {Open Source Geospatial Foundation},
year = {2021},
year = {2022},
url = {https://proj.org/},
}
+9 -2
View File
@@ -91,6 +91,13 @@ elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
endif()
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM")
# Intel CXX compiler based on clang defaults to -ffast-math, which
# breaks std::isinf(), std::isnan(), etc.
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -fno-fast-math)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fno-fast-math)
endif ()
set(PROJ_C_WARN_FLAGS "${PROJ_C_WARN_FLAGS}"
CACHE STRING "C flags used to compile PROJ targets")
set(PROJ_CXX_WARN_FLAGS "${PROJ_CXX_WARN_FLAGS}"
@@ -110,11 +117,11 @@ message(STATUS "Configuring PROJ:")
#PROJ version information
################################################################################
include(ProjVersion)
proj_version(MAJOR 8 MINOR 2 PATCH 0)
proj_version(MAJOR 8 MINOR 2 PATCH 1)
# Use libtool convention to build the CMake's VERSION and SOVERSION
# See https://github.com/pvanhoof/dir-examples#cmake-in-the-cmake-example
set(PROJ_LIBTOOL_CURRENT 24)
set(PROJ_LIBTOOL_REVISION 0)
set(PROJ_LIBTOOL_REVISION 1)
set(PROJ_LIBTOOL_AGE 2)
math(EXPR PROJ_API_VERSION "${PROJ_LIBTOOL_CURRENT} - ${PROJ_LIBTOOL_AGE}")
set(PROJ_BUILD_VERSION "${PROJ_API_VERSION}.${PROJ_LIBTOOL_AGE}.${PROJ_LIBTOOL_REVISION}")
-10
View File
@@ -1729,16 +1729,6 @@ LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+39
View File
@@ -1,3 +1,42 @@
8.2.1 Release Notes
-------------------
Updates
-------
o Database updated with EPSG v. 10.041 (#2974)
Bug fixes
---------
o BoundCRS WKT import: fix setting of name (#2917)
o PROJStringFormatter::toString(): avoid invalid iterator increment (#2932)
o Ensure CApi test are cross-platform (#2934)
o createOperations(): do not stop at the first operation in the PROJ namespace
for vertical transformations (#2937)
o createOperationsCompoundToCompound(): fix null pointer dereference when
connection to proj.db doesn't exist. (#2938)
o Fix windows.h conflict with Criterion::STRICT (#2950)
o Cache result of proj_get_type() to help for performance of
proj_factors() (#2967)
o createOperations(): improvement for "NAD83(CSRS) + CGVD28 height" to
"NAD83(CSRS) + CGVD2013(CGG2013) height" (#2977)
o WKT1 import: correctly deal with missing rectified_grid_angle
parameter (#2986)
o Fix and additional options for Peirce Quincuncial projections (#2978)
o Fix build with Intel C++ compiler (#2995)
8.2.0 Release Notes
-------------------
+11 -7
View File
@@ -76,21 +76,25 @@ function(configure_proj_pc)
set(datadir "$\{datarootdir\}")
set(PACKAGE "proj")
set(VERSION ${PROJ_VERSION})
set(SQLITE3_LIBS -lsqlite3)
# Build list for Libs.private
set(EXTRA_LIBS
-lstdc++
-lsqlite3
${CMAKE_THREAD_LIBS_INIT}
)
if(TIFF_ENABLED)
set(TIFF_LIBS -ltiff)
list(APPEND EXTRA_LIBS -ltiff)
endif()
if(CURL_ENABLED)
set(CURL_LIBS -lcurl)
list(APPEND EXTRA_LIBS -lcurl)
endif()
set(EXTRA_LIBS "-lstdc++")
if(HAVE_LIBM)
list(APPEND EXTRA_LIBS "-lm")
list(APPEND EXTRA_LIBS -lm)
endif()
if(HAVE_LIBDL)
list(APPEND EXTRA_LIBS "-ldl")
list(APPEND EXTRA_LIBS -ldl)
endif()
# Join list with a space
# Join list with a space; list(JOIN) added CMake 3.12
string(REPLACE ";" " " _tmp_str "${EXTRA_LIBS}")
set(EXTRA_LIBS "${_tmp_str}")
+11 -2
View File
@@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
AC_INIT([PROJ], [8.2.0],
AC_INIT([PROJ], [8.2.1],
[https://github.com/OSGeo/PROJ/issues], proj, [https://proj.org])
AC_CONFIG_MACRO_DIR([m4])
AC_LANG(C)
@@ -325,7 +325,16 @@ dnl ---------------------------------------------------------------------------
dnl Check for extra libraries, required for static linking with pkg-config
dnl ---------------------------------------------------------------------------
EXTRA_LIBS="-lstdc++"
EXTRA_LIBS="-lstdc++ -lsqlite3"
if test "no$THREAD_LIB" != "no"; then
EXTRA_LIBS="$EXTRA_LIBS $THREAD_LIB"
fi
if test "x$enable_tiff" != "xno" -o "x$enable_tiff" = ""; then
EXTRA_LIBS="$EXTRA_LIBS -ltiff"
fi
if test "$FOUND_CURL" = "yes" ; then
EXTRA_LIBS="$EXTRA_LIBS -lcurl"
fi
if test "$HAVE_LIBM" != "no" ; then
EXTRA_LIBS="$EXTRA_LIBS -lm"
fi
+35
View File
@@ -646,6 +646,8 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1195','NAD83(CSRS) 2002
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1196','NAD83(CSRS) 2005','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1197','NAD83(CSRS) 2010','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1198','NAD83(CSRS) 2010','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1314','MRH21-IRF','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1315','MOLDOR11-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');
@@ -7448,3 +7450,36 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9821','UA_UCS_2000 / LCS
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9860','UA_UCS_2000 / LCS_68','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9855','UA_UCS_2000 / LCS_56','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9864','UA_UCS_2000 / LCS_80','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9869','ETRS89 / MHR21 SnakeGrid','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9870','ETRS89 / MRH21 SnakeGrid + Newlyn height','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9880','ETRS89 / MOLDOR11 SnakeGrid','EPSG');
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9881','ETRS89 / MOLDOR11 SnakeGrid + Newlyn height','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5558','UA_UCS-2000 / XYZ','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5560','UA_UCS-2000 / Lat_Lon_h','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5562','UA_UCS-2000 / GK_6','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5563','UA_UCS-2000 / GK_6','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5564','UA_UCS-2000 / GK_6','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5565','UA_UCS-2000 / GK_6','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6381','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6382','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6383','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6384','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6385','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6386','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6387','UA_UCS-2000 / UA_TM','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9307','785','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9307','ATRF2014 - XYZ','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9308','786','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9308','ATRF2014 - LatLonEHt','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9309','787','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9309','ATRF2014 - LatLon','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9458','788','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9458','AVWS - NHt','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9753','796','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9753','WGS 84 (G2139) - XYZ','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9754','797','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9754','WGS 84 (G2139) - LatLonEHt','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9755','798','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9755','798 WGS 84 (G2139) - LatLon ','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','LV_KRON / NH','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5705','UA_KRON / NH','EPSG');
+6
View File
@@ -718,3 +718,9 @@ INSERT INTO "compound_crs" VALUES('EPSG','9767','EWR2 Grid + ODN height',NULL,'E
INSERT INTO "usage" VALUES('EPSG','16510','compound_crs','EPSG','9767','EPSG','4622','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9785','RGF93 v2b + NGF-IGN69 height',NULL,'EPSG','9782','EPSG','5720',0);
INSERT INTO "usage" VALUES('EPSG','16594','compound_crs','EPSG','9785','EPSG','1326','EPSG','1026');
INSERT INTO "compound_crs" VALUES('EPSG','9870','MRH21 Grid + ODN height',NULL,'EPSG','9869','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','16942','compound_crs','EPSG','9870','EPSG','4652','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9881','MOLDOR11 Grid + ODN height',NULL,'EPSG','9880','EPSG','5701',0);
INSERT INTO "usage" VALUES('EPSG','16985','compound_crs','EPSG','9881','EPSG','4655','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','9883','ETRS89 + CD Norway depth',NULL,'EPSG','4258','EPSG','9672',0);
INSERT INTO "usage" VALUES('EPSG','16974','compound_crs','EPSG','9883','EPSG','4656','EPSG','1198');
+4
View File
@@ -1800,10 +1800,14 @@ INSERT INTO "conversion" VALUES('EPSG','9819','Local coordinate system of Cherni
INSERT INTO "usage" VALUES('EPSG','16901','conversion','EPSG','9819','EPSG','4625','EPSG','1207');
INSERT INTO "conversion" VALUES('EPSG','9820','Local coordinate system of Sevastopol city','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',33.0,'EPSG','9102','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','16902','conversion','EPSG','9820','EPSG','4649','EPSG','1207');
INSERT INTO "conversion" VALUES('EPSG','9868','MRH21-TM','In conjunction with transformation ETRS89 to MHR21-IRF (1) (code 9867), emulates the MHR21 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',52.18,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.48,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',227286.9881,'EPSG','9001','EPSG','8807','False northing',265751.2874,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16937','conversion','EPSG','9868','EPSG','4652','EPSG','1141');
INSERT INTO "conversion" VALUES('EPSG','9872','Papua New Guinea Map Grid 1994 zone 57','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',159.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.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','16917','conversion','EPSG','9872','EPSG','4653','EPSG','1092');
INSERT INTO "conversion" VALUES('EPSG','9873','Papua New Guinea Map Grid 1994 zone 58','Grid convergence uses opposite sign convention to UTM.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9102','EPSG','8802','Longitude of natural origin',165.0,'EPSG','9102','EPSG','8805','Scale factor at natural origin',0.9996,'EPSG','9201','EPSG','8806','False easting',500000.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','16921','conversion','EPSG','9873','EPSG','4654','EPSG','1092');
INSERT INTO "conversion" VALUES('EPSG','9879','MOLDOR11-TM','In conjunction with transformation ETRS89 to MOLDOR11-IRF (1) (code 9878), emulates the MOLDOR11 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',53.21,'EPSG','9110','EPSG','8802','Longitude of natural origin',-1.54,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',226574.2032,'EPSG','9001','EPSG','8807','False northing',390894.838,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16956','conversion','EPSG','9879','EPSG','4655','EPSG','1141');
INSERT INTO "conversion" VALUES('EPSG','10101','Alabama CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','11101','conversion','EPSG','10101','EPSG','2154','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','10102','Alabama CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+10 -5
View File
@@ -85,7 +85,7 @@ INSERT INTO "extent" VALUES('EPSG','1105','Gibraltar','Gibraltar - onshore and o
INSERT INTO "extent" VALUES('EPSG','1106','Greece','Greece - onshore and offshore. Includes Aegean Islands, Ionian Islands, Dodecanese Islands, Crete, and Mount Athos.',33.26,41.75,18.26,30.23,0);
INSERT INTO "extent" VALUES('EPSG','1107','Greenland','Greenland - onshore and offshore.',56.38,87.02,-75.0,7.99,0);
INSERT INTO "extent" VALUES('EPSG','1108','Grenada','Grenada and southern Grenadine Islands - onshore and offshore.',11.36,13.4,-63.28,-60.82,0);
INSERT INTO "extent" VALUES('EPSG','1109','Guadeloupe','Guadeloupe - onshore and offshore. Includes Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade; St Barthélemy, and northern St Martin.',15.06,18.54,-63.66,-57.54,0);
INSERT INTO "extent" VALUES('EPSG','1109','Guadeloupe','Guadeloupe - onshore and offshore. Includes Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade.',15.06,18.53,-62.81,-57.54,0);
INSERT INTO "extent" VALUES('EPSG','1110','Guam','Guam - onshore and offshore.',10.95,15.91,141.19,148.18,0);
INSERT INTO "extent" VALUES('EPSG','1111','Guatemala','Guatemala - onshore and offshore.',10.6,17.83,-94.57,-88.16,0);
INSERT INTO "extent" VALUES('EPSG','1112','Guinea','Guinea - onshore and offshore.',7.19,12.68,-18.26,-7.65,0);
@@ -1014,7 +1014,7 @@ INSERT INTO "extent" VALUES('EPSG','2034','World - N hemisphere - 78°W to 72°W
INSERT INTO "extent" VALUES('EPSG','2035','World - S hemisphere - 78°W to 72°W - by country','Between 78°W and 72°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Brazil. Chile. Colombia. Ecuador. Peru.',-80.0,0.0,-78.0,-72.0,0);
INSERT INTO "extent" VALUES('EPSG','2036','World - N hemisphere - 72°W to 66°W - by country','Between 72°W and 66°W, northern hemisphere between equator and 84°N, onshore and offshore. Aruba. Bahamas. Brazil. Canada - New Brunswick (NB); Labrador; Nunavut; Nova Scotia (NS); Quebec. Colombia. Dominican Republic. Greenland. Netherlands Antilles. Puerto Rico. Turks and Caicos Islands. United States. Venezuela.',0.0,84.0,-72.0,-66.0,0);
INSERT INTO "extent" VALUES('EPSG','2037','World - S hemisphere - 72°W to 66°W - by country','Between 72°W and 66°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Bolivia. Brazil. Chile. Colombia. Peru.',-80.0,0.0,-72.0,-66.0,0);
INSERT INTO "extent" VALUES('EPSG','2038','World - N hemisphere - 66°W to 60°W - by country','Between 66°W and 60°W, northern hemisphere between equator and 84°N, onshore and offshore. Anguilla. Antigua and Barbuda. Bermuda. Brazil. British Virgin Islands. Canada - New Brunswick; Labrador; Nova Scotia; Nunavut; Prince Edward Island; Quebec. Dominica. Greenland. Grenada. Guadeloupe. Guyana. Martinique. Montserrat. Puerto Rico. St Kitts and Nevis. St Lucia. St Vncent and the Grenadines. Trinidad and Tobago. Venezuela. US Virgin Islands.',0.0,84.0,-66.0,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','2038','World - N hemisphere - 66°W to 60°W - by country','Between 66°W and 60°W, northern hemisphere between equator and 84°N, onshore and offshore. Anguilla. Antigua and Barbuda. Bermuda. Brazil. British Virgin Islands. Canada - New Brunswick; Labrador; Nova Scotia; Nunavut; Prince Edward Island; Quebec. Dominica. Greenland. Grenada. Guadeloupe. Guyana. Martinique. Montserrat. Puerto Rico. St Kitts and Nevis. St Barthelemy. St Lucia. St Maarten, St Martin. St Vincent and the Grenadines. Trinidad and Tobago. Venezuela. US Virgin Islands.',0.0,84.0,-66.0,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','2039','World - S hemisphere - 66°W to 60°W - by country','Between 66°W and 60°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Bolivia. Brazil. Falkland Islands (Malvinas). Paraguay.',-80.0,0.0,-66.0,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','2040','World - N hemisphere - 60°W to 54°W - by country','Between 60°W and 54°W, northern hemisphere between equator and 84°N, onshore and offshore. Barbados. Brazil. Canada - Newfoundland and Labrador, Quebec. French Guiana. Greenland. Guyana. St Pierre and Miquelon. Suriname.',0.0,84.0,-60.0,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','2041','World - S hemisphere - 60°W to 54°W - by country','Between 60°W and 54°W, southern hemisphere between 80°S and equator, onshore and offshore. Argentina. Bolivia. Brazil. Falkland Islands (Malvinas). Paraguay. Uruguay.',-80.0,0.0,-60.0,-54.0,0);
@@ -1800,13 +1800,13 @@ INSERT INTO "extent" VALUES('EPSG','2820','New Caledonia - Ile des Pins','New Ca
INSERT INTO "extent" VALUES('EPSG','2821','New Caledonia - Belep','New Caledonia - Belep.',-19.85,-19.5,163.54,163.75,0);
INSERT INTO "extent" VALUES('EPSG','2822','New Caledonia - Grande Terre','New Caledonia - Grande Terre.',-22.45,-20.03,163.92,167.09,0);
INSERT INTO "extent" VALUES('EPSG','2823','New Caledonia - Grande Terre - Noumea','New Caledonia - Grande Terre - Noumea district.',-22.37,-22.19,166.35,166.54,0);
INSERT INTO "extent" VALUES('EPSG','2824','Caribbean - French Antilles','French Antilles onshore and offshore - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade, St Barthélemy, and northern St Martin) and Martinique.',14.08,18.54,-63.66,-57.52,0);
INSERT INTO "extent" VALUES('EPSG','2824','Caribbean - French Antilles','French Antilles onshore and offshore - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; St Martin.',14.08,18.53,-63.66,-57.52,0);
INSERT INTO "extent" VALUES('EPSG','2825','Africa - Ethiopia and Sudan - 30°E to 36°E','Ethiopia - west of 36°E. South Sudan - east of 30°E. Sudan - between 30°E and 36°E.',3.49,22.24,29.99,36.0,0);
INSERT INTO "extent" VALUES('EPSG','2826','Africa - South Sudan and Sudan - west of 24°E','South Sudan and Sudan - west of 24°E.',8.7,15.76,21.82,24.01,0);
INSERT INTO "extent" VALUES('EPSG','2827','Africa - South Sudan and Sudan - 24°E to 30°E','South Sudan and Sudan - between 24°E and 30°E.',4.21,22.01,23.99,30.01,0);
INSERT INTO "extent" VALUES('EPSG','2828','Guadeloupe - St Martin and St Barthelemy - onshore','Guadeloupe - onshore - St Martin and St Barthélemy islands.',17.82,18.17,-63.21,-62.73,0);
INSERT INTO "extent" VALUES('EPSG','2829','Guadeloupe - Grande-Terre and surrounding islands - onshore','Guadeloupe - onshore - Basse-Terre, Grande-Terre, La Desirade, Marie-Galante, Les Saintes.',15.8,16.55,-61.85,-60.97,0);
INSERT INTO "extent" VALUES('EPSG','2830','World (by country)','World: Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola, Anguilla, Antarctica, Antigua and Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belgium, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Saint Eustasius and Saba, Bosnia and Herzegovina, Botswana, Bouvet Island, Brazil, British Indian Ocean Territory, British Virgin Islands, Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Cayman Islands, Central African Republic, Chad, Chile, China, Christmas Island, Cocos (Keeling) Islands, Comoros, Congo, Cook Islands, Costa Rica, Côte d''Ivoire (Ivory Coast), Croatia, Cuba, Curacao, Cyprus, Czechia, Denmark, Djibouti, Dominica, Dominican Republic, East Timor, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Eswatini (Swaziland), Ethiopia, Falkland Islands (Malvinas), Faroe Islands, Fiji, Finland, France, French Guiana, French Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany, Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and McDonald Islands, Holy See (Vatican City State), Honduras, China - Hong Kong, Hungary, Iceland, India, Indonesia, Islamic Republic of Iran, Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya, Kiribati, Democratic People''s Republic of Korea (North Korea), Republic of Korea (South Korea), Kosovo, Kuwait, Kyrgyzstan, Lao People''s Democratic Republic (Laos), Latvia, Lebanon, Lesotho, Liberia, Libyan Arab Jamahiriya, Liechtenstein, Lithuania, Luxembourg, China - Macao, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Martinique, Mauritania, Mauritius, Mayotte, Mexico, Federated States of Micronesia, Monaco, Mongolia, Montenegro, Montserrat, Morocco, Mozambique, Myanmar (Burma), Namibia, Nauru, Nepal, Netherlands, New Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island, North Macedonia, Northern Mariana Islands, Norway, Oman, Pakistan, Palau, Panama, Papua New Guinea (PNG), Paraguay, Peru, Philippines, Pitcairn, Poland, Portugal, Puerto Rico, Qatar, Reunion, Romania, Russian Federation, Rwanda, Saint Kitts and Nevis, Saint Helena, Ascension and Tristan da Cunha, Saint Lucia, Saint Pierre and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia (Slovak Republic), Slovenia, Sint Maarten, Solomon Islands, Somalia, South Africa, South Georgia and the South Sandwich Islands, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Svalbard and Jan Mayen, Sweden, Switzerland, Syrian Arab Republic, Taiwan, Tajikistan, United Republic of Tanzania, Thailand, The Democratic Republic of the Congo (Zaire), Togo, Tokelau, Tonga, Trinidad and Tobago, Tunisia, Turkey, Turkmenistan, Turks and Caicos Islands, Tuvalu, Uganda, Ukraine, United Arab Emirates (UAE), United Kingdom (UK), United States (USA), United States Minor Outlying Islands, Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, US Virgin Islands, Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','2830','World (by country)','World: Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola, Anguilla, Antarctica, Antigua and Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belgium, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Saint Eustasius and Saba, Bosnia and Herzegovina, Botswana, Bouvet Island, Brazil, British Indian Ocean Territory, British Virgin Islands, Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Cayman Islands, Central African Republic, Chad, Chile, China, Christmas Island, Cocos (Keeling) Islands, Comoros, Congo, Cook Islands, Costa Rica, Côte d''Ivoire (Ivory Coast), Croatia, Cuba, Curacao, Cyprus, Czechia, Denmark, Djibouti, Dominica, Dominican Republic, East Timor, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Eswatini (Swaziland), Ethiopia, Falkland Islands (Malvinas), Faroe Islands, Fiji, Finland, France, French Guiana, French Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany, Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and McDonald Islands, Holy See (Vatican City State), Honduras, China - Hong Kong, Hungary, Iceland, India, Indonesia, Islamic Republic of Iran, Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya, Kiribati, Democratic People''s Republic of Korea (North Korea), Republic of Korea (South Korea), Kosovo, Kuwait, Kyrgyzstan, Lao People''s Democratic Republic (Laos), Latvia, Lebanon, Lesotho, Liberia, Libyan Arab Jamahiriya, Liechtenstein, Lithuania, Luxembourg, China - Macao, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Martinique, Mauritania, Mauritius, Mayotte, Mexico, Federated States of Micronesia, Monaco, Mongolia, Montenegro, Montserrat, Morocco, Mozambique, Myanmar (Burma), Namibia, Nauru, Nepal, Netherlands, New Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island, North Macedonia, Northern Mariana Islands, Norway, Oman, Pakistan, Palau, Panama, Papua New Guinea (PNG), Paraguay, Peru, Philippines, Pitcairn, Poland, Portugal, Puerto Rico, Qatar, Reunion, Romania, Russian Federation, Rwanda, St Barthelemy, St Kitts and Nevis, St Helena, Ascension and Tristan da Cunha, St Lucia, St Martin, St Pierre and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia (Slovak Republic), Slovenia, St Maarten, Solomon Islands, Somalia, South Africa, South Georgia and the South Sandwich Islands, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Svalbard and Jan Mayen, Sweden, Switzerland, Syrian Arab Republic, Taiwan, Tajikistan, United Republic of Tanzania, Thailand, The Democratic Republic of the Congo (Zaire), Togo, Tokelau, Tonga, Trinidad and Tobago, Tunisia, Turkey, Turkmenistan, Turks and Caicos Islands, Tuvalu, Uganda, Ukraine, United Arab Emirates (UAE), United Kingdom (UK), United States (USA), United States Minor Outlying Islands, Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, US Virgin Islands, Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe.',-90.0,90.0,-180.0,180.0,0);
INSERT INTO "extent" VALUES('EPSG','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,-44.0,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);
@@ -2801,7 +2801,7 @@ INSERT INTO "extent" VALUES('EPSG','3821','Bonaire','Bonaire, St Eustatius and S
INSERT INTO "extent" VALUES('EPSG','3822','Bonaire - onshore','Bonaire, St Eustatius and Saba - Bonaire - onshore.',11.97,12.36,-68.47,-68.14,0);
INSERT INTO "extent" VALUES('EPSG','3823','Curacao - onshore','Curaçao - onshore.',11.99,12.44,-69.22,-68.69,0);
INSERT INTO "extent" VALUES('EPSG','3824','Nigeria - Gongola Basin','Nigeria - onshore - Gongola Basin',8.78,11.63,9.41,12.13,0);
INSERT INTO "extent" VALUES('EPSG','3825','Caribbean - French Antilles west of 60°W','French Antilles onshore and offshore west of 60°W - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade, St Barthélemy, and northern St Martin) and Martinique.',14.08,18.32,-63.66,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','3825','Caribbean - French Antilles west of 60°W','French Antilles onshore and offshore west of 60°W - Guadeloupe (including Grande Terre, Basse Terre, Marie Galante, Les Saintes, Iles de la Petite Terre, La Desirade); Martinique; St Barthélemy; northern St Martin.',14.08,18.31,-63.66,-60.0,0);
INSERT INTO "extent" VALUES('EPSG','3826','Uruguay - west of 54°W','Uruguay - west of 54°W, onshore and offshore.',-36.63,-30.09,-58.49,-54.0,0);
INSERT INTO "extent" VALUES('EPSG','3827','Bolivia - west of 66°W','Bolivia - west of 66°W.',-22.91,-9.77,-69.66,-66.0,0);
INSERT INTO "extent" VALUES('EPSG','3828','Uruguay - east of 54°W','Uruguay - east of 54°W, onshore and offshore.',-37.77,-31.9,-54.0,-50.01,0);
@@ -3627,5 +3627,10 @@ INSERT INTO "extent" VALUES('EPSG','4648','Ukraine - Crimea','Ukraine - Crimea a
INSERT INTO "extent" VALUES('EPSG','4649','Ukraine - Sevastopol','Ukraine - Sevastopol (Sebastopol) city.',44.38,44.84,33.37,33.92,0);
INSERT INTO "extent" VALUES('EPSG','4650','Ukraine - Kyiv city and oblast','Ukraine - Kyiv (Kiev) city and Kyiv region (oblast).',49.17,51.55,29.26,32.16,0);
INSERT INTO "extent" VALUES('EPSG','4651','Ukraine - Rivne and Khmelnytskyi oblasts','Ukraine - Rivne and Khmelnytskyi regions (oblasts).',48.45,51.95,25.08,27.9,0);
INSERT INTO "extent" VALUES('EPSG','4652','UK - Cardiff to Lincoln','United Kingdom (UK) - on or related to Midland Rail Hub, covering routes through Cardiff, Bristol, Gloucester, Derby, Birmingham, Leicester, and Lincoln.',51.35,53.26,-3.27,-0.36,0);
INSERT INTO "extent" VALUES('EPSG','4653','Papua New Guinea - 156°E to 162°E','Papua New Guinea - between 156°E and 162°E, onshore and offshore.',-14.26,-1.11,156.0,162.0,0);
INSERT INTO "extent" VALUES('EPSG','4654','Papua New Guinea - east of 162°E','Papua New Guinea - east of 162°E to EEZ limit.',-4.35,-2.34,162.0,162.8,0);
INSERT INTO "extent" VALUES('EPSG','4655','UK - Manchester to Dore','United Kingdom (UK) - on or related to the rail route from Manchester via Ordsall Lane and the Hope Valley to Dore Junction.',53.25,53.55,-2.4,-1.39,0);
INSERT INTO "extent" VALUES('EPSG','4656','Norway - inshore and nearshore','Norway - inshore and nearshore.',57.75,71.38,4.08,31.77,0);
INSERT INTO "extent" VALUES('EPSG','4657','St Martin','St Martin - onshore and offshore.',17.87,18.19,-63.66,-62.73,0);
INSERT INTO "extent" VALUES('EPSG','4658','St Barthelemy','St Barthélemy - onshore and offshore.',17.64,18.31,-63.1,-62.21,0);
+4
View File
@@ -2158,3 +2158,7 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','9783','RGF93 v2b (lon-lat)',NULL,'geog
INSERT INTO "usage" VALUES('EPSG','16652','geodetic_crs','EPSG','9783','EPSG','1096','EPSG','1189');
INSERT INTO "geodetic_crs" VALUES('EPSG','9784','RGF93 v2b (lon-lat)',NULL,'geographic 2D','EPSG','6424','EPSG','1313',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16653','geodetic_crs','EPSG','9784','EPSG','1096','EPSG','1189');
INSERT INTO "geodetic_crs" VALUES('EPSG','9866','MRH21-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1314',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16934','geodetic_crs','EPSG','9866','EPSG','4652','EPSG','1141');
INSERT INTO "geodetic_crs" VALUES('EPSG','9871','MOLDOR11-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1315',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16960','geodetic_crs','EPSG','9871','EPSG','4655','EPSG','1141');
+6 -2
View File
@@ -206,7 +206,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1194','North American Datum of 1983
INSERT INTO "usage" VALUES('EPSG','13246','geodetic_datum','EPSG','1194','EPSG','1061','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1195','North American Datum of 1983 (CSRS) version 4',NULL,'EPSG','7019','EPSG','8901','2002-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13247','geodetic_datum','EPSG','1195','EPSG','1061','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1196','North American Datum of 1983 (CSRS) version 5',NULL,'EPSG','7019','EPSG','8901','2006-01-01',NULL,NULL,NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1196','North American Datum of 1983 (CSRS) version 5',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13248','geodetic_datum','EPSG','1196','EPSG','1061','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1197','North American Datum of 1983 (CSRS) version 6',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13249','geodetic_datum','EPSG','1197','EPSG','1061','EPSG','1027');
@@ -332,7 +332,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1305','ETRF2000 Poland',NULL,'EPSG',
INSERT INTO "usage" VALUES('EPSG','15061','geodetic_datum','EPSG','1305','EPSG','1192','EPSG','1180');
INSERT INTO "geodetic_datum" VALUES('EPSG','1308','EOS21 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','15312','geodetic_datum','EPSG','1308','EPSG','4620','EPSG','1141');
INSERT INTO "geodetic_datum" VALUES('EPSG','1309','World Geodetic System 1984 (G2139)',NULL,'EPSG','7030','EPSG','8901','2010-01-01',2010.0,NULL,NULL,0);
INSERT INTO "geodetic_datum" VALUES('EPSG','1309','World Geodetic System 1984 (G2139)',NULL,'EPSG','7030','EPSG','8901','2016-01-01',2016.0,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16665','geodetic_datum','EPSG','1309','EPSG','1262','EPSG','1176');
INSERT INTO "geodetic_datum" VALUES('EPSG','1310','ECML14_NB Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16494','geodetic_datum','EPSG','1310','EPSG','4621','EPSG','1141');
@@ -342,6 +342,10 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1312','Reseau Geodesique Francais 19
INSERT INTO "usage" VALUES('EPSG','16636','geodetic_datum','EPSG','1312','EPSG','1096','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1313','Reseau Geodesique Francais 1993 v2b',NULL,'EPSG','7019','EPSG','8901','2021-01-05',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16637','geodetic_datum','EPSG','1313','EPSG','1096','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1314','MRH21 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16933','geodetic_datum','EPSG','1314','EPSG','4652','EPSG','1141');
INSERT INTO "geodetic_datum" VALUES('EPSG','1315','MOLDOR11 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2021-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','16950','geodetic_datum','EPSG','1315','EPSG','4655','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,0);
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,0);
+2 -2
View File
@@ -197,8 +197,8 @@ VALUES
-- no_kv - Kartverket
-- Norwegian grids
('HREF2018B_NN2000_EUREF89.gtx','no_kv_HREF2018B_NN2000_EUREF89.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_HREF2018B_NN2000_EUREF89.tif',1,1,NULL),
('href2008a.gtx','no_kv_href2008a.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_href2008a.tif',1,1,NULL),
('HREF2018B_NN2000_EUREF89.bin','no_kv_HREF2018B_NN2000_EUREF89.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_HREF2018B_NN2000_EUREF89.tif',1,1,NULL),
('href2008a.bin','no_kv_href2008a.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/no_kv_href2008a.tif',1,1,NULL),
('no_kv_NKGETRF14_EPSG7922_2000.tif','no_kv_NKGETRF14_EPSG7922_2000.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/no_kv_NKGETRF14_EPSG7922_2000.tif',1,1,NULL),
('no_kv_ETRS89NO_NGO48_TIN.json','no_kv_ETRS89NO_NGO48_TIN.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/no_kv_ETRS89NO_NGO48_TIN.json',1,1,NULL),
+28 -12
View File
@@ -126,8 +126,8 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1573','NAD27 to NAD83 (6)','Als
INSERT INTO "usage" VALUES('EPSG','8494','grid_transformation','EPSG','1573','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','1574','NAD27 to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83(CSRS98) (code 4140) have longitudes positive east. Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1692.','EPSG','9615','NTv2','EPSG','4267','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1);
INSERT INTO "usage" VALUES('EPSG','8495','grid_transformation','EPSG','1574','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','1575','NAD27(CGQ77) to NAD83 (2)','Also distributed with file name CGQ77-83.gsb. Replaces NAD27(CGQ77) to NAD83 (1) (code 1451). Can be taken as approx transformation to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','4269',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0);
INSERT INTO "usage" VALUES('EPSG','8496','grid_transformation','EPSG','1575','EPSG','1368','EPSG','1027');
INSERT INTO "grid_transformation" VALUES('EPSG','1575','NAD27(CGQ77) to NAD83 (2)','Replaces NAD27(CGQ77) to NAD83 (1) (code 1451). Can be taken as approx transformation to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','4269',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC NT2',0);
INSERT INTO "usage" VALUES('EPSG','8496','grid_transformation','EPSG','1575','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','1576','NAD27(CGQ77) to NAD83(CSRS98) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS98) (code 4140) have 1691longitudes positive east. Can be taken as an approximate transformation NAD27(CGQ77) to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','4140',NULL,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1);
INSERT INTO "usage" VALUES('EPSG','8497','grid_transformation','EPSG','1576','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','1578','American Samoa 1962 to NAD83(HARN) (1)','NADCON method which expects longitudes positive west; EPSG GeogCRSs American Samoa 1962 and NAD83(HARN) (codes 4169 and 4152) have longitudes positive east. NADCON expects latitudes in northern hemisphere and values must be made positive prior to input.','EPSG','9613','NADCON','EPSG','4169','EPSG','4152',5.0,'EPSG','8657','Latitude difference file','wshpgn.las','EPSG','8658','Longitude difference file','wshpgn.los',NULL,NULL,'NGS-Asm W',0);
@@ -154,7 +154,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1689','ATS77 to WGS 84 (2)','Pa
INSERT INTO "usage" VALUES('EPSG','8610','grid_transformation','EPSG','1689','EPSG','1533','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1690','NAD27(76) to WGS 84 (1)','Parameter file is from NAD27(76) to NAD83 (1) (code 1463) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4608','EPSG','4326',2.0,'EPSG','8656','Latitude and longitude difference file','May76v20.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can On',0);
INSERT INTO "usage" VALUES('EPSG','8611','grid_transformation','EPSG','1690','EPSG','1367','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1691','NAD27(CGQ77) to WGS 84 (3)','Parameter file is from NAD27(CGQ77) to NAD83(CSRS)v2 (1) (code 9240) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation. Also distributed with file name CGQ77-98.gsb.','EPSG','9615','NTv2','EPSG','4609','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can Qc NT2',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1691','NAD27(CGQ77) to WGS 84 (3)','Parameter file is from NAD27(CGQ77) to NAD83 (2) (code 1575) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4609','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','CQ77NA83.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can Qc NT2',0);
INSERT INTO "usage" VALUES('EPSG','8612','grid_transformation','EPSG','1691','EPSG','1368','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1692','NAD27 to WGS 84 (34)','Parameter file is from NAD27 to NAD83(CSRS)v2 (1) (code 9239) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation. Also distributed as QUE27-98.gsb.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','NA27SCRS.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0);
INSERT INTO "usage" VALUES('EPSG','8613','grid_transformation','EPSG','1692','EPSG','1368','EPSG','1252');
@@ -166,7 +166,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1695','American Samoa 1962 to W
INSERT INTO "usage" VALUES('EPSG','8616','grid_transformation','EPSG','1695','EPSG','2289','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1696','NAD83 to WGS 84 (6)','Parameter file is from NAD83 to NAD83(CSRS)v2 (1) (code 9241) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation. Also distributed with file name NAD83-98.gsb.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','NA83SCRS.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can QC',0);
INSERT INTO "usage" VALUES('EPSG','8617','grid_transformation','EPSG','1696','EPSG','1368','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1697','NAD83 to WGS 84 (7)','Parameter file is from NAD83 to NAD83(CSRS)v3 (2) (code 9243) assuming that NAD83(CSRS)v3 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1697','NAD83 to WGS 84 (7)','Parameter file is from NAD83 to NAD83(CSRS)v2 (2) (code 9887) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0);
INSERT INTO "usage" VALUES('EPSG','8618','grid_transformation','EPSG','1697','EPSG','2375','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1698','St. George Island to WGS 84 (1)','Parameter files are from St. George Island to NAD83 (1) (code 1457) assuming that NAD83 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9613','NADCON','EPSG','4138','EPSG','4326',1.5,'EPSG','8657','Latitude difference file','stgeorge.las','EPSG','8658','Longitude difference file','stgeorge.los',NULL,NULL,'EPSG-Usa AK StG',0);
INSERT INTO "usage" VALUES('EPSG','8619','grid_transformation','EPSG','1698','EPSG','1331','EPSG','1252');
@@ -176,7 +176,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','1700','St. Paul Island to WGS 8
INSERT INTO "usage" VALUES('EPSG','8621','grid_transformation','EPSG','1700','EPSG','1333','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1702','NAD83 to WGS 84 (8)','Parameter file is from NAD83 to NAD83(CSRS)v4 (3) (code 9244) assuming that NAD83(CSRS)v4 is equivalent to WGS 84 within the accuracy of the transformation. This file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software.','EPSG','9615','NTv2','EPSG','4269','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can AB',0);
INSERT INTO "usage" VALUES('EPSG','8623','grid_transformation','EPSG','1702','EPSG','2376','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1703','NAD27 to WGS 84 (32)','Parameter file is from NAD27 to NAD83(CSRS)v3 (2) (code 9242) assuming that NAD83(CSRS)v3 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','1703','NAD27 to WGS 84 (32)','Parameter file is from NAD27 to NAD83(CSRS)v2 (2) (code 9886) assuming that NAD83(CSRS)v2 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9615','NTv2','EPSG','4267','EPSG','4326',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Can SK',0);
INSERT INTO "usage" VALUES('EPSG','8624','grid_transformation','EPSG','1703','EPSG','2375','EPSG','1252');
INSERT INTO "grid_transformation" VALUES('EPSG','1704','NAD83 to NAD83(HARN) (40)','Uses NADCON method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(HARN) (code 4152) have longitudes positive east. May be taken as approximate transformation NAD83-WGS 84 - see code 1708.','EPSG','9613','NADCON','EPSG','4269','EPSG','4152',0.05,'EPSG','8657','Latitude difference file','arhpgn.las','EPSG','8658','Longitude difference file','arhpgn.los',NULL,NULL,'NGS-Usa AR',0);
INSERT INTO "usage" VALUES('EPSG','8625','grid_transformation','EPSG','1704','EPSG','1374','EPSG','1027');
@@ -670,13 +670,13 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9238','NAD27 to NAD83(CSRS)v2 (
INSERT INTO "usage" VALUES('EPSG','13883','grid_transformation','EPSG','9238','EPSG','1447','EPSG','1231');
INSERT INTO "grid_transformation" VALUES('EPSG','9239','NAD27 to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1692.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','QUE27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
INSERT INTO "usage" VALUES('EPSG','13884','grid_transformation','EPSG','9239','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9240','NAD27(CGQ77) to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD27(CGQ77) to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9240','NAD27(CGQ77) to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS) (code 4617) have longitudes positive east.','EPSG','9615','NTv2','EPSG','4609','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
INSERT INTO "usage" VALUES('EPSG','13885','grid_transformation','EPSG','9240','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9241','NAD83 to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS)v2 (code 8237) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
INSERT INTO "usage" VALUES('EPSG','14556','grid_transformation','EPSG','9241','EPSG','1368','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9242','NAD27 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9242','NAD27 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1);
INSERT INTO "usage" VALUES('EPSG','13887','grid_transformation','EPSG','9242','EPSG','2375','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9243','NAD83 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9243','NAD83 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',1);
INSERT INTO "usage" VALUES('EPSG','13888','grid_transformation','EPSG','9243','EPSG','2375','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9244','NAD83 to NAD83(CSRS)v4 (3)','This gridded difference file AB_CSRS.DAC will need to be renamed to AB_CSRS.gsb to run in some software suites. Formats identical, but AB file is provincial fit only. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1702.','EPSG','9615','NTv2','EPSG','4269','EPSG','8246',1.5,'EPSG','8656','Latitude and longitude difference file','AB_CSRS.DAC',NULL,NULL,NULL,NULL,NULL,NULL,'AB Env-Can AB',0);
INSERT INTO "usage" VALUES('EPSG','13889','grid_transformation','EPSG','9244','EPSG','2376','EPSG','1151');
@@ -830,9 +830,9 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9467','GDA94 to GDA94 + AHD hei
INSERT INTO "usage" VALUES('EPSG','14147','grid_transformation','EPSG','9467','EPSG','4493','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','9483','Canada velocity grid v7','','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8254','EPSG','8254',0.01,'EPSG','1050','Point motion velocity grid file','cvg70.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg7.0',0);
INSERT INTO "usage" VALUES('EPSG','14214','grid_transformation','EPSG','9483','EPSG','1061','EPSG','1131');
INSERT INTO "grid_transformation" VALUES('EPSG','9484','ETRS89 to NN54 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN54 height (1) (code 9594).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5776',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2008',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9484','ETRS89 to NN54 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN54 height (1) (code 9594).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5776',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2008',0);
INSERT INTO "usage" VALUES('EPSG','14374','grid_transformation','EPSG','9484','EPSG','1352','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','9485','ETRS89 to NN2000 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN2000 height (1) (code 9593).','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5941',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2018',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9485','ETRS89 to NN2000 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN2000 height (1) (code 9593).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5941',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2018',0);
INSERT INTO "usage" VALUES('EPSG','14376','grid_transformation','EPSG','9485','EPSG','1352','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','9496','MGI 1901 to SRB-ETRS89 (9)','','EPSG','9615','NTv2','EPSG','3906','EPSG','8685',0.03,'EPSG','8656','Latitude and longitude difference file','MGI1901_TO_SRBETRS89_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb 0.1m 2020',0);
INSERT INTO "usage" VALUES('EPSG','14226','grid_transformation','EPSG','9496','EPSG','4543','EPSG','1185');
@@ -916,9 +916,9 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9591','ETRS89 to ETRS89 + Malin
INSERT INTO "usage" VALUES('EPSG','15081','grid_transformation','EPSG','9591','EPSG','1305','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9592','ETRS89 to ETRS89 + Belfast height (2)','Reversible alternative to ETRS89 to Belfast height (2) (code 7958).','EPSG','1096','Geog3D to Geog2D+GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','9450',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,'EPSG','4258','OS-UK NI 2015',0);
INSERT INTO "usage" VALUES('EPSG','14504','grid_transformation','EPSG','9592','EPSG','2530','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9593','ETRS89 to ETRS89 + NN2000 height (1)','Reversible alternative to ETRS89 to NN2000 height (1) (code 9485).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5942',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2018',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9593','ETRS89 to ETRS89 + NN2000 height (1)','Reversible alternative to ETRS89 to NN2000 height (1) (code 9485).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5942',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2018',0);
INSERT INTO "usage" VALUES('EPSG','14465','grid_transformation','EPSG','9593','EPSG','1352','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9594','ETRS89 to ETRS89 + NN54 height (1)','Reversible alternative to ETRS89 to NN54 height (1) (code 9484).','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','4937','EPSG','6144',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.gtx',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2008',0);
INSERT INTO "grid_transformation" VALUES('EPSG','9594','ETRS89 to ETRS89 + NN54 height (1)','Reversible alternative to ETRS89 to NN54 height (1) (code 9484).','EPSG','1093','Geog3D to Geog2D+GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','6144',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2008',0);
INSERT INTO "usage" VALUES('EPSG','14464','grid_transformation','EPSG','9594','EPSG','1352','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9595','NAD83(2011) to NAD83(2011) + NAVD88 height (3)','Reversible alternative to NAD83(2011) to NAVD88 height (3) (code 9229). Uses Geoid18 hybrid model. Replaces 12B model. See information source for further information.','EPSG','1088','Geog3D to Geog2D+GravityRelatedHeight (gtx)','EPSG','6319','EPSG','6349',0.015,'EPSG','8666','Geoid (height correction) model file','g2018u0.bin',NULL,NULL,NULL,NULL,'EPSG','6318','NGS-US Conus 18',0);
INSERT INTO "usage" VALUES('EPSG','14853','grid_transformation','EPSG','9595','EPSG','1323','EPSG','1270');
@@ -1114,10 +1114,26 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9787','RGF93 v2b to RGF93 v2b +
INSERT INTO "usage" VALUES('EPSG','16690','grid_transformation','EPSG','9787','EPSG','1326','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9795','NAD83 to NAD83(CSRS)v7 (1)','Also distributed through Alberta Environment and Parks Lands Division named ABCSRSV7.DAC.','EPSG','9615','NTv2','EPSG','4269','EPSG','8255',0.1,'EPSG','8656','Latitude and longitude difference file','ABCSRSV7.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can AB',0);
INSERT INTO "usage" VALUES('EPSG','16635','grid_transformation','EPSG','9795','EPSG','2376','EPSG','1031');
INSERT INTO "grid_transformation" VALUES('EPSG','9867','ETRS89 to MRH21-IRF (1)','In conjunction with MRH21-TM map projection (code 9868) applied to MRH21-IRF (code 9866), emulates the MRH21 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines MRH21-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','9866',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MRH21-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MHR21 OSNet2009',0);
INSERT INTO "usage" VALUES('EPSG','16943','grid_transformation','EPSG','9867','EPSG','4652','EPSG','1141');
INSERT INTO "grid_transformation" VALUES('EPSG','9876','RGF93 v2b to NGF-IGN69 height (5)','Replaces RAF18b geoid model [RGF93 v2 to NGF-IGN69 height (4)]. 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 (5) (code 9877).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','5720',0.01,'EPSG','8666','Geoid (height correction) model file','RAF20.tac',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 20',0);
INSERT INTO "usage" VALUES('EPSG','16930','grid_transformation','EPSG','9876','EPSG','1326','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','9877','RGF93 v2b to RGF93 v2b + NGF-IGN69 height (5)','Reversible alternative to RGF93 v2b to NGF-IGN69 height (5) (CT code 9876). Replaces RGF93 v2b to RGF93 v2b + NGF-IGN69 height (4) (CT code 9787).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','9781','EPSG','9785',0.01,'EPSG','8666','Geoid (height correction) model file','RAF20.tac',NULL,NULL,NULL,NULL,'EPSG','9782','IGN Fra 20',0);
INSERT INTO "usage" VALUES('EPSG','16932','grid_transformation','EPSG','9877','EPSG','1326','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9878','ETRS89 to MOLDOR11-IRF (1)','In conjunction with the MOLDOR11-TM map projection (code 9879) applied to MOLDOR11-IRF (code 9871), emulates the MOLDOR11 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines MOLDOR11-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9871',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-MOLDOR11-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr MOLDOR OSNet2009',0);
INSERT INTO "usage" VALUES('EPSG','16955','grid_transformation','EPSG','9878','EPSG','4655','EPSG','1141');
INSERT INTO "grid_transformation" VALUES('EPSG','9884','ETRS89 to CD Norway depth (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + CD Norway depth (1) (code 9885). An improved model is expected in 2023.','EPSG','1109','Geographic3D to Depth (Gravsoft)','EPSG','4937','EPSG','9672',999.0,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2021a.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2021',0);
INSERT INTO "usage" VALUES('EPSG','16982','grid_transformation','EPSG','9884','EPSG','4656','EPSG','1277');
INSERT INTO "grid_transformation" VALUES('EPSG','9885','ETRS89 to ETRS89 + CD Norway depth (1)','Reversible alternative to ETRS89 to CD Norway depth (1) (code 9884). An improved model is expected in 2023.','EPSG','1110','Geog3D to Geog2D+Depth (Gravsoft)','EPSG','4937','EPSG','9883',999.0,'EPSG','8666','Geoid (height correction) model file','ChartDatum_above_Ellipsoid_EUREF89_v2021a.bin',NULL,NULL,NULL,NULL,'EPSG','4258','SK-Nor 2021',0);
INSERT INTO "usage" VALUES('EPSG','16984','grid_transformation','EPSG','9885','EPSG','4656','EPSG','1272');
INSERT INTO "grid_transformation" VALUES('EPSG','9886','NAD27 to NAD83(CSRS)v2 (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0);
INSERT INTO "usage" VALUES('EPSG','16978','grid_transformation','EPSG','9886','EPSG','2375','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9887','NAD83 to NAD83(CSRS)v2 (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0);
INSERT INTO "usage" VALUES('EPSG','16979','grid_transformation','EPSG','9887','EPSG','2375','EPSG','1151');
INSERT INTO "grid_transformation" VALUES('EPSG','9902','Baltic 1977 height to EVRF2019 height (1)','Determined at 154 points, SD 0.034m. Offset: mean 0.151m, minimum 0.079m, maximum 0.285m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5705','EPSG','9389',0.068,'EPSG','8732','Vertical offset file','ua_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ukr 2019z 2021',0);
INSERT INTO "usage" VALUES('EPSG','17066','grid_transformation','EPSG','9902','EPSG','3324','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','9903','Baltic 1977 height to EVRF2019 mean-tide height (1)','Determined at 154 points, SD 0.032m. Offset: mean 0.131m, minimum 0.066m, maximum 0.268m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5705','EPSG','9390',0.064,'EPSG','8732','Vertical offset file','ua_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ukr 2019m 2021',0);
INSERT INTO "usage" VALUES('EPSG','17067','grid_transformation','EPSG','9903','EPSG','3324','EPSG','1059');
INSERT INTO "grid_transformation" VALUES('EPSG','10000','RGF93 v1 to NGF-IGN69 height (1)','May be used for transformations from WGS 84 to NGF-IGN69 height. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5720',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0);
INSERT INTO "usage" VALUES('EPSG','11001','grid_transformation','EPSG','10000','EPSG','1326','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','10001','ETRS89 to NGF-IGN69 height (1)','Parameter values taken from RGF93 v1 to NGF-IGN69 height (1) (code 10000) assuming that RGF93 v1 is equivalent to ETRS89 within the accuracy of the transformation. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4937','EPSG','5720',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0);
+5 -1
View File
@@ -1925,7 +1925,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','7809','ITRF2008 to NAD83(MA1
INSERT INTO "usage" VALUES('EPSG','10274','helmert_transformation','EPSG','7809','EPSG','4167','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','7814','ITRF89 to ITRF2000 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','4919',0.01,-2.97,-4.75,7.39,'EPSG','1033',0.0,0.0,0.18,'EPSG','1031',-5.85,'EPSG','1028',0.0,0.06,0.14,'EPSG','1034',0.0,0.0,-0.02,'EPSG','1032',-0.01,'EPSG','1030',1988.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'IERS-Wld',0);
INSERT INTO "usage" VALUES('EPSG','10279','helmert_transformation','EPSG','7814','EPSG','1262','EPSG','1027');
INSERT INTO "helmert_transformation" VALUES('EPSG','7817','UCS-2000 to ITRF2000 (1)','Derived for epoch 2005.0 at which time it defines UCS-2000 and is therefore exact (accuracy = 0) at this epoch. May be taken as approximate transformation UCS-2000 to WGS 84 - see code 5840.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','5558','EPSG','4919',0.0,24.322,-121.372,-75.847,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SSGC-Ukr',0);
INSERT INTO "helmert_transformation" VALUES('EPSG','7817','UCS-2000 to ITRF2000 (1)','Derived for epoch 2005.0 at which time it defines UCS-2000 and is therefore exact (accuracy = 0) at this epoch. May be taken as approximate transformation UCS-2000 to ETRS89 and UCS-2000 to WGS 84 - see codes 9901 and 5840.','EPSG','1031','Geocentric translations (geocentric domain)','EPSG','5558','EPSG','4919',0.0,24.322,-121.372,-75.847,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SSGC-Ukr',0);
INSERT INTO "usage" VALUES('EPSG','10280','helmert_transformation','EPSG','7817','EPSG','1242','EPSG','1041');
INSERT INTO "helmert_transformation" VALUES('EPSG','7833','Albanian 1987 to ETRS89 (1)','Derived using 90 stations by IGM Italy on behalf of ASIG. mse = 18cm. Use only for horizontal coordinates; geoid heights must be calculated with ALBGEO3 software. May be taken as approximate transformation from Albanian 1987 to WGS 84 (see code 7834).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4191','EPSG','4258',0.2,-44.183,-0.58,-38.489,'EPSG','9001',-2.3867,-2.7072,3.5196,'EPSG','9104',-8.2703,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Alb 2D',0);
INSERT INTO "usage" VALUES('EPSG','10288','helmert_transformation','EPSG','7833','EPSG','3212','EPSG','1032');
@@ -2465,6 +2465,10 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','9791','RGF93 v2 to WGS 84 (1
INSERT INTO "usage" VALUES('EPSG','16612','helmert_transformation','EPSG','9791','EPSG','1096','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','9792','RGF93 v2b to WGS 84 (1)','Approximation at the 1m level assuming that ETRS89 is equivalent to WGS 84 within the accuracy of the transformation. (RGF93 v2b is a national realization of ETRS89).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','9782','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-Fra',0);
INSERT INTO "usage" VALUES('EPSG','16613','helmert_transformation','EPSG','9792','EPSG','1096','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','9882','RGF93 v1 to RGF93 v2 (1)','Maximum differences are 0.1m in both horizontal and vertical. Distortions in RGF93 v1 are irregular and IGN considers that no systematic transformation to the improved v2 adjustment is possible.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4171','EPSG','9777',0.05,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,'IGN-Fra',0);
INSERT INTO "usage" VALUES('EPSG','16986','helmert_transformation','EPSG','9882','EPSG','1096','EPSG','1079');
INSERT INTO "helmert_transformation" VALUES('EPSG','9901','UCS-2000 to ETRS89 (1)','Rounded parameter values taken from UCS-2000 to ITRF2000 (1) (code 7817) assuming that ETRS89 is equivalent to ITRS2000 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5561','EPSG','4258',1.0,24.0,-121.0,-76.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 SSGC',0);
INSERT INTO "usage" VALUES('EPSG','17069','helmert_transformation','EPSG','9901','EPSG','1242','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','10085','Trinidad 1903 to WGS 84 (2)','Parameter values provided to EOG by Trinidad Ministry of Energy and Energy Industries. Used by EOG offshore Trinidad (including Pelican, Kiskadee and Ibis fields) since 1996.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4302','EPSG','4326',3.0,-61.0,285.2,471.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EOG-Tto Trin',0);
INSERT INTO "usage" VALUES('EPSG','11086','helmert_transformation','EPSG','10085','EPSG','1339','EPSG','1136');
INSERT INTO "helmert_transformation" VALUES('EPSG','10086','JAD69 to WGS 72 (1)','Derived in 1977 through Transit observations at 2 stations by US DMA.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4322',15.0,48.0,208.0,382.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0);
+2 -2
View File
@@ -9,8 +9,8 @@
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1);
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 2);
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.038');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2021-10-21');
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.041');
INSERT INTO "metadata" VALUES('EPSG.DATE', '2021-12-03');
-- The value of ${PROJ_VERSION} is substituted at build time by the actual
-- value.
+4
View File
@@ -7425,10 +7425,14 @@ INSERT INTO "projected_crs" VALUES('EPSG','9864','UCS-2000 / LCS-80 Kyiv city',N
INSERT INTO "usage" VALUES('EPSG','16922','projected_crs','EPSG','9864','EPSG','4623','EPSG','1207');
INSERT INTO "projected_crs" VALUES('EPSG','9865','UCS-2000 / LCS-85 Sevastopol',NULL,'EPSG','4531','EPSG','5561','EPSG','9820',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16836','projected_crs','EPSG','9865','EPSG','4649','EPSG','1207');
INSERT INTO "projected_crs" VALUES('EPSG','9869','MHR21 Grid',NULL,'EPSG','4400','EPSG','9866','EPSG','9868',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16939','projected_crs','EPSG','9869','EPSG','4652','EPSG','1141');
INSERT INTO "projected_crs" VALUES('EPSG','9874','PNG94 / PNGMG94 zone 57',NULL,'EPSG','4400','EPSG','5546','EPSG','9872',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16919','projected_crs','EPSG','9874','EPSG','4653','EPSG','1092');
INSERT INTO "projected_crs" VALUES('EPSG','9875','PNG94 / PNGMG94 zone 58',NULL,'EPSG','4400','EPSG','5546','EPSG','9873',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16920','projected_crs','EPSG','9875','EPSG','4654','EPSG','1092');
INSERT INTO "projected_crs" VALUES('EPSG','9880','MOLDOR11 Grid',NULL,'EPSG','4400','EPSG','9871','EPSG','9879',NULL,0);
INSERT INTO "usage" VALUES('EPSG','16961','projected_crs','EPSG','9880','EPSG','4655','EPSG','1141');
INSERT INTO "projected_crs" VALUES('EPSG','20004','Pulkovo 1995 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4200','EPSG','16204',NULL,0);
INSERT INTO "usage" VALUES('EPSG','6177','projected_crs','EPSG','20004','EPSG','1763','EPSG','1211');
INSERT INTO "projected_crs" VALUES('EPSG','20005','Pulkovo 1995 / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4200','EPSG','16205',NULL,0);
+2
View File
@@ -248,7 +248,9 @@ INSERT INTO "scope" VALUES('EPSG','1268','Geodesy, location based services, inte
INSERT INTO "scope" VALUES('EPSG','1269','Intermediate CRS in transformation to and from projected CRS.',0);
INSERT INTO "scope" VALUES('EPSG','1270','Reversible geoid model transformation.',0);
INSERT INTO "scope" VALUES('EPSG','1271','Engineering survey and mapping for the Trans-Europe Lyon-Turin (TELT) railway project.',0);
INSERT INTO "scope" VALUES('EPSG','1272','Reversible hydroid model transformation.',0);
INSERT INTO "scope" VALUES('EPSG','1273','Transformation of coordinates at 0.03m level of accuracy.',0);
INSERT INTO "scope" VALUES('EPSG','1274','Spatial referencing including water resource management.',0);
INSERT INTO "scope" VALUES('EPSG','1275','Alignment of datasets referenced to WGS 84 which have been derived from GDA2020 via the null transformation EPSG::8450 with GDA94 datasets.',0);
INSERT INTO "scope" VALUES('EPSG','1276','Alignment of datasets referenced to WGS 84 which have been derived from GDA94 via the null transformation EPSG::1150 with GDA2020 datasets.',0);
INSERT INTO "scope" VALUES('EPSG','1277','Derivation of depths from GNSS observations.',0);
+42 -42
View File
@@ -20,6 +20,8 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5237','SLVD height',NULL,'EPSG','6499'
INSERT INTO "usage" VALUES('EPSG','3876','vertical_crs','EPSG','5237','EPSG','3310','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5317','FVR09 height',NULL,'EPSG','6499','EPSG','1059',0);
INSERT INTO "usage" VALUES('EPSG','3924','vertical_crs','EPSG','5317','EPSG','3248','EPSG','1029');
INSERT INTO "vertical_crs" VALUES('EPSG','5336','Black Sea depth',NULL,'EPSG','6498','EPSG','5134',0);
INSERT INTO "usage" VALUES('EPSG','3936','vertical_crs','EPSG','5336','EPSG','1102','EPSG','1198');
INSERT INTO "vertical_crs" VALUES('EPSG','5597','FCSVR10 height',NULL,'EPSG','6499','EPSG','1079',0);
INSERT INTO "usage" VALUES('EPSG','4067','vertical_crs','EPSG','5597','EPSG','3890','EPSG','1139');
INSERT INTO "vertical_crs" VALUES('EPSG','5600','NGPF height',NULL,'EPSG','6499','EPSG','5195',0);
@@ -46,8 +48,12 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5610','HVRS71 height',NULL,'EPSG','649
INSERT INTO "usage" VALUES('EPSG','4079','vertical_crs','EPSG','5610','EPSG','3234','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5611','Caspian height',NULL,'EPSG','6499','EPSG','5106',0);
INSERT INTO "usage" VALUES('EPSG','4080','vertical_crs','EPSG','5611','EPSG','1291','EPSG','1136');
INSERT INTO "vertical_crs" VALUES('EPSG','5612','Baltic 1977 depth',NULL,'EPSG','6498','EPSG','5105',0);
INSERT INTO "usage" VALUES('EPSG','4081','vertical_crs','EPSG','5612','EPSG','2423','EPSG','1136');
INSERT INTO "vertical_crs" VALUES('EPSG','5613','RH2000 height',NULL,'EPSG','6499','EPSG','5208',0);
INSERT INTO "usage" VALUES('EPSG','4082','vertical_crs','EPSG','5613','EPSG','3313','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','5614','KOC WD depth (ft)',NULL,'EPSG','6495','EPSG','5187',0);
INSERT INTO "usage" VALUES('EPSG','4083','vertical_crs','EPSG','5614','EPSG','3267','EPSG','1205');
INSERT INTO "vertical_crs" VALUES('EPSG','5615','RH00 height',NULL,'EPSG','6499','EPSG','5209',0);
INSERT INTO "usage" VALUES('EPSG','4084','vertical_crs','EPSG','5615','EPSG','3313','EPSG','1029');
INSERT INTO "vertical_crs" VALUES('EPSG','5616','IGN 1988 LS height',NULL,'EPSG','6499','EPSG','5210',0);
@@ -72,6 +78,8 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5704','Yellow Sea',NULL,'EPSG','6499',
INSERT INTO "usage" VALUES('EPSG','4147','vertical_crs','EPSG','5704','EPSG','1067','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','5705','Baltic 1977 height',NULL,'EPSG','6499','EPSG','5105',0);
INSERT INTO "usage" VALUES('EPSG','4148','vertical_crs','EPSG','5705','EPSG','2423','EPSG','1179');
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','5709','NAP height',NULL,'EPSG','6499','EPSG','5109',0);
INSERT INTO "usage" VALUES('EPSG','4152','vertical_crs','EPSG','5709','EPSG','1172','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','5710','Ostend height',NULL,'EPSG','6499','EPSG','5110',0);
@@ -84,6 +92,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);
@@ -120,6 +130,8 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5732','Belfast height',NULL,'EPSG','64
INSERT INTO "usage" VALUES('EPSG','4175','vertical_crs','EPSG','5732','EPSG','2530','EPSG','1209');
INSERT INTO "vertical_crs" VALUES('EPSG','5733','DNN height',NULL,'EPSG','6499','EPSG','5132',0);
INSERT INTO "usage" VALUES('EPSG','4176','vertical_crs','EPSG','5733','EPSG','3237','EPSG','1142');
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','5735','Black Sea height',NULL,'EPSG','6499','EPSG','5134',0);
INSERT INTO "usage" VALUES('EPSG','4178','vertical_crs','EPSG','5735','EPSG','3251','EPSG','1153');
INSERT INTO "vertical_crs" VALUES('EPSG','5736','Yellow Sea 1956 height',NULL,'EPSG','6499','EPSG','5104',0);
@@ -228,6 +240,8 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5787','EOMA 1980 height',NULL,'EPSG','
INSERT INTO "usage" VALUES('EPSG','4230','vertical_crs','EPSG','5787','EPSG','1119','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5788','Kuwait PWD height',NULL,'EPSG','6499','EPSG','5186',0);
INSERT INTO "usage" VALUES('EPSG','4231','vertical_crs','EPSG','5788','EPSG','3267','EPSG','1248');
INSERT INTO "vertical_crs" VALUES('EPSG','5789','KOC WD depth',NULL,'EPSG','6498','EPSG','5187',0);
INSERT INTO "usage" VALUES('EPSG','4232','vertical_crs','EPSG','5789','EPSG','3267','EPSG','1205');
INSERT INTO "vertical_crs" VALUES('EPSG','5790','KOC CD height',NULL,'EPSG','6499','EPSG','5188',0);
INSERT INTO "usage" VALUES('EPSG','4233','vertical_crs','EPSG','5790','EPSG','3267','EPSG','1206');
INSERT INTO "vertical_crs" VALUES('EPSG','5791','NGC 1948 height',NULL,'EPSG','6499','EPSG','5189',0);
@@ -250,6 +264,8 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5799','DVR90 height',NULL,'EPSG','6499
INSERT INTO "usage" VALUES('EPSG','4242','vertical_crs','EPSG','5799','EPSG','3237','EPSG','1142');
INSERT INTO "vertical_crs" VALUES('EPSG','5829','Instantaneous Water Level height',NULL,'EPSG','6499','EPSG','5113',0);
INSERT INTO "usage" VALUES('EPSG','4267','vertical_crs','EPSG','5829','EPSG','1262','EPSG','1200');
INSERT INTO "vertical_crs" VALUES('EPSG','5831','Instantaneous Water Level depth',NULL,'EPSG','6498','EPSG','5113',0);
INSERT INTO "usage" VALUES('EPSG','4269','vertical_crs','EPSG','5831','EPSG','1262','EPSG','1200');
INSERT INTO "vertical_crs" VALUES('EPSG','5843','Ras Ghumays height',NULL,'EPSG','6499','EPSG','1146',0);
INSERT INTO "usage" VALUES('EPSG','4278','vertical_crs','EPSG','5843','EPSG','4225','EPSG','1142');
INSERT INTO "vertical_crs" VALUES('EPSG','5861','LAT depth',NULL,'EPSG','6498','EPSG','1080',0);
@@ -308,6 +324,14 @@ INSERT INTO "vertical_crs" VALUES('EPSG','6186','Cais da Vila do Porto height',N
INSERT INTO "usage" VALUES('EPSG','4505','vertical_crs','EPSG','6186','EPSG','4126','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','6187','Ponta Delgada height',NULL,'EPSG','6499','EPSG','1110',0);
INSERT INTO "usage" VALUES('EPSG','4506','vertical_crs','EPSG','6187','EPSG','2871','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','6357','NAVD88 depth',NULL,'EPSG','6498','EPSG','5103',0);
INSERT INTO "usage" VALUES('EPSG','4591','vertical_crs','EPSG','6357','EPSG','4161','EPSG','1179');
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','6359','NGVD29 depth (ftUS)',NULL,'EPSG','1043','EPSG','5102',0);
INSERT INTO "usage" VALUES('EPSG','4593','vertical_crs','EPSG','6359','EPSG','1323','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','6360','NAVD88 height (ftUS)',NULL,'EPSG','6497','EPSG','5103',0);
INSERT INTO "usage" VALUES('EPSG','4594','vertical_crs','EPSG','6360','EPSG','3664','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','6638','Tutuila 1962 height',NULL,'EPSG','6499','EPSG','1121',0);
INSERT INTO "usage" VALUES('EPSG','4859','vertical_crs','EPSG','6638','EPSG','2288','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','6639','Guam 1963 height',NULL,'EPSG','6499','EPSG','1122',0);
@@ -360,16 +384,34 @@ INSERT INTO "vertical_crs" VALUES('EPSG','7889','St. Helena Tritan 2011 height',
INSERT INTO "usage" VALUES('EPSG','5531','vertical_crs','EPSG','7889','EPSG','3183','EPSG','1145');
INSERT INTO "vertical_crs" VALUES('EPSG','7890','SHVD2015 height',NULL,'EPSG','6499','EPSG','1177',0);
INSERT INTO "usage" VALUES('EPSG','5532','vertical_crs','EPSG','7890','EPSG','3183','EPSG','1027');
INSERT INTO "vertical_crs" VALUES('EPSG','7962','Poolbeg height (m)',NULL,'EPSG','6499','EPSG','5152',0);
INSERT INTO "usage" VALUES('EPSG','5568','vertical_crs','EPSG','7962','EPSG','1305','EPSG','1203');
INSERT INTO "vertical_crs" VALUES('EPSG','7968','NGVD29 height (m)',NULL,'EPSG','6499','EPSG','5102',0);
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','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','3262','EPSG','1178');
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','8266','GVR2000 height',NULL,'EPSG','6499','EPSG','1199',0);
INSERT INTO "usage" VALUES('EPSG','5758','vertical_crs','EPSG','8266','EPSG','4461','EPSG','1153');
INSERT INTO "vertical_crs" VALUES('EPSG','8267','GVR2016 height',NULL,'EPSG','6499','EPSG','1200',0);
INSERT INTO "usage" VALUES('EPSG','5759','vertical_crs','EPSG','8267','EPSG','4454','EPSG','1153');
INSERT INTO "vertical_crs" VALUES('EPSG','8357','Baltic 1957 height',NULL,'EPSG','6499','EPSG','1202',0);
INSERT INTO "usage" VALUES('EPSG','5803','vertical_crs','EPSG','8357','EPSG','1306','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','8358','Baltic 1957 depth',NULL,'EPSG','6498','EPSG','1202',0);
INSERT INTO "usage" VALUES('EPSG','5804','vertical_crs','EPSG','8358','EPSG','1306','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','8378','EPSG example wellbore local vertical CRS',NULL,'EPSG','1049','EPSG','1205',0);
INSERT INTO "usage" VALUES('EPSG','5808','vertical_crs','EPSG','8378','EPSG','4393','EPSG','1226');
INSERT INTO "vertical_crs" VALUES('EPSG','8434','Macao height',NULL,'EPSG','6499','EPSG','1210',0);
@@ -462,45 +504,3 @@ INSERT INTO "vertical_crs" VALUES('EPSG','9721','Catania 1965 height',NULL,'EPSG
INSERT INTO "usage" VALUES('EPSG','15276','vertical_crs','EPSG','9721','EPSG','2340','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','9722','Cagliari 1956 height',NULL,'EPSG','6499','EPSG','1307',0);
INSERT INTO "usage" VALUES('EPSG','15278','vertical_crs','EPSG','9722','EPSG','2339','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5336','Black Sea depth',NULL,'EPSG','6498','EPSG','5134',0);
INSERT INTO "usage" VALUES('EPSG','3936','vertical_crs','EPSG','5336','EPSG','1102','EPSG','1198');
INSERT INTO "vertical_crs" VALUES('EPSG','5612','Baltic 1977 depth',NULL,'EPSG','6498','EPSG','5105',0);
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);
INSERT INTO "usage" VALUES('EPSG','4232','vertical_crs','EPSG','5789','EPSG','3267','EPSG','1205');
INSERT INTO "vertical_crs" VALUES('EPSG','5831','Instantaneous Water Level depth',NULL,'EPSG','6498','EPSG','5113',0);
INSERT INTO "usage" VALUES('EPSG','4269','vertical_crs','EPSG','5831','EPSG','1262','EPSG','1200');
INSERT INTO "vertical_crs" VALUES('EPSG','6357','NAVD88 depth',NULL,'EPSG','6498','EPSG','5103',0);
INSERT INTO "usage" VALUES('EPSG','4591','vertical_crs','EPSG','6357','EPSG','4161','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','6359','NGVD29 depth (ftUS)',NULL,'EPSG','1043','EPSG','5102',0);
INSERT INTO "usage" VALUES('EPSG','4593','vertical_crs','EPSG','6359','EPSG','1323','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','6360','NAVD88 height (ftUS)',NULL,'EPSG','6497','EPSG','5103',0);
INSERT INTO "usage" VALUES('EPSG','4594','vertical_crs','EPSG','6360','EPSG','3664','EPSG','1179');
INSERT INTO "vertical_crs" VALUES('EPSG','7962','Poolbeg height (m)',NULL,'EPSG','6499','EPSG','5152',0);
INSERT INTO "usage" VALUES('EPSG','5568','vertical_crs','EPSG','7962','EPSG','1305','EPSG','1203');
INSERT INTO "vertical_crs" VALUES('EPSG','7968','NGVD29 height (m)',NULL,'EPSG','6499','EPSG','5102',0);
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);
INSERT INTO "usage" VALUES('EPSG','5804','vertical_crs','EPSG','8358','EPSG','1306','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5614','KOC WD depth (ft)',NULL,'EPSG','6495','EPSG','5187',0);
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');
Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

+227
View File
@@ -0,0 +1,227 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="297mm"
height="210mm"
viewBox="0 0 297 210"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c8708, 2021-01-15)"
sodipodi:docname="general_ellipsoid.svg"
inkscape:export-filename="general_ellipsoid.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<title
id="title957">Global and local fitting of an ellipsoid</title>
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.031875"
inkscape:cx="374.70624"
inkscape:cy="396.85039"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
inkscape:window-width="1598"
inkscape:window-height="1027"
inkscape:window-x="1856"
inkscape:window-y="35"
inkscape:window-maximized="0" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Global and local fitting of an ellipsoid</dc:title>
<cc:license
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
<dc:date>2021-11-05</dc:date>
<dc:creator>
<cc:Agent>
<dc:title>Brendan Jurd</dc:title>
</cc:Agent>
</dc:creator>
<dc:contributor>
<cc:Agent>
<dc:title>Github user RohitPingale</dc:title>
</cc:Agent>
</dc:contributor>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#999999;stroke-width:0.750858;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.50172, 0.75085800000000003;stroke-dashoffset:0;stroke-opacity:0.40080971"
d="M 156.44319,186.24994 V 117.82622"
id="path1482" />
<path
style="fill:none;stroke:#999999;stroke-width:0.896;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.792, 0.89600000000000002;stroke-dashoffset:0;stroke-opacity:0.40080971"
d="m 58.96348,118.22975 h 97.33606"
id="path935" />
<ellipse
style="fill:none;fill-rule:evenodd;stroke:#1a1a1a;stroke-width:2.065;stroke-miterlimit:4;stroke-dasharray:none"
id="path28"
cx="156.44319"
cy="118.22974"
rx="97.51786"
ry="69.16964" />
<path
style="fill:none;stroke:#999999;stroke-width:0.750858;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.50172, 0.750858;stroke-dashoffset:0;stroke-opacity:1"
d="M 156.44319,117.82622 V 49.402501"
id="path853" />
<path
style="fill:none;stroke:#999999;stroke-width:0.895554;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.79111, 0.895554;stroke-dashoffset:0;stroke-opacity:1"
d="M 156.29954,118.22975 H 253.6356"
id="path855" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.112651"
x="159.34363"
y="83.696701"
id="text859"><tspan
sodipodi:role="line"
id="tspan857"
x="159.34363"
y="83.696701"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.112651">Semi-minor axis (<tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.112651"
id="tspan879">b</tspan>)</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;line-height:1.25;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.112651"
x="181.45177"
y="124.99306"
id="text885"><tspan
sodipodi:role="line"
x="181.45177"
y="124.99306"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93889px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.112651"
id="tspan887">Semi-major axis (a)</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.147382"
x="158.15302"
y="21.362297"
id="text895"><tspan
sodipodi:role="line"
id="tspan901"
x="158.15302"
y="21.362297"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.147382">Ellipsoid with global</tspan><tspan
sodipodi:role="line"
id="tspan903"
x="158.15302"
y="28.417847"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.147382">best fit to the geoid</tspan></text>
<path
id="ellipse899"
style="fill:none;fill-rule:evenodd;stroke:#0000ff;stroke-width:2.065;stroke-miterlimit:4;stroke-dasharray:none"
d="m 250.57205,126.24012 c 0,10.3563 0.79642,22.95383 -4.95439,31.77405 -6.79906,10.42796 -24.54555,8.97677 -37.34928,15.81511 -9.05328,4.83528 -21.79692,12.89112 -32.91197,15.26472 -27.66481,4.68453 -59.11518,-19.7509 -86.905434,-16.78315 -8.578355,1.27119 -8.339518,-7.31997 -9.983362,-11.76181 -3.87888,-10.48113 -13.772177,-10.54553 -20.07239,-18.16709 -8.475237,-10.25276 -2.858896,-6.47896 -2.858896,-19.22274 0,-2.23965 -2.00657,-5.68681 -1.713176,-7.87195 0.870667,-6.48458 3.619707,-12.4 6.838529,-18.237452 3.249123,-5.892404 4.215749,-16.320907 9.496636,-21.298025 5.233032,-4.932017 25.546827,-5.654431 32.420623,-9.436334 8.50097,-4.677165 7.64672,-15.157132 18.05385,-17.647255 9.7928,-2.343133 31.06499,3.472825 41.97223,3.472825 10.55663,0 18.25676,-4.355842 27.77783,-2.154984 18.79452,4.344476 20.90825,11.704407 32.74723,22.55346 5.8064,5.320891 20.10592,8.263235 25.90809,15.42057 6.94991,8.573135 1.53388,29.596795 1.53388,38.280055 z"
sodipodi:nodetypes="sssccsssssssssssss" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.147382"
x="251.19659"
y="68.192177"
id="text912"><tspan
sodipodi:role="line"
id="tspan910"
x="251.19659"
y="68.192177"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.147382">The geoid</tspan></text>
<ellipse
style="fill:#d40000;fill-opacity:0.360704;stroke:#d40000;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="path918"
cx="-40.997208"
cy="134.36771"
rx="41.438278"
ry="27.882259"
transform="rotate(-54.737323)" />
<path
style="fill:none;stroke:#0000ff;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 53.766668,94.819757 36.67779,94.620025"
id="path920" />
<path
style="fill:none;stroke:#0000ff;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 53.573102,147.37655 36.484224,147.17682"
id="path922" />
<path
id="path924"
style="fill:none;stroke:#0000ff;stroke-width:0.600001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 36.601427,114.28374 0.0702,-19.701134" />
<path
id="path936"
style="fill:none;stroke:#0000ff;stroke-width:0.600001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 36.484224,147.17682 0.07988,-22.41775" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.147382"
x="16.566299"
y="120.85104"
id="text930"><tspan
sodipodi:role="line"
id="tspan928"
x="16.566299"
y="120.85104"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.147382">Local region</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;line-height:1.25;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.147382"
x="81.438286"
y="23.518936"
id="text945"><tspan
sodipodi:role="line"
id="tspan943"
x="81.438286"
y="23.518936"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.147382">Ellipsoid with best fit</tspan><tspan
sodipodi:role="line"
x="81.438286"
y="30.574486"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Linux Libertine Display O';-inkscape-font-specification:'Linux Libertine Display O, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.147382"
id="tspan949">to the local region</tspan></text>
<path
style="fill:none;stroke:#d40000;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 102.52722,34.488045 92.360198,72.383272"
id="path951"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#1a1a1a;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 168.15066,31.407132 -3.6971,14.480289"
id="path953"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#0000ff;stroke-width:0.6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 255.34049,72.691364 -3.6971,14.480289"
id="path955"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

+36 -3
View File
@@ -1051,13 +1051,46 @@
"type": "poly"
},
{
"filename": "peirce_q.png",
"filename": "peirce_q_square.png",
"latmax": 90,
"latmin": 0,
"latmin": -90,
"lonmax": 180,
"lonmin": -180,
"name": "peirce_q_square",
"projstring": "+proj=peirce_q +lon_0=25 +type=square",
"res": "low",
"type": "poly"
},
{
"filename": "peirce_q_diamond.png",
"latmax": 90,
"latmin": -90,
"lonmax": 180,
"lonmin": -180,
"name": "peirce_q",
"projstring": "+proj=peirce_q",
"projstring": "+proj=peirce_q +lon_0=25 +type=diamond",
"res": "low",
"type": "poly"
},
{
"filename": "peirce_q_horizontal.png",
"latmax": 90,
"latmin": -90,
"lonmax": 180,
"lonmin": -180,
"name": "peirce_q_horizontal",
"projstring": "+proj=peirce_q +lon_0=25 +type=horizontal",
"res": "low",
"type": "line"
},
{
"filename": "grieger_triptychial.png",
"latmax": 90,
"latmin": -90,
"lonmax": 180,
"lonmin": -180,
"name": "grieger_triptychial",
"projstring": "+proj=pipeline +step +proj=ob_tran +o_proj=peirce_q +o_lat_p=-45 +o_lon_p=45 +type=horizontal +scrollx=-0.25 +step +proj=affine +s11=-1 +s12=0 +s21=0 +s22=-1",
"res": "low",
"type": "poly"
},
+1
View File
@@ -17,3 +17,4 @@ the project.
rfc-4
rfc-5
rfc-6
rfc-7
+135
View File
@@ -0,0 +1,135 @@
.. _rfc7:
====================================================================
PROJ RFC 7: Drop Autotools, maintain CMake
====================================================================
:Author: Mike Taves
:Contact: mwtoews@gmail.com
:Status: Adopted
:Implementation target: PROJ 9.0
:Last Updated: 2021-10-27
Summary
-------------------------------------------------------------------------------
This RFC proposes to drop Autotools for PROJ 9.0, and to maintain CMake
for build automation, testing and packaging. This will reduce the overall
maintenance for PROJ and will enable the library to be integrated into other
projects that use CMake.
Background
-------------------------------------------------------------------------------
Here is a short timeline of the build tools used for PROJ:
- Throughout the mid-1990s, Gerald Evenden maintained a Unix build system with
a few scripts (some derived from Autoconf), and Makefile templates.
- In 2000, Frank Warmerdam wrote Autoconf and Automake configurations for
PROJ 4.4.0.
- This was followed by a NMake configuration to build PROJ 4.4.2 for Windows.
- In 2014, a CMake build setup was introduced by Howard Butler for
PROJ 4.9.0RC1. The CMake configuration was improved for the 4.9.1 release,
but not considered at feature parity with the Autotools builds at the time.
- The NMake build setup was removed for PROJ 6.0.0, as its functionality had
been replaced by CMake.
Motivation
-------------------------------------------------------------------------------
The primary motivation in removing Autotools is to reduce the burden of
maintaining multiple build configurations, which requires developers to be
familiar with different tools and configuration files. There are several other
benefits in maintaining a single build system:
- Remove extra configuration and m4 macro files from source repository,
- Simplify scripts used for running tests for CI services (GitHub Actions,
TravisCI),
- Reduce compilation time (and carbon footprint) used for testing on CI
services,
- Ease development effort, particularly with new contributors.
Why drop Autotools?
-------------------------------------------------------------------------------
The GNU Build System or Autotools consist of a suite of tools including
Autoconf and Automake, which can be used to build software on Unix-like
systems. These tools are not cross-platform, and do not naively integrate
with development environments on Microsoft Windows. Furthermore, the existing
PROJ Autotools builds do not install the CMake configuration files required to
find PROJ from other projects that use CMake
(`#2546 <https://github.com/OSGeo/PROJ/issues/2546>`_).
Why use CMake?
-------------------------------------------------------------------------------
CMake is an open source cross-platform tool for build automation, testing and
packaging of software. It does not directly compile the software, but manages
the build process using generators, including Unix Makefiles and Ninja among
other command-based and IDE tools. The CMake software has been under active
development since its origins in 2000. The CMake language is carefully
developed with backwards-compatible policies that aim to provide consistent
behaviour across different versions. CMake is currently the preferred build
tool for PROJ for the following reasons:
- It has existed in the PROJ code base since 2014, and is familiar to active
PROJ contributors,
- It can install configuration files that can be used by other software that
use CMake to find PROJ for linking via ``find_package()``,
- CMake configurations are used in 3rd-party binary packages of PROJ,
including conda-forge and vcpkg,
- It can be used to build PROJ on all major operating systems and compiler
combinations (where compatible),
- It has integration with modern IDEs and tools, including
Microsoft Visual Studio and Qt Creator.
Why not CMake?
-------------------------------------------------------------------------------
Other modern cross-platform build systems exist, including Meson and Bazel,
which have many advantages over CMake. However, they are currently not widely
used by active PROJ contributors. This RFC should not restrict future build
system configurations being introduced to PROJ, if they are proven to have
advantages to CMake over time.
Potential impacts
-------------------------------------------------------------------------------
Binary packagers that currently rely on Autotools would obviously need to
transition building and testing PROJ with CMake. Issues related to
multiarch builds of PROJ may become apparent, which can be patched and/or
reported to PROJ developers. One feature of Autotools is that both static and
dynamic (shared) libraries are built, which packagers may distribute. This
feature is currently not set-up for PROJ, as it would need to be configured
and built twice.
End-users that use binary packages of PROJ should not be impacted. PROJ should
be discoverable via both pkg-config and CMake's ``find_package()``.
Other projects that use Autotools will continue to work as expected,
linking statically or dynamically to PROJ built by CMake.
Transition plan
-------------------------------------------------------------------------------
If this proposal is approved, the following tasks should be completed:
- Rewrite CI tests to only use CMake for packaging, building, testing,
installation and post-install tests,
- Remove files only used by Autotools, also update ``.gitignore``,
- Update documentation and ``HOWTORELEASE`` notes.
Related issues will be tracked on GitHub with a tag
`RFC7: Autotools→CMake <https://github.com/OSGeo/PROJ/labels/RFC7%3A%20Autotools%E2%86%92CMake>`_.
Adoption status
-------------------------------------------------------------------------------
The RFC was adopted on 2021-10-26 with +1's from the following PSC members
* Kristian Evers
* Even Rouault
* Howard Butler
* Thomas Knudsen
* Kurt Schwehr
* Charles Karney
* Thomas Knudsen
+1 -1
View File
@@ -206,7 +206,7 @@ html_context = {
'github_user': 'OSGeo',
'github_repo': 'PROJ',
# TODO: edit when switching active branch
'github_version': '/8.0/docs/source/',
'github_version': '8.2/docs/source/',
}
# Add any extra paths that contain custom files (such as robots.txt or
@@ -877,6 +877,9 @@ Setting custom I/O functions
.. doxygenfunction:: proj_context_set_sqlite3_vfs_name
:project: doxygen_api
.. doxygenfunction:: proj_context_set_search_paths
:project: doxygen_api
Network related functionality
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+7 -3
View File
@@ -13,8 +13,8 @@ distribution of the source code and various resource file archives. See
Current Release
--------------------------------------------------------------------------------
* **2021-07-01** `proj-8.1.0.tar.gz`_ (`md5`_)
* **2021-07-01** `proj-data-1.7.tar.gz`_
* **2021-11-01** `proj-8.2.0.tar.gz`_ (`md5`_)
* **2021-11-01** `proj-data-1.8.tar.gz`_
* **PDF Manual** `proj.pdf`_
.. note::
@@ -28,6 +28,7 @@ Current Release
Past Releases
--------------------------------------------------------------------------------
* **2021-09-01** `proj-8.1.1.tar.gz`_
* **2021-07-01** `proj-8.1.0.tar.gz`_
* **2021-05-05** `proj-8.0.1.tar.gz`_
* **2021-03-01** `proj-8.0.0.tar.gz`_
@@ -82,8 +83,10 @@ Past Releases
* **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
.. _`proj-8.2.0.tar.gz`: https://download.osgeo.org/proj/proj-8.2.0.tar.gz
.. _`md5`: https://download.osgeo.org/proj/proj-8.2.0.tar.gz.md5
.. _`proj-8.1.1.tar.gz`: https://download.osgeo.org/proj/proj-8.1.1.tar.gz
.. _`proj-8.1.0.tar.gz`: https://download.osgeo.org/proj/proj-8.1.0.tar.gz
.. _`md5`: https://download.osgeo.org/proj/proj-8.1.0.tar.gz.md5
.. _`proj-8.0.1.tar.gz`: https://download.osgeo.org/proj/proj-8.0.1.tar.gz
.. _`proj-8.0.0.tar.gz`: https://download.osgeo.org/proj/proj-8.0.0.tar.gz
.. _`proj-7.2.1.tar.gz`: https://download.osgeo.org/proj/proj-7.2.1.tar.gz
@@ -108,6 +111,7 @@ 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.8.tar.gz`: https://download.osgeo.org/proj/proj-data-1.8.tar.gz
.. _`proj-data-1.7.tar.gz`: https://download.osgeo.org/proj/proj-data-1.7.tar.gz
.. _`proj-data-1.6.tar.gz`: https://download.osgeo.org/proj/proj-data-1.6.tar.gz
.. _`proj-data-1.5.tar.gz`: https://download.osgeo.org/proj/proj-data-1.5.tar.gz
+159 -2
View File
@@ -3,6 +3,165 @@
News
###############################################################################
8.2.0 Release Notes
+++++++++++++++++++
Announcements
-------------
From PROJ 9.0.0 and onwards CMake will be the only build system bundled
with the PROJ package. As a consequence support for Autotools builds will
stop when the 8.2 branch of PROJ reaches end of life. We encourage
everyone to adjust their build workflows as soon as possible and report
any discrepancies discovered between Autotools and CMake builds.
Details about the build system unification can be found in :ref:`RFC7`.
Updates
-------
* Added the S2 projection (`#2749 <https://github.com/OSGEO/PROJ/issues/2749>`_)
* Added support for Degree Sign on input (`#2791 <https://github.com/OSGEO/PROJ/issues/2791>`_)
* ESRI WKT: add support for import/export of (non interrupted)
Goode Homolosine (`#2827 <https://github.com/OSGEO/PROJ/issues/2827>`_)
* Make filemanager aware of UWP Win32 API (`#2831 <https://github.com/OSGEO/PROJ/issues/2831>`_)
* Add :c:func:`proj_create_conversion_pole_rotation_netcdf_cf_convention()` to
address netCDF datasets using a pole rotation method (`#2835 <https://github.com/OSGEO/PROJ/issues/2835>`_)
* Emit better debug message when a grid isn't found (`#2838 <https://github.com/OSGEO/PROJ/issues/2838>`_)
* Add support for GeodeticCRS using a Spherical planetocentric
coordinate system (`#2847 <https://github.com/OSGEO/PROJ/issues/2847>`_)
* PROJJSON: support additional properties allowed in id object (version,
authority_citation, uri) for parity with WKT2:2019 (`#2850 <https://github.com/OSGEO/PROJ/issues/2850>`_)
* Database layout modified to include "anchor" field to ``geodetic_datum`` and
``vertical_datum`` tables, consequently database layout version is increased
to 1.2 (`#2859 <https://github.com/OSGEO/PROJ/issues/2859>`_)
* :c:func:`proj_factors()`: accept `P` to be a projected CRS (`#2868 <https://github.com/OSGEO/PROJ/issues/2868>`_)
* Add IAU_2015 CRS definitions (`#2876 <https://github.com/OSGEO/PROJ/issues/2876>`_)
* :cpp:func:`CRS::extractGeodeticCRS()`: implement for ``DerivedProjectedCRS`` (`#2877 <https://github.com/OSGEO/PROJ/issues/2877>`_)
* Added :c:func:`proj_trans_bounds()` (`#2882 <https://github.com/OSGEO/PROJ/issues/2882>`_)
* CMake: add a ``BUILD_APPS`` to be able to disable build of all applications (`#2895 <https://github.com/OSGEO/PROJ/issues/2895>`_)
* CMake: generate ``invproj``/``invgeod`` binaries (symlinks on Unix, copy otherwise)
(`#2897 <https://github.com/OSGEO/PROJ/issues/2897>`_)
* CMake build: add ``generate_wkt1_parser`` and ``generate_wkt2_parser manual``
target, and logic to detect when they must be run (`#2900 <https://github.com/OSGEO/PROJ/issues/2900>`_)
* Add fallback strategy for tinshift transform to use closest triangle for
points not in any (`#2907 <https://github.com/OSGEO/PROJ/issues/2907>`_)
* Database: update to EPSG v10.038 (`#2910 <https://github.com/OSGEO/PROJ/issues/2910>`_)
* CMake: revise handling of symbol export and static builds (`#2912 <https://github.com/OSGEO/PROJ/issues/2912>`_)
Bug fixes
---------
* Fix O(n^2) performance patterns where n is the number of steps of
a pipeline (`#2820 <https://github.com/OSGEO/PROJ/issues/2820>`_)
* Detect ESRI WKT better in certain circumstances (`#2823 <https://github.com/OSGEO/PROJ/issues/2823>`_)
* Fix performance issue on pipeline instanciation of huge (broken)
pipelines (`#2824 <https://github.com/OSGEO/PROJ/issues/2824>`_)
* Make sure to re-order projection parameters according to their canonical
order if needed (`#2842 <https://github.com/OSGEO/PROJ/issues/2842>`_)
* Fix database access across fork() when SQLite3 doesn't use ``pread[64]()`` (`#2845 <https://github.com/OSGEO/PROJ/issues/2845>`_)
* Fix error in implementation of Inverse ellipsoidal orthographic projection
that cause convergence to sometimes fail (`#2853 <https://github.com/OSGEO/PROJ/issues/2853>`_)
* Fix handling of edge-case coordinates in invers ortho ellipsoidal
oblique (`#2855 <https://github.com/OSGEO/PROJ/issues/2855>`_)
* :c:func:`proj_normalize_for_visualization()`: set input and output units when there
are several alternative transformations (`#2867 <https://github.com/OSGEO/PROJ/issues/2867>`_)
* :cpp:func:`CRS::identify()`: fix ignoring CS order when identifying a geodetic CRS
by a PROJ string with just the ellipsoid (`#2881 <https://github.com/OSGEO/PROJ/issues/2881>`_)
* Fix CRS Equality with PROJ parameter order (`#2887 <https://github.com/OSGEO/PROJ/issues/2887>`_)
* WKT concatenated operation parsing: fix when a axis order reversal conversion
is the first or last operation (`#2891 <https://github.com/OSGEO/PROJ/issues/2891>`_)
* WKT1 parser: recognize Lambert_Conformal_Conic as projection name for
LCC 1SP or 2SP (`#2893 <https://github.com/OSGEO/PROJ/issues/2893>`_)
* CMake: Always build gie if testing is requested (`#2899 <https://github.com/OSGEO/PROJ/issues/2899>`_)
* Geographic 3D CRS: allow to export to WKT1:ESRI if only the GEOGCS is known
(and thus extrapolating a VERTCS) (`#2902 <https://github.com/OSGEO/PROJ/issues/2902>`_)
* ``lib_proj.cmake``: add a PROJ::proj alias and add BUILD_INTERFACE include
directories, so that proj can be used as a subdirectory of a larger
project (`#2913 <https://github.com/OSGEO/PROJ/issues/2913>`_)
8.1.1 Release Notes
++++++++++++++++++++++++++++++++++++++++
*September 1st 2021*
Updates
-------
* EPSG Database updated to version 10.028 (`#2773 <https://github.com/OSGeo/PROJ/issues/2773>`_)
Bug Fixes
---------
* Include algorithm header file to avoid build errors on Alpine Linux (`#2769 <https://github.com/OSGeo/PROJ/issues/2769>`_)
* CMake: fix installation of executables on iOS (`#2766 <https://github.com/OSGeo/PROJ/issues/2766>`_)
* Associate extents to transformations of CRS's that include GEOIDMODEL (`#2769 <https://github.com/OSGeo/PROJ/issues/2769>`_)
* Logging: avoid some overhead when logging is not enabled (`#2775 <https://github.com/OSGeo/PROJ/issues/2775>`_)
* ortho: remove useless and invalid log trace (`#2777 <https://github.com/OSGeo/PROJ/issues/2777>`_)
* CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target (`#2781 <https://github.com/OSGeo/PROJ/issues/2781>`_)
* reateOperations(): fix SourceTargetCRSExtentUse::NONE mode (`#2783 <https://github.com/OSGeo/PROJ/issues/2783>`_)
* GeoTIFF grid reading: perf improvements (`#2788 <https://github.com/OSGeo/PROJ/issues/2788>`_)
* :cpp:func:`Conversion::createUTM()`: avoid integer overflow (`#2796 <https://github.com/OSGeo/PROJ/issues/2796>`_)
* Inverse laea ellipsoidal: return ``PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN``
when appropriates (`#2801 <https://github.com/OSGeo/PROJ/issues/2801>`_)
* Make sure that :c:func:`proj_crs_promote_to_3D` returns a derived CRS (`#2806 <https://github.com/OSGeo/PROJ/issues/2806>`_)
* :cpp:func:`createOperations()`: fix missing deg<-->rad conversion when transforming with a
CRS that has a fallback-to-PROJ4-string behaviour and is a BoundCRS of a
GeographicCRS (`#2808 <https://github.com/OSGeo/PROJ/issues/2808>`_)
* WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[] (`#2812 <https://github.com/OSGeo/PROJ/issues/2812>`_)
* BoundCRS: accept importing/exporting in WKT2 and PROJJSON the
scope/area/extent/id attributes (`#2815 <https://github.com/OSGeo/PROJ/issues/2815>`_)
* :cpp:func:`ConcatenatedOperation::fixStepsDirection()`: fix bad chaining of steps when
inverse map projection is involved in non-final step (`#2819 <https://github.com/OSGeo/PROJ/issues/2819>`_)
8.1.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*July 1st 2021*
@@ -133,8 +292,6 @@ Bug fixes
* :c:func:`createOperations()`: fix incorrect height transformation between 3D promoted RGF93 and CH1903+ (`#2555 <https://github.com/OSGeo/PROJ/issues/2555>`_)
>>>>>>> Stashed changes
8.0.0 Release Notes
++++++++++++++++++++++++++++++++++++++++
*March 1st 2021*
+4 -2
View File
@@ -1,4 +1,6 @@
.. option:: +R=<value>
Radius of the sphere given in meters. If used in conjunction with ``+ellps``,
``+R`` takes precedence.
Radius of the sphere, given in meters. If used in conjunction with
``+ellps``, :option:`+R` takes precedence.
See :ref:`ellipsoid_size_parameters` for more information.
+4 -1
View File
@@ -1,5 +1,8 @@
.. option:: +ellps=<value>
See :option:`proj -le` for a list of available ellipsoids.
The name of a built-in ellipsoid definition.
See :ref:`ellipsoids` for more information, or execute
:option:`proj -le` for a list of built-in ellipsoid names.
*Defaults to "GRS80".*
@@ -42,7 +42,7 @@ Usage
###############################################################################
The Bertin 1953 projection has no special options. Its rotation parameters
are fixed. Here is an example of a forward projection with scale 1:
are fixed. Here is an example of a forward projection with scale 1::
$ echo 122 47 | src/proj +proj=bertin1953 +R=1
0.72 0.73
Binary file not shown.

After

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 KiB

@@ -4,6 +4,23 @@
Peirce Quincuncial
********************************************************************************
The Peirce Quincuncial projection is a conformal map projection
that transforms the circle of the northern hemisphere into a square,
and the southern hemisphere split into four triangles arranged
around the square to form a quincunx. The resulting projection
is a regular diamond shape or can be rotated to form a square.
The resulting tile can be infinitely tessellated. Though this implementation
defaults to a central meridian of 0, it is more common to use a central
meridian of around 25 to optimise the distortions. Peirce's original
published map from 1879 used a central meridian of approx -70.
The diamond and square versions can be produced using the
``+type=diamond`` and ``+type=square`` options respectively.
This implementation includes an alternative lateral projection
which places hemispheres side-by-side (``+type=horizontal`` or
``+type=vertical``). Combined with a general oblique transformation,
this can be used to produced a Grieger Triptychial projection
(see example below).
+---------------------+----------------------------------------------------------+
| **Classification** | Miscellaneous |
+---------------------+----------------------------------------------------------+
@@ -21,12 +38,33 @@ Peirce Quincuncial
+---------------------+----------------------------------------------------------+
.. figure:: ./images/peirce_q.png
.. figure:: ./images/peirce_q_square.png
:width: 500 px
:align: center
:alt: Peirce Quincuncial
:alt: Peirce Quincuncial (Square)
proj-string: ``+proj=peirce_q``
proj-string: ``+proj=peirce_q +lon_0=25 +type=square``
.. figure:: ./images/peirce_q_diamond.png
:width: 500 px
:align: center
:alt: Peirce Quincuncial (Diamond)
proj-string: ``+proj=peirce_q +lon_0=25 +type=diamond``
.. figure:: ./images/peirce_q_horizontal.png
:width: 500 px
:align: center
:alt: Peirce Quincuncial (Horizontal)
proj-string: ``+proj=peirce_q +lon_0=25 +type=horizontal``
.. figure:: ./images/grieger_triptychial.png
:width: 500 px
:align: center
:alt: Grieger Triptychial
proj-string: ``+proj=pipeline +step +proj=ob_tran +o_proj=peirce_q +o_lat_p=-45 +o_lon_p=45 +o_type=horizontal +o_scrollx=-0.25 +step +proj=affine +s11=-1 +s12=0 +s21=0 +s22=-1``
Parameters
################################################################################
@@ -35,6 +73,41 @@ Parameters
.. include:: ../options/lon_0.rst
.. option:: +type=square/diamond/horizontal/vertical/nhemisphere/shemisphere
.. versionadded:: 8.2.1
*Defaults to diamond.*
Indicates the type of transformation applied to the southern hemisphere:
``square`` and ``diamond`` represent the traditional quincuncial form suggested
by Peirce with the southern hemisphere divided into 4 triangles and reflected
outward from the northern hemisphere. The ``square`` type is rotated by 45
degrees to produce the conventional square presentation. The origin lies at
the centre of the square or diamond.
By contrast, the ``horizontal`` and ``vertical`` forms reflect the southern
hemisphere laterally across the x or y axis respectively to produce a rectangular
form. The origin lies at the centre of the rectangle.
The other two types, ``nhemisphere`` and ``shemisphere``, discard latitudes of less
than 0 or more than 0, respectively, to allow single hemispheres to be selected.
The origin lies at the centre of the square or diamond.
.. option:: +scrollx=<value>
For ``horizontal`` type allows a scalar circular scroll of resulting x coordinates
to shift sections of the projection to the other horizontal side of the map.
*Defaults to 0.0. Must be a scale between -1.0 and 1.0.*
.. option:: +scrolly=<value>
For ``vertical`` type allows a scalar circular scroll of resulting y coordinates
to shift sections of the projection to the other vertical side of the map.
*Defaults to 0.0. Must be a scale between -1.0 and 1.0.*
.. include:: ../options/R.rst
.. include:: ../options/x_0.rst
+1 -1
View File
@@ -305,7 +305,7 @@ Getting :file:`crs2crs2grid.py`
................................................................................
The :file:`crs2crs2grid.py` script can be found at
https://github.com/OSGeo/gdal/tree/master/gdal/swig/python/samples/crs2crs2grid.py
https://github.com/OSGeo/gdal/blob/master/swig/python/gdal-utils/osgeo_utils/samples/crs2crs2grid.py
The script depends on having the GDAL Python bindings operational; if they are not you
will get an error such as:
+159
View File
@@ -0,0 +1,159 @@
.. _ellipsoids:
================================================================================
Ellipsoids
================================================================================
An ellipsoid is a mathematically defined surface which approximates the *geoid*:
the surface of the Earth's gravity field, which is approximately the same as
mean sea level.
.. figure:: ../../images/general_ellipsoid.png
:width: 500 px
:align: center
:alt: Global and local fitting of the ellipsoid
Global and local fitting of the ellipsoid
A complete ellipsoid definition comprises a size (primary) and a shape (secondary)
parameter.
.. _ellipsoid_size_parameters:
Ellipsoid size parameters
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.. option:: +R=<value>
Radius of the sphere, :math:`R`.
.. option:: +a=<value>
Semi-major axis of the ellipsoid, :math:`a`.
.. _ellipsoid_shape_parameters:
Ellipsoid shape parameters
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.. option:: +rf=<value>
Reverse flattening of the ellipsoid, :math:`1/f`.
.. option:: +f=<value>
Flattening of the ellipsoid, :math:`f`.
.. option:: +es=<value>
Eccentricity squared, :math:`e^2`.
.. option:: +e=<value>
Eccentricity, :math:`e`.
.. option:: +b=<value>
Semi-minor axis, :math:`b`.
The ellipsoid definition may be augmented with a spherification flag, turning
the ellipsoid into a sphere with features defined by the ellipsoid.
.. _ellipsoid_spherification_parameters:
Ellipsoid spherification parameters
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.. option:: +R_A=<value>
A sphere with the same surface area as the ellipsoid.
.. option:: +R_V=<value>
A sphere with the same volume as the ellipsoid.
.. option:: +R_a=<value>
A sphere with :math:`R = (a + b)/2` (arithmetic mean).
.. option:: +R_g=<value>
A sphere with :math:`R = \sqrt{ab}` (geometric mean).
.. option:: +R_h=<value>
A sphere with :math:`R = 2ab/(a+b)` (harmonic mean).
.. option:: +R_lat_a=<phi>
A sphere with :math:`R` being the arithmetic mean of the corresponding
ellipsoid at latitude :math:`\phi`.
.. option:: +R_lat_g=<phi>
A sphere with :math:`R` being the geometric mean of the corresponding
ellipsoid at latitude :math:`\phi`.
If :option:`+R` is given as size parameter, any shape and spherification
parameters given are ignored.
.. _ellipsoid_definitions:
Built-in ellipsoid definitions
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
The ``ellps=xxx`` parameter provides both size and shape for a number of
built-in ellipsoid definitions.
============ ================================= ============================
ellps Parameters Datum name
============ ================================= ============================
GRS80 a=6378137.0 rf=298.257222101 GRS 1980(IUGG, 1980)
airy a=6377563.396 b=6356256.910 Airy 1830
bessel a=6377397.155 rf=299.1528128 Bessel 1841
clrk66 a=6378206.4 b=6356583.8 Clarke 1866
intl a=6378388.0 rf=297. International 1909 (Hayford)
WGS60 a=6378165.0 rf=298.3 WGS 60
WGS66 a=6378145.0 rf=298.25 WGS 66
WGS72 a=6378135.0 rf=298.26 WGS 72
WGS84 a=6378137.0 rf=298.257223563 WGS 84
sphere a=6370997.0 b=6370997.0 Normal Sphere (r=6370997)
============ ================================= ============================
If size and shape are given as ``ellps=xxx``, later shape and size parameters
are are taken into account as modifiers for the built-in ellipsoid definition.
While this may seem strange, it is in accordance with historical PROJ
behavior. It can e.g. be used to define coordinates on the ellipsoid
scaled to unit semimajor axis by specifying ``+ellps=xxx +a=1``
.. _ellipsoid_transformation_examples:
Transformation examples
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Spherical earth with radius 7000km:
::
proj=laton R=7000000
Using the GRS80 ellipsoid:
::
proj=laton ellps=GRS80
Expressing ellipsoid by semi-major axis and reverse flattening (:math:`1/f`):
::
proj=laton a=6378137.0 rf=298.25
Spherical earth based on volume of ellipsoid
::
proj=laton a=6378137.0 rf=298.25 +R_V
+1
View File
@@ -15,6 +15,7 @@ command line applications or the C API that is a part of the software package.
quickstart
projections
transformation
ellipsoids
environmentvars
differences
network
+5
View File
@@ -33,6 +33,11 @@
#error Must have C++11 or newer.
#endif
// windows.h can confict with Criterion::STRICT
#ifdef STRICT
#undef STRICT
#endif
#include <exception>
#include <map>
#include <memory>
+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 "CCT" "1" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "CCT" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
cct \- Coordinate Conversion and Transformation
.SH SYNOPSIS
+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 "CS2CS" "1" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "CS2CS" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
cs2cs \- Cartographic coordinate system filter
.SH SYNOPSIS
+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 "GEOD" "1" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "GEOD" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
geod \- Geodesic computations
.SH SYNOPSIS
+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 "GIE" "1" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "GIE" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
gie \- The Geospatial Integrity Investigation Environment
.SH SYNOPSIS
+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 "PROJ" "1" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "PROJ" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
proj \- Cartographic projection filter
.SH SYNOPSIS
+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 "PROJINFO" "1" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "PROJINFO" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
projinfo \- Geodetic object and coordinate operation queries
.SH SYNOPSIS
+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" "Nov 1, 2021" "8.2.0" "PROJ"
.TH "PROJSYNC" "1" "Jan 1, 2022" "8.2.1" "PROJ"
.SH NAME
projsync \- Downloading tool of resource files
.SH SYNOPSIS
+1 -1
View File
@@ -10,5 +10,5 @@ Description: Coordinate transformation software library
Requires:
Version: @VERSION@
Libs: -L${libdir} -lproj
Libs.private: @SQLITE3_LIBS@ @TIFF_LIBS@ @CURL_LIBS@ @EXTRA_LIBS@
Libs.private: @EXTRA_LIBS@
Cflags: -I${includedir}
+6 -3
View File
@@ -278,7 +278,9 @@ def fill_geodetic_crs(proj_db_cursor):
#proj_db_cursor.execute(
# "INSERT INTO crs SELECT ?, coord_ref_sys_code, coord_ref_sys_kind FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric') AND datum_code IS NOT NULL", (EPSG_AUTHORITY,))
proj_db_cursor.execute("INSERT INTO geodetic_crs SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, coord_ref_sys_kind, ?, coord_sys_code, ?, datum_code, NULL, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric') AND datum_code IS NOT NULL", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY))
# There are a few deprecated records of code 61 000 000 that we have never imported in versions <= 10.039 because
# they lacked a datum code. We will continue to ignore them.
proj_db_cursor.execute("INSERT INTO geodetic_crs SELECT ?, coord_ref_sys_code, coord_ref_sys_name, NULL, coord_ref_sys_kind, ?, coord_sys_code, ?, datum_code, NULL, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric') AND datum_code IS NOT NULL AND NOT (coord_ref_sys_code > 61000000 AND deprecated)", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY))
def fill_vertical_crs(proj_db_cursor):
@@ -622,7 +624,8 @@ def fill_grid_transformation(proj_db_cursor):
# 1101: Vertical Offset by Grid Interpolation (PL txt)
# 1103: Geog3D to Geog2D+GravityRelatedHeight (EGM)
# 1105: Geog3D to Geog2D+GravityRelatedHeight (ITAL2005)
elif method_code in (1071, 1080, 1081, 1083, 1084, 1085, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1100, 1101, 1103, 1105) and n_params == 2:
# 1110: Geog3D to Geog2D+Depth (Gravsoft)
elif method_code in (1071, 1080, 1081, 1083, 1084, 1085, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1100, 1101, 1103, 1105, 1110) and n_params == 2:
assert param_code[1] == 1048, (code, method_code, param_code[1])
interpolation_crs_auth_name = EPSG_AUTHORITY
interpolation_crs_code = str(int(param_value[1])) # needed to avoid codes like XXXX.0
@@ -633,7 +636,7 @@ def fill_grid_transformation(proj_db_cursor):
interpolation_crs_code = str(int(param_value[1])) # needed to avoid codes like XXXX.0
# ignoring parameter 2 Standard CT code
else:
assert n_params == 1, (code, method_code)
assert n_params == 1, (code, name, method_code)
arg = (EPSG_AUTHORITY, code, name,
+1 -1
View File
@@ -59,7 +59,7 @@ geodtest_LDADD = libproj.la
lib_LTLIBRARIES = libproj.la
libproj_la_LDFLAGS = -no-undefined -version-info 24:0:2
libproj_la_LDFLAGS = -no-undefined -version-info 24:1:2
libproj_la_LIBADD = @SQLITE3_LIBS@ @TIFF_LIBS@ @CURL_LIBS@
libproj_la_SOURCES = \
+1 -1
View File
@@ -51,7 +51,7 @@ int pj_ellipsoid (PJ *P) {
Spherification parameters supported are:
R_A, which gives a sphere with the same surface area as the ellipsoid
R_A, which gives a sphere with the same volume as the ellipsoid
R_V, which gives a sphere with the same volume as the ellipsoid
R_a, which gives a sphere with R = (a + b)/2 (arithmetic mean)
R_g, which gives a sphere with R = sqrt(a*b) (geometric mean)
+112 -81
View File
@@ -373,6 +373,24 @@ const char *proj_context_get_database_path(PJ_CONTEXT *ctx) {
* The returned pointer remains valid while ctx is valid, and until
* proj_context_get_database_metadata() is called.
*
* Available keys:
*
* - DATABASE.LAYOUT.VERSION.MAJOR
* - DATABASE.LAYOUT.VERSION.MINOR
* - EPSG.VERSION
* - EPSG.DATE
* - ESRI.VERSION
* - ESRI.DATE
* - IGNF.SOURCE
* - IGNF.VERSION
* - IGNF.DATE
* - NKG.SOURCE
* - NKG.VERSION
* - NKG.DATE
* - PROJ.VERSION
* - PROJ_DATA.VERSION : PROJ-data version most compatible with this database.
*
*
* @param ctx PROJ context, or NULL for default context
* @param key Metadata key. Must not be NULL
* @return value, or nullptr
@@ -1132,98 +1150,106 @@ PJ_TYPE proj_get_type(const PJ *obj) {
if (!obj || !obj->iso_obj) {
return PJ_TYPE_UNKNOWN;
}
auto ptr = obj->iso_obj.get();
if (dynamic_cast<Ellipsoid *>(ptr)) {
return PJ_TYPE_ELLIPSOID;
}
if (obj->type != PJ_TYPE_UNKNOWN)
return obj->type;
if (dynamic_cast<PrimeMeridian *>(ptr)) {
return PJ_TYPE_PRIME_MERIDIAN;
}
const auto getType = [&obj]() {
auto ptr = obj->iso_obj.get();
if (dynamic_cast<Ellipsoid *>(ptr)) {
return PJ_TYPE_ELLIPSOID;
}
if (dynamic_cast<DynamicGeodeticReferenceFrame *>(ptr)) {
return PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME;
}
if (dynamic_cast<GeodeticReferenceFrame *>(ptr)) {
return PJ_TYPE_GEODETIC_REFERENCE_FRAME;
}
if (dynamic_cast<DynamicVerticalReferenceFrame *>(ptr)) {
return PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME;
}
if (dynamic_cast<VerticalReferenceFrame *>(ptr)) {
return PJ_TYPE_VERTICAL_REFERENCE_FRAME;
}
if (dynamic_cast<DatumEnsemble *>(ptr)) {
return PJ_TYPE_DATUM_ENSEMBLE;
}
if (dynamic_cast<TemporalDatum *>(ptr)) {
return PJ_TYPE_TEMPORAL_DATUM;
}
if (dynamic_cast<EngineeringDatum *>(ptr)) {
return PJ_TYPE_ENGINEERING_DATUM;
}
if (dynamic_cast<ParametricDatum *>(ptr)) {
return PJ_TYPE_PARAMETRIC_DATUM;
}
if (dynamic_cast<PrimeMeridian *>(ptr)) {
return PJ_TYPE_PRIME_MERIDIAN;
}
{
auto crs = dynamic_cast<GeographicCRS *>(ptr);
if (crs) {
if (crs->coordinateSystem()->axisList().size() == 2) {
return PJ_TYPE_GEOGRAPHIC_2D_CRS;
} else {
return PJ_TYPE_GEOGRAPHIC_3D_CRS;
if (dynamic_cast<DynamicGeodeticReferenceFrame *>(ptr)) {
return PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME;
}
if (dynamic_cast<GeodeticReferenceFrame *>(ptr)) {
return PJ_TYPE_GEODETIC_REFERENCE_FRAME;
}
if (dynamic_cast<DynamicVerticalReferenceFrame *>(ptr)) {
return PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME;
}
if (dynamic_cast<VerticalReferenceFrame *>(ptr)) {
return PJ_TYPE_VERTICAL_REFERENCE_FRAME;
}
if (dynamic_cast<DatumEnsemble *>(ptr)) {
return PJ_TYPE_DATUM_ENSEMBLE;
}
if (dynamic_cast<TemporalDatum *>(ptr)) {
return PJ_TYPE_TEMPORAL_DATUM;
}
if (dynamic_cast<EngineeringDatum *>(ptr)) {
return PJ_TYPE_ENGINEERING_DATUM;
}
if (dynamic_cast<ParametricDatum *>(ptr)) {
return PJ_TYPE_PARAMETRIC_DATUM;
}
{
auto crs = dynamic_cast<GeographicCRS *>(ptr);
if (crs) {
if (crs->coordinateSystem()->axisList().size() == 2) {
return PJ_TYPE_GEOGRAPHIC_2D_CRS;
} else {
return PJ_TYPE_GEOGRAPHIC_3D_CRS;
}
}
}
}
{
auto crs = dynamic_cast<GeodeticCRS *>(ptr);
if (crs) {
if (crs->isGeocentric()) {
return PJ_TYPE_GEOCENTRIC_CRS;
} else {
return PJ_TYPE_GEODETIC_CRS;
{
auto crs = dynamic_cast<GeodeticCRS *>(ptr);
if (crs) {
if (crs->isGeocentric()) {
return PJ_TYPE_GEOCENTRIC_CRS;
} else {
return PJ_TYPE_GEODETIC_CRS;
}
}
}
}
if (dynamic_cast<VerticalCRS *>(ptr)) {
return PJ_TYPE_VERTICAL_CRS;
}
if (dynamic_cast<ProjectedCRS *>(ptr)) {
return PJ_TYPE_PROJECTED_CRS;
}
if (dynamic_cast<CompoundCRS *>(ptr)) {
return PJ_TYPE_COMPOUND_CRS;
}
if (dynamic_cast<TemporalCRS *>(ptr)) {
return PJ_TYPE_TEMPORAL_CRS;
}
if (dynamic_cast<EngineeringCRS *>(ptr)) {
return PJ_TYPE_ENGINEERING_CRS;
}
if (dynamic_cast<BoundCRS *>(ptr)) {
return PJ_TYPE_BOUND_CRS;
}
if (dynamic_cast<CRS *>(ptr)) {
return PJ_TYPE_OTHER_CRS;
}
if (dynamic_cast<VerticalCRS *>(ptr)) {
return PJ_TYPE_VERTICAL_CRS;
}
if (dynamic_cast<ProjectedCRS *>(ptr)) {
return PJ_TYPE_PROJECTED_CRS;
}
if (dynamic_cast<CompoundCRS *>(ptr)) {
return PJ_TYPE_COMPOUND_CRS;
}
if (dynamic_cast<TemporalCRS *>(ptr)) {
return PJ_TYPE_TEMPORAL_CRS;
}
if (dynamic_cast<EngineeringCRS *>(ptr)) {
return PJ_TYPE_ENGINEERING_CRS;
}
if (dynamic_cast<BoundCRS *>(ptr)) {
return PJ_TYPE_BOUND_CRS;
}
if (dynamic_cast<CRS *>(ptr)) {
return PJ_TYPE_OTHER_CRS;
}
if (dynamic_cast<Conversion *>(ptr)) {
return PJ_TYPE_CONVERSION;
}
if (dynamic_cast<Transformation *>(ptr)) {
return PJ_TYPE_TRANSFORMATION;
}
if (dynamic_cast<ConcatenatedOperation *>(ptr)) {
return PJ_TYPE_CONCATENATED_OPERATION;
}
if (dynamic_cast<CoordinateOperation *>(ptr)) {
return PJ_TYPE_OTHER_COORDINATE_OPERATION;
}
if (dynamic_cast<Conversion *>(ptr)) {
return PJ_TYPE_CONVERSION;
}
if (dynamic_cast<Transformation *>(ptr)) {
return PJ_TYPE_TRANSFORMATION;
}
if (dynamic_cast<ConcatenatedOperation *>(ptr)) {
return PJ_TYPE_CONCATENATED_OPERATION;
}
if (dynamic_cast<CoordinateOperation *>(ptr)) {
return PJ_TYPE_OTHER_COORDINATE_OPERATION;
}
return PJ_TYPE_UNKNOWN;
return PJ_TYPE_UNKNOWN;
};
obj->type = getType();
return obj->type;
}
// ---------------------------------------------------------------------------
@@ -1571,6 +1597,11 @@ const char *proj_as_wkt(PJ_CONTEXT *ctx, const PJ *obj, PJ_WKT_TYPE type,
* The returned string is valid while the input obj parameter is valid,
* and until a next call to proj_as_proj_string() with the same input
* object.
*
* \warning If a CRS object was not created from a PROJ string,
* exporting to a PROJ string will in most cases
* cause a loss of information. This can potentially lead to
* erroneous transformations.
*
* This function calls
* osgeo::proj::io::IPROJStringExportable::exportToPROJString().
+57 -13
View File
@@ -1262,7 +1262,8 @@ struct WKTParser::Private {
bool removeInverseOf);
PropertyMap &buildProperties(const WKTNodeNNPtr &node,
bool removeInverseOf = false);
bool removeInverseOf = false,
bool hasName = true);
ObjectDomainPtr buildObjectDomain(const WKTNodeNNPtr &node);
@@ -1577,7 +1578,8 @@ IdentifierPtr WKTParser::Private::buildId(const WKTNodeNNPtr &node,
// ---------------------------------------------------------------------------
PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node,
bool removeInverseOf) {
bool removeInverseOf,
bool hasName) {
if (propertyCount_ == MAX_PROPERTY_SIZE) {
throw ParsingException("MAX_PROPERTY_SIZE reached");
@@ -1603,7 +1605,7 @@ PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node,
}
}
if (!nodeChildren.empty()) {
if (hasName && !nodeChildren.empty()) {
const auto &nodeName(nodeP->value());
auto name(stripQuotes(nodeChildren[0]));
if (removeInverseOf && starts_with(name, "Inverse of ")) {
@@ -3892,13 +3894,12 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
if (mapping &&
mapping->epsg_code == EPSG_CODE_METHOD_MERCATOR_VARIANT_B &&
ci_equal(parameterName, "latitude_of_origin")) {
for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) {
if (mapping->params[idx]->epsg_code ==
EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN) {
foundParameters[idx] = true;
break;
}
}
// Some illegal formulations of Mercator_2SP have a unexpected
// latitude_of_origin parameter. We accept it on import, but
// do not accept it when exporting to PROJ string, unless it is
// zero.
// No need to try to update foundParameters[] as this is a
// unexpected one.
parameterName = EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN;
propertiesParameter.set(
Identifier::CODE_KEY,
@@ -3967,6 +3968,48 @@ ConversionNNPtr WKTParser::Private::buildProjectionStandard(
}
}
if (mapping && (mapping->epsg_code ==
EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A ||
mapping->epsg_code ==
EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B)) {
// Special case when importing some GDAL WKT of Hotine Oblique Mercator
// that have a Azimuth parameter but lacks the Rectified Grid Angle.
// We have code in the exportToPROJString() to deal with that situation,
// but also adds the rectified grid angle from the azimuth on import.
bool foundAngleRecifiedToSkewGrid = false;
bool foundAzimuth = false;
for (size_t idx = 0; mapping->params[idx] != nullptr; ++idx) {
if (foundParameters[idx] &&
mapping->params[idx]->epsg_code ==
EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID) {
foundAngleRecifiedToSkewGrid = true;
} else if (foundParameters[idx] &&
mapping->params[idx]->epsg_code ==
EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE) {
foundAzimuth = true;
}
}
if (!foundAngleRecifiedToSkewGrid && foundAzimuth) {
for (size_t idx = 0; idx < parameters.size(); ++idx) {
if (parameters[idx]->getEPSGCode() ==
EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE) {
PropertyMap propertiesParameter;
propertiesParameter.set(
Identifier::CODE_KEY,
EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID);
propertiesParameter.set(Identifier::CODESPACE_KEY,
Identifier::EPSG);
propertiesParameter.set(
IdentifiedObject::NAME_KEY,
EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID);
parameters.push_back(
OperationParameter::create(propertiesParameter));
values.push_back(values[idx]);
}
}
}
}
return Conversion::create(
PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"),
propertiesMethod, parameters, values)
@@ -4670,8 +4713,9 @@ BoundCRSNNPtr WKTParser::Private::buildBoundCRS(const WKTNodeNNPtr &node) {
NN_NO_CHECK(targetCRS), nullptr, buildProperties(methodNode),
parameters, values, std::vector<PositionalAccuracyNNPtr>());
return BoundCRS::create(buildProperties(node), NN_NO_CHECK(sourceCRS),
NN_NO_CHECK(targetCRS), transformation);
return BoundCRS::create(buildProperties(node, false, false),
NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS),
transformation);
}
// ---------------------------------------------------------------------------
@@ -7675,7 +7719,7 @@ const std::string &PROJStringFormatter::toString() const {
iterCur = steps.erase(iterPrev, std::next(iterCur));
if (iterCur != steps.begin())
iterCur = std::prev(iterCur);
if (iterCur == steps.begin())
if (iterCur == steps.begin() && iterCur != steps.end())
++iterCur;
};
+10
View File
@@ -4005,6 +4005,16 @@ void Conversion::_exportToPROJString(
EPSG_CODE_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN) {
valueConverted = 1.0;
}
if ((mapping->epsg_code ==
EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A ||
mapping->epsg_code ==
EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B) &&
param->epsg_code ==
EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID) {
// Do not use 0 as the default value for +gamma of
// proj=omerc
continue;
}
} else if (param->unit_type ==
common::UnitOfMeasure::Type::ANGULAR) {
valueConverted =
@@ -729,10 +729,12 @@ struct PrecomputedOpCharacteristics {
struct SortFunction {
const std::map<CoordinateOperation *, PrecomputedOpCharacteristics> &map;
const std::string BALLPARK_GEOGRAPHIC_OFFSET_FROM;
explicit SortFunction(const std::map<CoordinateOperation *,
PrecomputedOpCharacteristics> &mapIn)
: map(mapIn) {}
: map(mapIn), BALLPARK_GEOGRAPHIC_OFFSET_FROM(
std::string(BALLPARK_GEOGRAPHIC_OFFSET) + " from ") {}
// Sorting function
// Return true if a < b
@@ -860,6 +862,48 @@ struct SortFunction {
const auto &a_name = a->nameStr();
const auto &b_name = b->nameStr();
// Make sure that
// "Ballpark geographic offset from NAD83(CSRS)v6 to NAD83(CSRS)"
// has more priority than
// "Ballpark geographic offset from ITRF2008 to NAD83(CSRS)"
const auto posA = a_name.find(BALLPARK_GEOGRAPHIC_OFFSET_FROM);
const auto posB = b_name.find(BALLPARK_GEOGRAPHIC_OFFSET_FROM);
if (posA != std::string::npos && posB != std::string::npos) {
const auto pos2A = a_name.find(" to ", posA);
const auto pos2B = b_name.find(" to ", posB);
if (pos2A != std::string::npos && pos2B != std::string::npos) {
const auto pos3A = a_name.find(" + ", pos2A);
const auto pos3B = b_name.find(" + ", pos2B);
const std::string fromA = a_name.substr(
posA + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size(),
pos2A - (posA + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size()));
const std::string toA =
a_name.substr(pos2A + strlen(" to "),
pos3A == std::string::npos
? pos3A
: pos3A - (pos2A + strlen(" to ")));
const std::string fromB = b_name.substr(
posB + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size(),
pos2B - (posB + BALLPARK_GEOGRAPHIC_OFFSET_FROM.size()));
const std::string toB =
b_name.substr(pos2B + strlen(" to "),
pos3B == std::string::npos
? pos3B
: pos3B - (pos2B + strlen(" to ")));
const bool similarCRSInA =
(fromA.find(toA) == 0 || toA.find(fromA) == 0);
const bool similarCRSInB =
(fromB.find(toB) == 0 || toB.find(fromB) == 0);
if (similarCRSInA && !similarCRSInB) {
return true;
}
if (!similarCRSInA && similarCRSInB) {
return false;
}
}
}
// The shorter name, the better ?
if (a_name.size() < b_name.size()) {
return true;
@@ -1240,7 +1284,7 @@ struct FilterResults {
area, getAccuracy(op), isPROJExportable, hasGrids,
gridsAvailable, gridsKnown, stepCount,
op->hasBallparkTransformation(),
op->nameStr().find("ballpark vertical transformation") !=
op->nameStr().find(BALLPARK_VERTICAL_TRANSFORMATION) !=
std::string::npos,
isNullTransformation(op->nameStr()));
}
@@ -1624,6 +1668,9 @@ CoordinateOperationFactory::Private::findOpsInRegistryDirect(
context.extent1, context.extent2);
res.insert(res.end(), resTmp.begin(), resTmp.end());
if (authName == "PROJ") {
// Do not stop at the first transformations available in
// the PROJ namespace, but allow the next authority to
// continue
continue;
}
if (!res.empty()) {
@@ -1669,24 +1716,34 @@ CoordinateOperationFactory::Private::findOpsInRegistryDirectTo(
const auto authorities(getCandidateAuthorities(
authFactory, targetAuthName, targetAuthName));
std::vector<CoordinateOperationNNPtr> res;
for (const auto &authority : authorities) {
const auto authName =
authority == "any" ? std::string() : authority;
const auto tmpAuthFactory = io::AuthorityFactory::create(
authFactory->databaseContext(),
authority == "any" ? std::string() : authority);
auto res = tmpAuthFactory->createFromCoordinateReferenceSystemCodes(
std::string(), std::string(), targetAuthName, targetCode,
context.context->getUsePROJAlternativeGridNames(),
authFactory->databaseContext(), authName);
auto resTmp =
tmpAuthFactory->createFromCoordinateReferenceSystemCodes(
std::string(), std::string(), targetAuthName, targetCode,
context.context->getUsePROJAlternativeGridNames(),
gridAvailabilityUse ==
CoordinateOperationContext::GridAvailabilityUse::
DISCARD_OPERATION_IF_MISSING_GRID ||
gridAvailabilityUse ==
CoordinateOperationContext::GridAvailabilityUse::
DISCARD_OPERATION_IF_MISSING_GRID ||
gridAvailabilityUse ==
CoordinateOperationContext::GridAvailabilityUse::
KNOWN_AVAILABLE,
gridAvailabilityUse ==
CoordinateOperationContext::GridAvailabilityUse::
KNOWN_AVAILABLE,
gridAvailabilityUse == CoordinateOperationContext::
GridAvailabilityUse::KNOWN_AVAILABLE,
context.context->getDiscardSuperseded(), true, true,
context.extent1, context.extent2);
context.context->getDiscardSuperseded(), true, true,
context.extent1, context.extent2);
res.insert(res.end(), resTmp.begin(), resTmp.end());
if (authName == "PROJ") {
// Do not stop at the first transformations available in
// the PROJ namespace, but allow the next authority to continue
continue;
}
if (!res.empty()) {
auto resFiltered =
FilterResults(res, context.context, context.extent1,
@@ -2414,8 +2471,9 @@ CoordinateOperationFactory::Private::createOperationsGeogToGeog(
util::IComparable::Criterion::EQUIVALENT)) {
if (offset_pm.value() == 0 && !axisReversal2D && !axisReversal3D) {
// If only by vertical units, use a Change of Vertical
// Unit
// transformation
// Unit transformation
if (vconvDst == 0)
throw InvalidOperation("Conversion factor of target unit is 0");
const double factor = vconvSrc / vconvDst;
auto conv = Conversion::createChangeVerticalUnit(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
@@ -4468,7 +4526,9 @@ void CoordinateOperationFactory::Private::createOperationsVertToVert(
const double factor = convSrc / convDst;
if (!equivalentVDatum) {
auto name = buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr());
name += " (";
name += BALLPARK_VERTICAL_TRANSFORMATION;
name += ')';
auto conv = Transformation::createChangeVerticalUnit(
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY, name),
sourceCRS, targetCRS,
@@ -4574,9 +4634,12 @@ void CoordinateOperationFactory::Private::createOperationsVertToGeogBallpark(
targetCRSExtent.get(), util::IComparable::Criterion::EQUIVALENT);
util::PropertyMap map;
map.set(common::IdentifiedObject::NAME_KEY,
buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr()) +
BALLPARK_VERTICAL_TRANSFORMATION_NO_ELLIPSOID_VERT_HEIGHT)
std::string transfName(
buildTransfName(sourceCRS->nameStr(), targetCRS->nameStr()));
transfName += " (";
transfName += BALLPARK_VERTICAL_TRANSFORMATION_NO_ELLIPSOID_VERT_HEIGHT;
transfName += ')';
map.set(common::IdentifiedObject::NAME_KEY, transfName)
.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY,
sameExtent ? NN_NO_CHECK(sourceCRSExtent)
: metadata::Extent::WORLD);
@@ -5250,8 +5313,10 @@ void CoordinateOperationFactory::Private::createOperationsCompoundToCompound(
// and a geoid model for Belfast height referenced to ETRS89
if (verticalTransforms.size() == 1 &&
verticalTransforms.front()->hasBallparkTransformation()) {
auto dbContext =
context.context->getAuthorityFactory()->databaseContext();
const auto &authFactory = context.context->getAuthorityFactory();
auto dbContext = authFactory
? authFactory->databaseContext().as_nullable()
: nullptr;
const auto intermGeogSrc =
srcGeog->promoteTo3D(std::string(), dbContext);
const bool intermGeogSrcIsSameAsIntermGeogDst =
@@ -5264,45 +5329,84 @@ void CoordinateOperationFactory::Private::createOperationsCompoundToCompound(
createOperations(sourceCRS, intermGeogSrc, context);
const auto opsGeogToTarget =
createOperations(intermGeogDst, targetCRS, context);
// We preferably accept using an intermediate if the operations
// to it do not include ballpark operations, but if they do include
// grids, using such operations result will be better than nothing.
// This will help for example for "NAD83(CSRS) + CGVD28 height" to
// "NAD83(CSRS) + CGVD2013(CGG2013) height" where the transformation
// between "CGVD2013(CGG2013) height" and "NAD83(CSRS)" actually
// involves going through NAD83(CSRS)v6
const auto hasKnownGrid =
[&dbContext](const CoordinateOperationNNPtr &op) {
const auto grids = op->gridsNeeded(dbContext, true);
if (grids.empty()) {
return false;
}
for (const auto &grid : grids) {
if (grid.available) {
return true;
}
}
return false;
};
const bool hasNonTrivialSrcTransf =
!opsSrcToGeog.empty() &&
!opsSrcToGeog.front()->hasBallparkTransformation();
(!opsSrcToGeog.front()->hasBallparkTransformation() ||
hasKnownGrid(opsSrcToGeog.front()));
const bool hasNonTrivialTargetTransf =
!opsGeogToTarget.empty() &&
!opsGeogToTarget.front()->hasBallparkTransformation();
(!opsGeogToTarget.front()->hasBallparkTransformation() ||
hasKnownGrid(opsGeogToTarget.front()));
if (hasNonTrivialSrcTransf && hasNonTrivialTargetTransf) {
const auto opsGeogSrcToGeogDst =
createOperations(intermGeogSrc, intermGeogDst, context);
for (const auto &op1 : opsSrcToGeog) {
if (op1->hasBallparkTransformation()) {
// std::cerr << "excluded " << op1->nameStr() << std::endl;
continue;
}
for (const auto &op2 : opsGeogSrcToGeogDst) {
for (const auto &op3 : opsGeogToTarget) {
if (op3->hasBallparkTransformation()) {
// std::cerr << "excluded " << op3->nameStr() <<
// std::endl;
continue;
}
try {
res.emplace_back(
ConcatenatedOperation::createComputeMetadata(
intermGeogSrcIsSameAsIntermGeogDst
? std::vector<
CoordinateOperationNNPtr>{op1,
op3}
: std::vector<
CoordinateOperationNNPtr>{op1,
op2,
op3},
disallowEmptyIntersection));
} catch (const std::exception &) {
// In first pass, exclude (horizontal) ballpark operations, but
// accept them in second pass.
for (int pass = 0; pass <= 1 && res.empty(); pass++) {
for (const auto &op1 : opsSrcToGeog) {
if (pass == 0 && op1->hasBallparkTransformation()) {
// std::cerr << "excluded " << op1->nameStr() <<
// std::endl;
continue;
}
if (op1->nameStr().find(BALLPARK_VERTICAL_TRANSFORMATION) !=
std::string::npos) {
continue;
}
for (const auto &op2 : opsGeogSrcToGeogDst) {
for (const auto &op3 : opsGeogToTarget) {
if (pass == 0 && op3->hasBallparkTransformation()) {
// std::cerr << "excluded " << op3->nameStr() <<
// std::endl;
continue;
}
if (op3->nameStr().find(
BALLPARK_VERTICAL_TRANSFORMATION) !=
std::string::npos) {
continue;
}
try {
res.emplace_back(
ConcatenatedOperation::createComputeMetadata(
intermGeogSrcIsSameAsIntermGeogDst
? std::vector<
CoordinateOperationNNPtr>{op1,
op3}
: std::vector<
CoordinateOperationNNPtr>{op1,
op2,
op3},
disallowEmptyIntersection));
} catch (const std::exception &) {
}
}
}
}
}
}
if (!res.empty()) {
return;
}
+3 -3
View File
@@ -61,10 +61,10 @@ const char *NULL_GEOGRAPHIC_OFFSET = "Null geographic offset";
const char *NULL_GEOCENTRIC_TRANSLATION = "Null geocentric translation";
const char *BALLPARK_GEOGRAPHIC_OFFSET = "Ballpark geographic offset";
const char *BALLPARK_VERTICAL_TRANSFORMATION =
" (ballpark vertical transformation)";
"ballpark vertical transformation";
const char *BALLPARK_VERTICAL_TRANSFORMATION_NO_ELLIPSOID_VERT_HEIGHT =
" (ballpark vertical transformation, without ellipsoid height to vertical "
"height correction)";
"ballpark vertical transformation, without ellipsoid height to vertical "
"height correction";
// ---------------------------------------------------------------------------
@@ -2011,6 +2011,7 @@ isGeographic3DToGravityRelatedHeight(const OperationMethodNNPtr &method,
"1100", // Geog3D to Geog2D+GravityRelatedHeight (PL txt)
"1103", // Geog3D to Geog2D+GravityRelatedHeight (EGM)
"1105", // Geog3D to Geog2D+GravityRelatedHeight (ITAL2005)
// "1110", // Geog3D to Geog2D+Depth (Gravsoft) FIXME: to investigate how to map this to PROJ pipeline (depth vs height)
"9661", // Geographic3D to GravityRelatedHeight (EGM)
"9662", // Geographic3D to GravityRelatedHeight (Ausgeoid98)
"9663", // Geographic3D to GravityRelatedHeight (OSGM-GB)
+3 -1
View File
@@ -174,7 +174,7 @@ extern "C" {
/* The version numbers should be updated with every release! **/
#define PROJ_VERSION_MAJOR 8
#define PROJ_VERSION_MINOR 2
#define PROJ_VERSION_PATCH 0
#define PROJ_VERSION_PATCH 1
/* Note: the following 3 defines have been introduced in PROJ 8.0.1 */
/* Macro to compute a PROJ version number from its components */
@@ -381,7 +381,9 @@ PJ_CONTEXT PROJ_DLL *proj_context_clone (PJ_CONTEXT *ctx);
typedef const char* (*proj_file_finder) (PJ_CONTEXT *ctx, const char*, void* user_data);
void PROJ_DLL proj_context_set_file_finder(PJ_CONTEXT *ctx, proj_file_finder finder, void* user_data);
/*! @endcond */
void PROJ_DLL proj_context_set_search_paths(PJ_CONTEXT *ctx, int count_paths, const char* const* paths);
/*! @cond Doxygen_Suppress */
void PROJ_DLL proj_context_set_ca_bundle_path(PJ_CONTEXT *ctx, const char *path);
void PROJ_DLL proj_context_use_proj4_init_rules(PJ_CONTEXT *ctx, int enable);
int PROJ_DLL proj_context_get_use_proj4_init_rules(PJ_CONTEXT *ctx, int from_legacy_code_path);
+3
View File
@@ -573,6 +573,9 @@ struct PJconsts {
mutable bool gridsNeededAsked = false;
mutable std::vector<NS_PROJ::operation::GridDescription> gridsNeeded{};
// cache pj_get_type() result to help for repeated calls to proj_factors()
mutable PJ_TYPE type = PJ_TYPE_UNKNOWN;
/*************************************************************************************
proj_create_crs_to_crs() alternative coordinate operations
**************************************************************************************/
+148 -2
View File
@@ -6,9 +6,21 @@
* PROJ by Kristian Evers. Original code found in file src/proj_guyou.c, see
* https://github.com/rouault/libproj4/blob/master/libproject-1.01/src/proj_guyou.c
* for reference.
* Fix for Peirce Quincuncial projection to diamond or square by Toby C. Wilkinson to
* correctly flip out southern hemisphere into the four triangles of Peirce's
* quincunx. The fix inspired by a similar rotate and translate solution applied
* by Jonathan Feinberg for cartopy, see
* https://github.com/jonathf/cartopy/blob/8172cac7fc45cafc86573d408ce85b74258a9c28/lib/cartopy/peircequincuncial.py
* Added original code for horizontal and vertical arrangement of hemispheres by Toby
* C. Wilkinson to allow creation of lateral quincuncial projections, such as Grieger's
* Triptychial, see, e.g.:
* - Grieger, B. (2020). “Optimized global map projections for specific applications:
* the triptychial projection and the Spilhaus projection”. EGU2020-9885.
* https://doi.org/10.5194/egusphere-egu2020-9885
*
* Copyright (c) 2005, 2006, 2009 Gerald I. Evenden
* Copyright (c) 2020 Kristian Evers
* Copyright (c) 2021 Toby C Wilkinson
*
* Related material
* ----------------
@@ -48,8 +60,20 @@ enum projection_type {
ADAMS_WS2,
};
enum peirce_type {
PEIRCE_Q_SQUARE,
PEIRCE_Q_DIAMOND,
PEIRCE_Q_NHEMISPHERE,
PEIRCE_Q_SHEMISPHERE,
PEIRCE_Q_HORIZONTAL,
PEIRCE_Q_VERTICAL,
};
struct pj_opaque {
projection_type mode;
peirce_type pqtype;
double scrollx = 0.0;
double scrolly = 0.0;
};
} // anonymous namespace
@@ -118,9 +142,18 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) {
}
break;
case PEIRCE_Q: {
if( lp.phi < -TOL ) {
/* lam0 - note that the original Peirce model used a central meridian of around -70deg, but the default within proj is +lon0=0 */
if (Q->pqtype == PEIRCE_Q_NHEMISPHERE) {
if( lp.phi < -TOL ) {
proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
}
if (Q->pqtype == PEIRCE_Q_SHEMISPHERE) {
if( lp.phi > -TOL ) {
proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
return proj_coord_error().xy;
}
}
const double sl = sin(lp.lam);
const double cl = cos(lp.lam);
@@ -173,7 +206,71 @@ static PJ_XY adams_forward(PJ_LP lp, PJ *P) {
xy.x = ell_int_5(m);
xy.y = ell_int_5(n);
if (Q->mode == ADAMS_HEMI || Q->mode == ADAMS_WS2) { /* rotate by 45deg. */
if (Q->mode == PEIRCE_Q) {
/* Constant complete elliptic integral of the first kind with m=0.5, calculated using https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.ellipk.html . Used as basic as scaled shift distance */
constexpr double shd = 1.8540746773013719 * 2;
/* For square and diamond Quincuncial projections, spin out southern hemisphere to triangular segments of quincunx (before rotation for square)*/
if( Q->pqtype == PEIRCE_Q_SQUARE || ( Q->pqtype == PEIRCE_Q_DIAMOND )) {
if (lp.phi < 0.) { /* fold out segments */
if (lp.lam < ( -0.75 * M_PI )) xy.y = shd - xy.y; /* top left segment, shift up and reflect y */
if ( (lp.lam < (-0.25 * M_PI)) && (lp.lam >= ( -0.75 * M_PI ))) xy.x = - shd - xy.x; /* left segment, shift left and reflect x */
if ( (lp.lam < (0.25 * M_PI)) && (lp.lam >= ( -0.25 * M_PI ))) xy.y = - shd - xy.y; /* bottom segment, shift down and reflect y */
if ( (lp.lam < (0.75 * M_PI)) && (lp.lam >= ( 0.25 * M_PI ))) xy.x = shd - xy.x; /* right segment, shift right and reflect x */
if (lp.lam >= (0.75 * M_PI)) xy.y = shd - xy.y; /* top right segment, shift up and reflect y */
}
}
/* For square types rotate xy by 45 deg */
if( Q->pqtype == PEIRCE_Q_SQUARE ) {
const double temp = xy.x;
xy.x = RSQRT2 * (xy.x - xy.y);
xy.y = RSQRT2 * (temp + xy.y);
}
/* For rectangle Quincuncial projs, spin out southern hemisphere to east (horizontal) or north (vertical) after rotation */
if( Q->pqtype == PEIRCE_Q_HORIZONTAL ) {
if (lp.phi < 0.) {
xy.x = shd - xy.x; /* reflect x to east */
}
xy.x = xy.x - (shd / 2); /* shift everything so origin is in middle of two hemispheres */
}
if( Q->pqtype == PEIRCE_Q_VERTICAL ) {
if (lp.phi < 0.) {
xy.y = shd - xy.y; /* reflect y to north */
}
xy.y = xy.y - (shd / 2); /* shift everything so origin is in middle of two hemispheres */
}
//if o_scrollx param present, scroll x
if (!(Q->scrollx == 0.0) && (Q->pqtype == PEIRCE_Q_HORIZONTAL) ) {
double xscale = 2.0;
double xthresh = shd / 2;
xy.x = xy.x + (Q->scrollx * (xthresh * 2 * xscale)); /*shift relative to proj width*/
if(xy.x >= (xthresh * xscale)) {
xy.x = xy.x - (shd * xscale);
}
else if (xy.x < -(xthresh * xscale)) {
xy.x = xy.x + (shd * xscale);
}
}
//if o_scrolly param present, scroll y
if (!(Q->scrolly == 0.0) && (Q->pqtype == PEIRCE_Q_VERTICAL)) {
double yscale = 2.0;
double ythresh = shd / 2;
xy.y = xy.y + (Q->scrolly * (ythresh * 2 * yscale)); /*shift relative to proj height*/
if(xy.y >= (ythresh * yscale)) {
xy.y = xy.y - (shd * yscale);
}
else if (xy.y < -(ythresh * yscale)) {
xy.y = xy.y + (shd * yscale);
}
}
}
if (Q->mode == ADAMS_HEMI || Q->mode == ADAMS_WS2 ) { /* rotate by 45deg. */
const double temp = xy.x;
xy.x = RSQRT2 * (xy.x - xy.y);
xy.y = RSQRT2 * (temp + xy.y);
@@ -218,6 +315,55 @@ static PJ *setup(PJ *P, projection_type mode) {
if( mode == ADAMS_WS2 )
P->inv = adams_inverse;
if( mode == PEIRCE_Q) {
// Quincuncial projections type options: square, diamond, hemisphere, horizontal (rectangle) or vertical (rectangle)
const char* pqtype = pj_param (P->ctx, P->params, "stype").s;
if (!pqtype) pqtype = "diamond"; /* default if type value not supplied */
if (strcmp(pqtype, "square") == 0) {
Q->pqtype = PEIRCE_Q_SQUARE;
}
else if (strcmp(pqtype, "diamond") == 0) {
Q->pqtype = PEIRCE_Q_DIAMOND;
}
else if (strcmp(pqtype, "nhemisphere") == 0) {
Q->pqtype = PEIRCE_Q_NHEMISPHERE;
}
else if (strcmp(pqtype, "shemisphere") == 0) {
Q->pqtype = PEIRCE_Q_SHEMISPHERE;
}
else if (strcmp(pqtype, "horizontal") == 0) {
Q->pqtype = PEIRCE_Q_HORIZONTAL;
if (pj_param(P->ctx, P->params, "tscrollx").i) {
double scrollx;
scrollx = pj_param(P->ctx, P->params, "dscrollx").f;
if (scrollx > 1 || scrollx < -1) {
proj_log_error(P, _("Invalid value for scrollx: |scrollx| should between -1 and 1"));
return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->scrollx = scrollx;
}
}
else if (strcmp(pqtype, "vertical") == 0) {
Q->pqtype = PEIRCE_Q_VERTICAL;
if (pj_param(P->ctx, P->params, "tscrolly").i) {
double scrolly;
scrolly = pj_param(P->ctx, P->params, "dscrolly").f;
if (scrolly > 1 || scrolly < -1) {
proj_log_error(P, _("Invalid value for scrolly: |scrolly| should between -1 and 1"));
return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
Q->scrolly = scrolly;
}
}
else {
proj_log_error (P, _("peirce_q: invalid value for 'type' parameter"));
return pj_default_destructor (P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
}
}
return P;
}
+1 -1
View File
@@ -11,7 +11,7 @@ char const pj_release[] =
STR(PROJ_VERSION_MAJOR)"."
STR(PROJ_VERSION_MINOR)"."
STR(PROJ_VERSION_PATCH)", "
"November 1st, 2021";
"January 1st, 2022";
const char *pj_get_release() {
return pj_release;
+999 -1175
View File
File diff suppressed because it is too large Load Diff
+16 -3
View File
@@ -47,6 +47,10 @@
#include <sqlite3.h>
#if !defined(_WIN32)
#include <sys/resource.h>
#endif
#ifndef __MINGW32__
#include <thread>
#endif
@@ -6104,9 +6108,18 @@ TEST_F(CApi, open_plenty_of_contexts) {
// database
std::vector<FILE *> dummyFilePointers;
std::vector<PJ_CONTEXT *> ctxts;
// 1024 is the number of file descriptors that can be opened simultaneously
// by a Linux process (by default)
for (int i = 0; i < 1024 - 50; i++) {
// The number of file descriptors that can be opened simultaneously by a
// process varies across platforms so we make use of getrlimit(2) to
// retrieve it.
struct rlimit open_max;
getrlimit(RLIMIT_NOFILE, &open_max);
// On some platforms fopen returned nullptrs before reaching limit - 50, we
// can avoid this by capping the limit to 1024.
if (open_max.rlim_cur > 1024) {
open_max.rlim_cur = 1024;
setrlimit(RLIMIT_NOFILE, &open_max);
}
for (rlim_t i = 0; i < open_max.rlim_cur - 50; i++) {
FILE *f = fopen("/dev/null", "rb");
ASSERT_TRUE(f != nullptr);
dummyFilePointers.push_back(f);
+1
View File
@@ -4680,6 +4680,7 @@ TEST(crs, boundCRS_with_usage) {
auto crs =
nn_dynamic_pointer_cast<BoundCRS>(WKTParser().createFromWKT(wkt));
ASSERT_TRUE(crs != nullptr);
EXPECT_EQ(crs->nameStr(), "Monte Mario / Italy zone 2");
auto got_wkt = crs->exportToWKT(
WKTFormatter::create(WKTFormatter::Convention::WKT2_2019).get());
+120
View File
@@ -1770,6 +1770,126 @@ TEST(wkt_parse, wkt1_Spherical_Cross_Track_Height) {
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt1_hotine_oblique_mercator_without_rectified_grid_angle) {
auto wkt = "PROJCS[\"NAD_1983_Michigan_GeoRef_Meters\","
"GEOGCS[\"NAD83(1986)\","
"DATUM[\"North_American_Datum_1983\","
"SPHEROID[\"GRS_1980\",6378137,298.257222101]],"
"PRIMEM[\"Greenwich\",0],"
"UNIT[\"Degree\",0.017453292519943295]],"
"PROJECTION[\"Hotine_Oblique_Mercator\"],"
"PARAMETER[\"false_easting\",2546731.496],"
"PARAMETER[\"false_northing\",-4354009.816],"
"PARAMETER[\"latitude_of_center\",45.30916666666666],"
"PARAMETER[\"longitude_of_center\",-86],"
"PARAMETER[\"azimuth\",-22.74444],"
"PARAMETER[\"scale_factor\",0.9996],"
"UNIT[\"Meter\",1]]";
auto obj = WKTParser().createFromWKT(wkt);
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
// Check that we have added automatically rectified_grid_angle
auto got_wkt = crs->exportToWKT(
WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get());
EXPECT_TRUE(got_wkt.find("PARAMETER[\"rectified_grid_angle\",-22.74444]") !=
std::string::npos)
<< got_wkt;
}
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt1_hotine_oblique_mercator_with_rectified_grid_angle) {
auto wkt = "PROJCS[\"NAD_1983_Michigan_GeoRef_Meters\","
"GEOGCS[\"NAD83(1986)\","
"DATUM[\"North_American_Datum_1983\","
"SPHEROID[\"GRS_1980\",6378137,298.257222101]],"
"PRIMEM[\"Greenwich\",0],"
"UNIT[\"Degree\",0.017453292519943295]],"
"PROJECTION[\"Hotine_Oblique_Mercator\"],"
"PARAMETER[\"false_easting\",2546731.496],"
"PARAMETER[\"false_northing\",-4354009.816],"
"PARAMETER[\"latitude_of_center\",45.30916666666666],"
"PARAMETER[\"longitude_of_center\",-86],"
"PARAMETER[\"azimuth\",-22.74444],"
"PARAMETER[\"rectified_grid_angle\",-23],"
"PARAMETER[\"scale_factor\",0.9996],"
"UNIT[\"Meter\",1]]";
auto obj = WKTParser().createFromWKT(wkt);
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
// Check that we have not overriden rectified_grid_angle
auto got_wkt = crs->exportToWKT(
WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get());
EXPECT_TRUE(got_wkt.find("PARAMETER[\"rectified_grid_angle\",-23]") !=
std::string::npos)
<< got_wkt;
}
// ---------------------------------------------------------------------------
TEST(proj_export, wkt2_hotine_oblique_mercator_without_rectified_grid_angle) {
auto wkt = "PROJCRS[\"NAD_1983_Michigan_GeoRef_Meters\",\n"
" BASEGEOGCRS[\"NAD83(1986)\",\n"
" DATUM[\"North American Datum 1983\",\n"
" ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n"
" LENGTHUNIT[\"metre\",1]],\n"
" ID[\"EPSG\",6269]],\n"
" PRIMEM[\"Greenwich\",0,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n"
" CONVERSION[\"unnamed\",\n"
" METHOD[\"Hotine Oblique Mercator (variant A)\",\n"
" ID[\"EPSG\",9812]],\n"
" PARAMETER[\"False easting\",2546731.496,\n"
" LENGTHUNIT[\"Meter\",1],\n"
" ID[\"EPSG\",8806]],\n"
" PARAMETER[\"False northing\",-4354009.816,\n"
" LENGTHUNIT[\"Meter\",1],\n"
" ID[\"EPSG\",8807]],\n"
" PARAMETER[\"Latitude of projection centre\","
" 45.3091666666667,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",8811]],\n"
" PARAMETER[\"Longitude of projection centre\",-86,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",8812]],\n"
" PARAMETER[\"Azimuth of initial line\",-22.74444,\n"
" ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
" ID[\"EPSG\",8813]],\n"
" PARAMETER[\"Scale factor on initial line\",0.9996,\n"
" SCALEUNIT[\"unity\",1],\n"
" ID[\"EPSG\",8815]]],\n"
" CS[Cartesian,2],\n"
" AXIS[\"(E)\",east,\n"
" ORDER[1],\n"
" LENGTHUNIT[\"Meter\",1]],\n"
" AXIS[\"(N)\",north,\n"
" ORDER[2],\n"
" LENGTHUNIT[\"Meter\",1]]]";
auto obj = WKTParser().createFromWKT(wkt);
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
ASSERT_TRUE(crs != nullptr);
// We don't do any particular handling of missing Angle from Rectified
// to Skew Grid on import, but on export to PROJ string,
// check that we don't add a dummy gamma value.
auto expectedPROJString = "+proj=omerc +no_uoff +lat_0=45.3091666666667 "
"+lonc=-86 +alpha=-22.74444 "
"+k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 "
"+datum=NAD83 +units=m +no_defs +type=crs";
EXPECT_EQ(
crs->exportToPROJString(
PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_4)
.get()),
expectedPROJString);
}
// ---------------------------------------------------------------------------
TEST(wkt_parse, wkt2_projected) {
auto wkt = "PROJCRS[\"WGS 84 / UTM zone 31N\",\n"
" BASEGEODCRS[\"WGS 84\",\n"
+104
View File
@@ -4518,6 +4518,63 @@ TEST(operation, compoundCRS_to_compoundCRS_issue_2720) {
// ---------------------------------------------------------------------------
TEST(
operation,
compoundCRS_to_compoundCRS_concatenated_operation_with_two_vert_transformation_and_ballpark_geog) {
auto authFactory =
AuthorityFactory::create(DatabaseContext::create(), "EPSG");
// "NAD83(CSRS) + CGVD28 height"
auto srcObj = createFromUserInput("EPSG:4617+5713",
authFactory->databaseContext(), false);
auto src = nn_dynamic_pointer_cast<CRS>(srcObj);
ASSERT_TRUE(src != nullptr);
// "NAD83(CSRS) + CGVD2013(CGG2013) height"
auto dstObj = createFromUserInput("EPSG:4617+6647",
authFactory->databaseContext(), false);
auto dst = nn_dynamic_pointer_cast<CRS>(dstObj);
ASSERT_TRUE(dst != nullptr);
// That transformation involves doing CGVD28 height to CGVD2013(CGG2013)
// height by doing:
// - CGVD28 height to NAD83(CSRS): EPSG registered operation
// - NAD83(CSRS) to CGVD2013(CGG2013) height by doing:
// * NAD83(CSRS) to NAD83(CSRS)v6: ballpark
// * NAD83(CSRS)v6 to CGVD2013(CGG2013): EPSG registered operation
auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
ctxt->setSpatialCriterion(
CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION);
{
auto list = CoordinateOperationFactory::create()->createOperations(
NN_NO_CHECK(src), NN_NO_CHECK(dst), ctxt);
ASSERT_GE(list.size(), 1U);
// Check that we have the transformation using NAD83(CSRS)v6 first
// (as well as the one between NAD83(CSRS) to CGVD28 height)
EXPECT_EQ(list[0]->nameStr(),
"Inverse of NAD83(CSRS) to CGVD28 height (1) + "
"Inverse of Ballpark geographic offset from NAD83(CSRS)v6 to "
"NAD83(CSRS) + "
"NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) + "
"Inverse of Ballpark geographic offset from NAD83(CSRS) to "
"NAD83(CSRS)v6");
}
{
auto list = CoordinateOperationFactory::create()->createOperations(
NN_NO_CHECK(dst), NN_NO_CHECK(src), ctxt);
ASSERT_GE(list.size(), 1U);
// Check that we have the transformation using NAD83(CSRS)v6 first
// (as well as the one between NAD83(CSRS) to CGVD28 height)
EXPECT_EQ(
list[0]->nameStr(),
"Ballpark geographic offset from NAD83(CSRS) to NAD83(CSRS)v6 + "
"Inverse of NAD83(CSRS)v6 to CGVD2013(CGG2013) height (1) + "
"Ballpark geographic offset from NAD83(CSRS)v6 to NAD83(CSRS) + "
"NAD83(CSRS) to CGVD28 height (1)");
}
}
// ---------------------------------------------------------------------------
TEST(operation, vertCRS_to_vertCRS) {
auto vertcrs_m_obj = PROJStringParser().createFromPROJString("+vunits=m");
@@ -4922,6 +4979,53 @@ TEST(operation, compoundCRS_to_geogCRS_3D_context) {
"+step +proj=unitconvert +xy_in=rad +xy_out=deg "
"+step +proj=axisswap +order=2,1");
}
// Check that we can handle vertical transformations where there is a
// mix of available ones in the PROJ namespace (mx_inegi_ggm10) and in
// in the EPSG namespace (us_noaa_g2018u0)
// This test might no longer test this scenario if mx_inegi_ggm10 is
// referenced one day by EPSG, but at least this tests a common use case.
{
auto authFactoryAll =
AuthorityFactory::create(DatabaseContext::create(), std::string());
auto ctxt =
CoordinateOperationContext::create(authFactoryAll, nullptr, 0.0);
ctxt->setSpatialCriterion(
CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION);
ctxt->setGridAvailabilityUse(
CoordinateOperationContext::GridAvailabilityUse::
IGNORE_GRID_AVAILABILITY);
// NAD83(2011) + NAVD88 height
auto srcObj = createFromUserInput(
"EPSG:6318+5703", authFactory->databaseContext(), false);
auto src = nn_dynamic_pointer_cast<CRS>(srcObj);
ASSERT_TRUE(src != nullptr);
auto nnSrc = NN_NO_CHECK(src);
auto list = CoordinateOperationFactory::create()->createOperations(
nnSrc,
authFactory->createCoordinateReferenceSystem("4979"), // WGS 84 3D
ctxt);
bool foundGeoid2018 = false;
bool foundGGM10 = false;
for (const auto &op : list) {
try {
const auto projString = op->exportToPROJString(
PROJStringFormatter::create(
PROJStringFormatter::Convention::PROJ_5,
authFactory->databaseContext())
.get());
if (projString.find("us_noaa_g2018u0.tif") != std::string::npos)
foundGeoid2018 = true;
else if (projString.find("mx_inegi_ggm10.tif") !=
std::string::npos)
foundGGM10 = true;
} catch (const std::exception &) {
}
}
EXPECT_TRUE(foundGeoid2018);
EXPECT_TRUE(foundGGM10);
}
}
// ---------------------------------------------------------------------------
+1 -1
View File
@@ -5,7 +5,7 @@ set -e
echo "$TRAVIS_SECURE_ENV_VARS"
./travis/build_docs.sh
# Only build and publish docs when changes are made on most recent maintenance branch
if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "8.0"; then
if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "8.2"; then
echo "publish website";
./travis/add_deploy_key.sh;
./travis/deploy_website.sh $TRAVIS_BUILD_DIR/docs/build /tmp;