Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
deb1a5720f | ||
|
|
406eda9b8d | ||
|
|
6d36efa97c | ||
|
|
631e80d426 | ||
|
|
ac3ac2f27e | ||
|
|
0c61db5a98 | ||
|
|
247e6ed4ce | ||
|
|
99d365185d | ||
|
|
96388832c7 | ||
|
|
c8346e9f0a | ||
|
|
d5d60b7154 | ||
|
|
247a79e6c7 | ||
|
|
b013d24bff | ||
|
|
4608ef43d6 | ||
|
|
0845df6025 | ||
|
|
587d80536d | ||
|
|
c9fe5a1a06 | ||
|
|
90997086e1 | ||
|
|
389b2a1378 | ||
|
|
8bda42cc12 | ||
|
|
ebe3aadd69 | ||
|
|
7178175eca | ||
|
|
d9d55ed203 | ||
|
|
8a156921b9 | ||
|
|
30f059a018 | ||
|
|
2f2c150a52 | ||
|
|
f932502233 | ||
|
|
acfa9ce91f | ||
|
|
0510077777 | ||
|
|
6f544ca29e | ||
|
|
86118e8478 | ||
|
|
85db269ba9 | ||
|
|
3aabf2f5b9 | ||
|
|
93a0de1018 | ||
|
|
aeba9bdfe3 | ||
|
|
97a5fad1f0 | ||
|
|
4cb9fdb631 | ||
|
|
4db10d9e13 | ||
|
|
cf8c1a825b | ||
|
|
a461817ade | ||
|
|
ce6be7d20c | ||
|
|
4a96ce5f6f | ||
|
|
5ba4e6d453 | ||
|
|
fa8a542f40 | ||
|
|
96910fc0bb | ||
|
|
730b7b9e9f | ||
|
|
0f2efd7cfc | ||
|
|
b980912325 | ||
|
|
d76d1adffd | ||
|
|
b71bee7b60 | ||
|
|
4739adcc55 | ||
|
|
94ebc12cce | ||
|
|
9a4820add3 | ||
|
|
f988536d85 |
@@ -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
|
||||
|
||||
@@ -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/},
|
||||
}
|
||||
|
||||
@@ -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}")
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
-------------------
|
||||
|
||||
|
||||
@@ -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}")
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
After Width: | Height: | Size: 78 KiB |
@@ -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 |
@@ -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"
|
||||
},
|
||||
|
||||
@@ -17,3 +17,4 @@ the project.
|
||||
rfc-4
|
||||
rfc-5
|
||||
rfc-6
|
||||
rfc-7
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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*
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
|
After Width: | Height: | Size: 589 KiB |
|
Before Width: | Height: | Size: 367 KiB |
|
After Width: | Height: | Size: 385 KiB |
|
After Width: | Height: | Size: 555 KiB |
|
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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 = \
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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().
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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> ↦
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
**************************************************************************************/
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -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;
|
||||
|
||||