aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/clang_static_analyzer.yml2
-rwxr-xr-x.github/workflows/clang_static_analyzer/start.sh17
-rw-r--r--Doxyfile9
-rw-r--r--data/sql/alias_name.sql29
-rw-r--r--data/sql/axis.sql7
-rw-r--r--data/sql/compound_crs.sql28
-rw-r--r--data/sql/conversion.sql4
-rw-r--r--data/sql/conversion_triggers.sql3
-rw-r--r--data/sql/coordinate_system.sql1
-rw-r--r--data/sql/deprecation.sql4
-rw-r--r--data/sql/geodetic_crs.sql8
-rw-r--r--data/sql/geodetic_datum.sql4
-rw-r--r--data/sql/grid_transformation.sql12
-rw-r--r--data/sql/helmert_transformation.sql38
-rw-r--r--data/sql/metadata.sql4
-rw-r--r--data/sql/proj_db_table_defs.sql5
-rw-r--r--data/sql/projected_crs.sql4
-rw-r--r--data/sql/scope.sql4
-rw-r--r--data/sql/supersession.sql4
-rw-r--r--data/sql/vertical_crs.sql6
-rw-r--r--data/sql/vertical_datum.sql6
-rw-r--r--docs/source/community/code_contributions.rst20
-rwxr-xr-xscripts/build_db.py3
-rw-r--r--src/geodesic.c8
-rw-r--r--src/iso19111/crs.cpp1
-rw-r--r--src/iso19111/factory.cpp2
-rw-r--r--src/iso19111/io.cpp5
-rw-r--r--src/iso19111/operation/parammappings.cpp4
-rw-r--r--src/iso19111/operation/singleoperation.cpp1
-rw-r--r--src/iso19111/operation/transformation.cpp1
-rw-r--r--src/iso19111/util.cpp2
-rw-r--r--src/networkfilemanager.cpp2
-rw-r--r--src/proj_constants.h3
-rw-r--r--test/unit/test_c_api.cpp34
34 files changed, 191 insertions, 94 deletions
diff --git a/.github/workflows/clang_static_analyzer.yml b/.github/workflows/clang_static_analyzer.yml
index 9751fece..10d9c3d8 100644
--- a/.github/workflows/clang_static_analyzer.yml
+++ b/.github/workflows/clang_static_analyzer.yml
@@ -1,4 +1,4 @@
-name: CLang Static Analyzer
+name: Clang Static Analyzer
on: [push, pull_request]
diff --git a/.github/workflows/clang_static_analyzer/start.sh b/.github/workflows/clang_static_analyzer/start.sh
index 515e4d4a..e75c9b18 100755
--- a/.github/workflows/clang_static_analyzer/start.sh
+++ b/.github/workflows/clang_static_analyzer/start.sh
@@ -5,25 +5,25 @@ set -e
sudo apt update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends \
- autoconf automake libtool g++ make sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev jq
+ g++ cmake make sqlite3 libsqlite3-dev libtiff-dev libcurl4-openssl-dev jq
CLANG_LLVM=clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04
wget -nv https://releases.llvm.org/9.0.0/$CLANG_LLVM.tar.xz
tar xJf $CLANG_LLVM.tar.xz
mv $CLANG_LLVM clang+llvm-9
-# prepare build files
-./autogen.sh
-
NPROC=$(nproc)
echo "NPROC=${NPROC}"
export MAKEFLAGS="-j ${NPROC}"
export PATH=$PWD/clang+llvm-9/bin:$PATH
-CXXFLAGS="-std=c++11" scan-build -o scanbuildoutput -plist -v ./configure
-rm -rf scanbuildoutput
-TOPDIR=$PWD
-scan-build -o $TOPDIR/scanbuildoutput -sarif -v -enable-checker alpha.unix.cstring.OutOfBounds,alpha.unix.cstring.BufferOverlap,optin.cplusplus.VirtualCall,optin.cplusplus.UninitializedObject make
+
+mkdir csa_build
+cd csa_build
+
+scan-build -o scanbuildoutput -plist -v cmake ..
+
+scan-build -o scanbuildoutput -sarif -v -enable-checker alpha.unix.cstring.OutOfBounds,alpha.unix.cstring.BufferOverlap,optin.cplusplus.VirtualCall,optin.cplusplus.UninitializedObject make
rm -f filtered_scanbuild.txt
files=$(find scanbuildoutput -name "*.sarif")
@@ -35,6 +35,7 @@ for f in $files; do
echo ""
cat tmp.txt >> filtered_scanbuild.txt
fi
+ rm -f tmp.txt
done
if [ -s filtered_scanbuild.txt ]; then
echo ""
diff --git a/Doxyfile b/Doxyfile
index e5ab6ee6..7f4d3ec6 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -2108,15 +2108,6 @@ EXTERNAL_PAGES = YES
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS = YES
-
# You can define message sequence charts within doxygen comments using the \msc
# command. Doxygen will then run the mscgen tool (see:
# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
diff --git a/data/sql/alias_name.sql b/data/sql/alias_name.sql
index 6931bf53..eb33f446 100644
--- a/data/sql/alias_name.sql
+++ b/data/sql/alias_name.sql
@@ -648,6 +648,12 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1197','NAD83(CSRS) 2010
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('vertical_datum','EPSG','5191','SHOM 1953','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','Luxembourg 1930','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','NTL','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','Nouvelle Triangulation du Luxembourg','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','Nivellement General du Luxembourg','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1316','GNTRANS2003','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');
@@ -1167,7 +1173,7 @@ INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4178','42/83','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31466','DHDN / Gauss-Kruger zone 2','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2166','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2167','Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4','EPSG');
-INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4181','LUREF','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4181','NTL (1930)','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6791','NAD83(2011) / OCRS_BKF (ft)','EPSG');
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','8233','NAD83(CSRS98)','EPSG');
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8881','Wiener Null','EPSG');
@@ -1178,7 +1184,7 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6803','NAD83(2011) / OCR
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31275','HDKS zone 5','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31276','HDKS zone 6','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','31275','D48 zone 5','EPSG');
-INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2169','LUREF / Gauss','EPSG');
+INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2169','Luxembourg 1930 / Gauss','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3396','DHDN / 3GK zone 3','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3397','DHDN / 3GK zone 4','EPSG');
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3398','DHDN / Gauss-Kruger zone 4','EPSG');
@@ -7454,6 +7460,7 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9869','ETRS89 / MHR21 Sn
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('vertical_crs','EPSG','5774','NG-L 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');
@@ -7483,3 +7490,21 @@ 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');
+INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5793','SHOM 1953 height','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4181','Luxembourg 1930','EPSG');
+INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2169','LUREF / Gauss Luxembourg','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9923','GNTRANS2003 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9932','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + GNTRANS2016 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9933','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + GNTRANS2016 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9934','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + GNTRANS2016 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9935','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + GNTRANS2016 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9928','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + GNTRANS2003 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9929','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + GNTRANS2003 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9930','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + GNTRANS2003 height','EPSG');
+INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9931','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + GNTRANS2003 height','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5681','DB_REF2003','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5681','DB_REF2016','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5830','DB_REF2003','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5830','DB_REF2016','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5828','DB_REF2003','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','5828','DB_REF2016','EPSG');
diff --git a/data/sql/axis.sql b/data/sql/axis.sql
index 3e359150..c819cf26 100644
--- a/data/sql/axis.sql
+++ b/data/sql/axis.sql
@@ -45,6 +45,9 @@ INSERT INTO "axis" VALUES('EPSG','1526','Easting','E','North along 90°W','EPSG'
INSERT INTO "axis" VALUES('EPSG','32864','Starboard','x','starboard','EPSG','1045',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','32865','Forward','y','forward','EPSG','1045',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','32866','Platform Down','z','down','EPSG','1045',3,'EPSG','9001');
+INSERT INTO "axis" VALUES('EPSG','32928','Northing','X','north','EPSG','1046',1,'EPSG','9001');
+INSERT INTO "axis" VALUES('EPSG','32929','Easting','Y','east','EPSG','1046',2,'EPSG','9001');
+INSERT INTO "axis" VALUES('EPSG','32930','Ellipsoidal height','h','up','EPSG','1046',3,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1042','Local northing','n','north','EPSG','1047',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1043','Local easting','e','east','EPSG','1047',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','1049','Local northing','n','north','EPSG','1048',1,'EPSG','9002');
@@ -172,8 +175,6 @@ INSERT INTO "axis" VALUES('EPSG','63','Geodetic latitude','Lat','north','EPSG','
INSERT INTO "axis" VALUES('EPSG','64','Geodetic longitude','Long','east','EPSG','6405',2,'EPSG','9102');
INSERT INTO "axis" VALUES('EPSG','65','Geodetic latitude','Lat','north','EPSG','6406',1,'EPSG','9116');
INSERT INTO "axis" VALUES('EPSG','66','Geodetic longitude','Long','east','EPSG','6406',2,'EPSG','9116');
-INSERT INTO "axis" VALUES('EPSG','106','Geodetic latitude','Lat','north','EPSG','6422',1,'EPSG','9122');
-INSERT INTO "axis" VALUES('EPSG','107','Geodetic longitude','Lon','east','EPSG','6422',2,'EPSG','9122');
INSERT INTO "axis" VALUES('EPSG','115','Geocentric X','X','geocentricX','EPSG','6500',1,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','116','Geocentric Y','Y','geocentricY','EPSG','6500',2,'EPSG','9001');
INSERT INTO "axis" VALUES('EPSG','117','Geocentric Z','Z','geocentricZ','EPSG','6500',3,'EPSG','9001');
@@ -257,6 +258,8 @@ INSERT INTO "axis" VALUES('EPSG','102','Ellipsoidal height','h','up','EPSG','642
INSERT INTO "axis" VALUES('EPSG','103','Geodetic latitude','Lat','north','EPSG','6421',1,'EPSG','9105');
INSERT INTO "axis" VALUES('EPSG','104','Geodetic longitude','Lon','east','EPSG','6421',2,'EPSG','9105');
INSERT INTO "axis" VALUES('EPSG','105','Ellipsoidal height','h','up','EPSG','6421',3,'EPSG','9001');
+INSERT INTO "axis" VALUES('EPSG','106','Geodetic latitude','Lat','north','EPSG','6422',1,'EPSG','9122');
+INSERT INTO "axis" VALUES('EPSG','107','Geodetic longitude','Lon','east','EPSG','6422',2,'EPSG','9122');
INSERT INTO "axis" VALUES('EPSG','108','Geodetic latitude','Lat','north','EPSG','6423',1,'EPSG','9122');
INSERT INTO "axis" VALUES('EPSG','109','Geodetic longitude','Lon','east','EPSG','6423',2,'EPSG','9122');
INSERT INTO "axis" VALUES('EPSG','110','Ellipsoidal height','h','up','EPSG','6423',3,'EPSG','9001');
diff --git a/data/sql/compound_crs.sql b/data/sql/compound_crs.sql
index 972dfdba..9c6faf85 100644
--- a/data/sql/compound_crs.sql
+++ b/data/sql/compound_crs.sql
@@ -40,13 +40,13 @@ INSERT INTO "compound_crs" VALUES('EPSG','5707','NTF (Paris) / Lambert zone I +
INSERT INTO "usage" VALUES('EPSG','4150','compound_crs','EPSG','5707','EPSG','1731','EPSG','1142');
INSERT INTO "compound_crs" VALUES('EPSG','5708','NTF (Paris) / Lambert zone IV + NGF-IGN78 height',NULL,'EPSG','27574','EPSG','5721',0);
INSERT INTO "usage" VALUES('EPSG','4151','compound_crs','EPSG','5708','EPSG','1327','EPSG','1142');
-INSERT INTO "compound_crs" VALUES('EPSG','5832','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + DHHN92 height',NULL,'EPSG','5682','EPSG','5783',0);
+INSERT INTO "compound_crs" VALUES('EPSG','5832','DB_REF / 3-degree Gauss-Kruger zone 2 (E-N) + DHHN92 height',NULL,'EPSG','5682','EPSG','5783',1);
INSERT INTO "usage" VALUES('EPSG','4270','compound_crs','EPSG','5832','EPSG','1624','EPSG','1141');
-INSERT INTO "compound_crs" VALUES('EPSG','5833','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + DHHN92 height',NULL,'EPSG','5683','EPSG','5783',0);
+INSERT INTO "compound_crs" VALUES('EPSG','5833','DB_REF / 3-degree Gauss-Kruger zone 3 (E-N) + DHHN92 height',NULL,'EPSG','5683','EPSG','5783',1);
INSERT INTO "usage" VALUES('EPSG','4271','compound_crs','EPSG','5833','EPSG','3993','EPSG','1141');
-INSERT INTO "compound_crs" VALUES('EPSG','5834','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + DHHN92 height',NULL,'EPSG','5684','EPSG','5783',0);
+INSERT INTO "compound_crs" VALUES('EPSG','5834','DB_REF / 3-degree Gauss-Kruger zone 4 (E-N) + DHHN92 height',NULL,'EPSG','5684','EPSG','5783',1);
INSERT INTO "usage" VALUES('EPSG','4272','compound_crs','EPSG','5834','EPSG','3996','EPSG','1141');
-INSERT INTO "compound_crs" VALUES('EPSG','5835','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + DHHN92 height',NULL,'EPSG','5685','EPSG','5783',0);
+INSERT INTO "compound_crs" VALUES('EPSG','5835','DB_REF / 3-degree Gauss-Kruger zone 5 (E-N) + DHHN92 height',NULL,'EPSG','5685','EPSG','5783',1);
INSERT INTO "usage" VALUES('EPSG','4273','compound_crs','EPSG','5835','EPSG','3998','EPSG','1141');
INSERT INTO "compound_crs" VALUES('EPSG','5845','SWEREF99 TM + RH2000 height',NULL,'EPSG','3006','EPSG','5613',0);
INSERT INTO "usage" VALUES('EPSG','4280','compound_crs','EPSG','5845','EPSG','3313','EPSG','1142');
@@ -724,3 +724,23 @@ INSERT INTO "compound_crs" VALUES('EPSG','9881','MOLDOR11 Grid + ODN height',NUL
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');
+INSERT INTO "compound_crs" VALUES('EPSG','9897','LUREF / Luxembourg TM + NG95 height',NULL,'EPSG','2169','EPSG','5774',0);
+INSERT INTO "usage" VALUES('EPSG','17304','compound_crs','EPSG','9897','EPSG','1146','EPSG','1029');
+INSERT INTO "compound_crs" VALUES('EPSG','9924','ETRS89 + DHHN2016 height',NULL,'EPSG','4258','EPSG','7837',0);
+INSERT INTO "usage" VALUES('EPSG','17168','compound_crs','EPSG','9924','EPSG','3339','EPSG','1026');
+INSERT INTO "compound_crs" VALUES('EPSG','9928','DB_REF2003 zone 2',NULL,'EPSG','5682','EPSG','9923',0);
+INSERT INTO "usage" VALUES('EPSG','17297','compound_crs','EPSG','9928','EPSG','1624','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9929','DB_REF2003 zone 3',NULL,'EPSG','5683','EPSG','9923',0);
+INSERT INTO "usage" VALUES('EPSG','17298','compound_crs','EPSG','9929','EPSG','3993','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9930','DB_REF2003 zone 4',NULL,'EPSG','5684','EPSG','9923',0);
+INSERT INTO "usage" VALUES('EPSG','17299','compound_crs','EPSG','9930','EPSG','3996','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9931','DB_REF2003 zone 5',NULL,'EPSG','5685','EPSG','9923',0);
+INSERT INTO "usage" VALUES('EPSG','17300','compound_crs','EPSG','9931','EPSG','3998','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9932','DB_REF2016 zone 2',NULL,'EPSG','5682','EPSG','9927',0);
+INSERT INTO "usage" VALUES('EPSG','17293','compound_crs','EPSG','9932','EPSG','1624','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9933','DB_REF2016 zone 3',NULL,'EPSG','5683','EPSG','9927',0);
+INSERT INTO "usage" VALUES('EPSG','17294','compound_crs','EPSG','9933','EPSG','3993','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9934','DB_REF2016 zone 4',NULL,'EPSG','5684','EPSG','9927',0);
+INSERT INTO "usage" VALUES('EPSG','17295','compound_crs','EPSG','9934','EPSG','3996','EPSG','1141');
+INSERT INTO "compound_crs" VALUES('EPSG','9935','DB_REF2016 zone 5',NULL,'EPSG','5685','EPSG','9927',0);
+INSERT INTO "usage" VALUES('EPSG','17296','compound_crs','EPSG','9935','EPSG','3998','EPSG','1141');
diff --git a/data/sql/conversion.sql b/data/sql/conversion.sql
index 0c2be6f5..b5f12892 100644
--- a/data/sql/conversion.sql
+++ b/data/sql/conversion.sql
@@ -1808,6 +1808,8 @@ INSERT INTO "conversion" VALUES('EPSG','9873','Papua New Guinea Map Grid 1994 zo
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','9894','Luxembourg TM (3D)','','EPSG','1111','Transverse Mercator 3D','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+INSERT INTO "usage" VALUES('EPSG','17109','conversion','EPSG','9894','EPSG','1146','EPSG','1142');
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);
@@ -5104,7 +5106,7 @@ INSERT INTO "conversion" VALUES('EPSG','19964','New War Office Sierra Leone Grid
INSERT INTO "usage" VALUES('EPSG','13042','conversion','EPSG','19964','EPSG','1342','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','19965','US National Atlas Equal Area','','EPSG','9821','Lambert Azimuthal Equal Area (Spherical)','EPSG','8828','Spherical latitude of origin',45.0,'EPSG','9102','EPSG','8829','Spherical longitude of origin',-100.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1);
INSERT INTO "usage" VALUES('EPSG','13043','conversion','EPSG','19965','EPSG','1245','EPSG','1162');
-INSERT INTO "conversion" VALUES('EPSG','19966','Luxembourg Gauss','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+INSERT INTO "conversion" VALUES('EPSG','19966','Luxembourg TM','Name changed as part of redefinition of system in 2020.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',49.5,'EPSG','9110','EPSG','8802','Longitude of natural origin',6.1,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',80000.0,'EPSG','9001','EPSG','8807','False northing',100000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13044','conversion','EPSG','19966','EPSG','1146','EPSG','1142');
INSERT INTO "conversion" VALUES('EPSG','19967','Slovenia Grid','Replaced by Slovene National Grid (code 19845) soon after Slovenian independence.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',15.0,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.9999,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13045','conversion','EPSG','19967','EPSG','1212','EPSG','1142');
diff --git a/data/sql/conversion_triggers.sql b/data/sql/conversion_triggers.sql
index a14341f8..a7ba8b85 100644
--- a/data/sql/conversion_triggers.sql
+++ b/data/sql/conversion_triggers.sql
@@ -94,6 +94,9 @@ BEGIN
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Equal Earth')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1078' AND (NEW.method_name != 'Equal Earth' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8802' OR NEW.param1_name != 'Longitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8806' OR NEW.param2_name != 'False easting' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'length' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8807' OR NEW.param3_name != 'False northing' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name IS NOT NULL OR NEW.param4_code IS NOT NULL OR NEW.param4_name IS NOT NULL OR NEW.param4_value IS NOT NULL OR NEW.param4_uom_auth_name IS NOT NULL OR NEW.param4_uom_code IS NOT NULL OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
+ SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Transverse Mercator 3D')
+ WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '1111' AND (NEW.method_name != 'Transverse Mercator 3D' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8805' OR NEW.param3_name != 'Scale factor at natural origin' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'scale' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8806' OR NEW.param4_name != 'False easting' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name != 'EPSG' OR NEW.param5_code != '8807' OR NEW.param5_name != 'False northing' OR NEW.param5_value IS NULL OR NEW.param5_uom_auth_name IS NULL OR NEW.param5_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param5_uom_auth_name AND code = NEW.param5_uom_code) != 'length' OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
+
SELECT RAISE(ABORT, 'insert on conversion violates constraint: bad parameters for Modified Azimuthal Equidistant')
WHERE NEW.deprecated != 1 AND NEW.method_auth_name = 'EPSG' AND NEW.method_code = '9832' AND (NEW.method_name != 'Modified Azimuthal Equidistant' OR NEW.param1_auth_name != 'EPSG' OR NEW.param1_code != '8801' OR NEW.param1_name != 'Latitude of natural origin' OR NEW.param1_value IS NULL OR NEW.param1_uom_auth_name IS NULL OR NEW.param1_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param1_uom_auth_name AND code = NEW.param1_uom_code) != 'angle' OR NEW.param2_auth_name != 'EPSG' OR NEW.param2_code != '8802' OR NEW.param2_name != 'Longitude of natural origin' OR NEW.param2_value IS NULL OR NEW.param2_uom_auth_name IS NULL OR NEW.param2_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param2_uom_auth_name AND code = NEW.param2_uom_code) != 'angle' OR NEW.param3_auth_name != 'EPSG' OR NEW.param3_code != '8806' OR NEW.param3_name != 'False easting' OR NEW.param3_value IS NULL OR NEW.param3_uom_auth_name IS NULL OR NEW.param3_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param3_uom_auth_name AND code = NEW.param3_uom_code) != 'length' OR NEW.param4_auth_name != 'EPSG' OR NEW.param4_code != '8807' OR NEW.param4_name != 'False northing' OR NEW.param4_value IS NULL OR NEW.param4_uom_auth_name IS NULL OR NEW.param4_uom_code IS NULL OR (SELECT type FROM unit_of_measure WHERE auth_name = NEW.param4_uom_auth_name AND code = NEW.param4_uom_code) != 'length' OR NEW.param5_auth_name IS NOT NULL OR NEW.param5_code IS NOT NULL OR NEW.param5_name IS NOT NULL OR NEW.param5_value IS NOT NULL OR NEW.param5_uom_auth_name IS NOT NULL OR NEW.param5_uom_code IS NOT NULL OR NEW.param6_auth_name IS NOT NULL OR NEW.param6_code IS NOT NULL OR NEW.param6_name IS NOT NULL OR NEW.param6_value IS NOT NULL OR NEW.param6_uom_auth_name IS NOT NULL OR NEW.param6_uom_code IS NOT NULL OR NEW.param7_auth_name IS NOT NULL OR NEW.param7_code IS NOT NULL OR NEW.param7_name IS NOT NULL OR NEW.param7_value IS NOT NULL OR NEW.param7_uom_auth_name IS NOT NULL OR NEW.param7_uom_code IS NOT NULL);
diff --git a/data/sql/coordinate_system.sql b/data/sql/coordinate_system.sql
index aa57cc3a..f4265346 100644
--- a/data/sql/coordinate_system.sql
+++ b/data/sql/coordinate_system.sql
@@ -22,6 +22,7 @@ INSERT INTO "coordinate_system" VALUES('EPSG','1042','Cartesian',3);
INSERT INTO "coordinate_system" VALUES('EPSG','1043','vertical',1);
INSERT INTO "coordinate_system" VALUES('EPSG','1044','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','1045','Cartesian',3);
+INSERT INTO "coordinate_system" VALUES('EPSG','1046','Cartesian',3);
INSERT INTO "coordinate_system" VALUES('EPSG','1047','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','1048','Cartesian',2);
INSERT INTO "coordinate_system" VALUES('EPSG','1049','vertical',1);
diff --git a/data/sql/deprecation.sql b/data/sql/deprecation.sql
index 8ce4321e..820f06db 100644
--- a/data/sql/deprecation.sql
+++ b/data/sql/deprecation.sql
@@ -464,3 +464,7 @@ INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3411','EPSG','3413','EP
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3412','EPSG','3976','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4088','EPSG','4087','EPSG');
INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7804','EPSG','9391','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5832','EPSG','9928','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5833','EPSG','9929','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5834','EPSG','9930','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','5835','EPSG','9931','EPSG');
diff --git a/data/sql/geodetic_crs.sql b/data/sql/geodetic_crs.sql
index 99698274..81c9ee1d 100644
--- a/data/sql/geodetic_crs.sql
+++ b/data/sql/geodetic_crs.sql
@@ -248,8 +248,6 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','4179','Pulkovo 1942(58)',NULL,'geograp
INSERT INTO "usage" VALUES('EPSG','3063','geodetic_crs','EPSG','4179','EPSG','3574','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','4180','EST97',NULL,'geographic 2D','EPSG','6422','EPSG','6180',NULL,0);
INSERT INTO "usage" VALUES('EPSG','3064','geodetic_crs','EPSG','4180','EPSG','1090','EPSG','1183');
-INSERT INTO "geodetic_crs" VALUES('EPSG','4181','Luxembourg 1930',NULL,'geographic 2D','EPSG','6422','EPSG','6181',NULL,0);
-INSERT INTO "usage" VALUES('EPSG','3065','geodetic_crs','EPSG','4181','EPSG','1146','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','4182','Azores Occidental 1939',NULL,'geographic 2D','EPSG','6422','EPSG','6182',NULL,0);
INSERT INTO "usage" VALUES('EPSG','3066','geodetic_crs','EPSG','4182','EPSG','1344','EPSG','1027');
INSERT INTO "geodetic_crs" VALUES('EPSG','4183','Azores Central 1948',NULL,'geographic 2D','EPSG','6422','EPSG','6183',NULL,0);
@@ -2162,3 +2160,9 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','9866','MRH21-IRF',NULL,'geographic 2D'
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');
+INSERT INTO "geodetic_crs" VALUES('EPSG','9892','LUREF',NULL,'geocentric','EPSG','6500','EPSG','6181',NULL,0);
+INSERT INTO "usage" VALUES('EPSG','17243','geodetic_crs','EPSG','9892','EPSG','1146','EPSG','1027');
+INSERT INTO "geodetic_crs" VALUES('EPSG','4181','LUREF',NULL,'geographic 2D','EPSG','6422','EPSG','6181',NULL,0);
+INSERT INTO "usage" VALUES('EPSG','3065','geodetic_crs','EPSG','4181','EPSG','1146','EPSG','1027');
+INSERT INTO "geodetic_crs" VALUES('EPSG','9893','LUREF',NULL,'geographic 3D','EPSG','6423','EPSG','6181',NULL,0);
+INSERT INTO "usage" VALUES('EPSG','17309','geodetic_crs','EPSG','9893','EPSG','1146','EPSG','1027');
diff --git a/data/sql/geodetic_datum.sql b/data/sql/geodetic_datum.sql
index 816d21b0..dc661000 100644
--- a/data/sql/geodetic_datum.sql
+++ b/data/sql/geodetic_datum.sql
@@ -90,7 +90,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1077','Ukraine 2000',NULL,'EPSG','70
INSERT INTO "usage" VALUES('EPSG','13129','geodetic_datum','EPSG','1077','EPSG','1242','EPSG','1027');
INSERT INTO "geodetic_datum" VALUES('EPSG','1078','Fehmarnbelt Datum 2010',NULL,'EPSG','7019','EPSG','8901','2010-02-21',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13130','geodetic_datum','EPSG','1078','EPSG','3889','EPSG','1139');
-INSERT INTO "geodetic_datum" VALUES('EPSG','1081','Deutsche Bahn Reference System',NULL,'EPSG','7004','EPSG','8901',NULL,NULL,NULL,NULL,0);
+INSERT INTO "geodetic_datum" VALUES('EPSG','1081','Deutsche Bahn Reference System',NULL,'EPSG','7004','EPSG','8901','2001-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13133','geodetic_datum','EPSG','1081','EPSG','3339','EPSG','1141');
INSERT INTO "geodetic_datum" VALUES('EPSG','1095','Tonga Geodetic Datum 2005',NULL,'EPSG','7019','EPSG','8901','2005-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13147','geodetic_datum','EPSG','1095','EPSG','1234','EPSG','1181');
@@ -552,7 +552,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','6179','Pulkovo 1942(58)',NULL,'EPSG'
INSERT INTO "usage" VALUES('EPSG','13523','geodetic_datum','EPSG','6179','EPSG','3574','EPSG','1181');
INSERT INTO "geodetic_datum" VALUES('EPSG','6180','Estonia 1997',NULL,'EPSG','7019','EPSG','8901','1997-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13524','geodetic_datum','EPSG','6180','EPSG','1090','EPSG','1181');
-INSERT INTO "geodetic_datum" VALUES('EPSG','6181','Luxembourg 1930',NULL,'EPSG','7022','EPSG','8901','1930-01-01',NULL,NULL,NULL,0);
+INSERT INTO "geodetic_datum" VALUES('EPSG','6181','Luxembourg Reference Frame',NULL,'EPSG','7022','EPSG','8901','1930-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13525','geodetic_datum','EPSG','6181','EPSG','1146','EPSG','1181');
INSERT INTO "geodetic_datum" VALUES('EPSG','6182','Azores Occidental Islands 1939',NULL,'EPSG','7022','EPSG','8901','1939-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13526','geodetic_datum','EPSG','6182','EPSG','1344','EPSG','1153');
diff --git a/data/sql/grid_transformation.sql b/data/sql/grid_transformation.sql
index ed3fcd8c..809131a7 100644
--- a/data/sql/grid_transformation.sql
+++ b/data/sql/grid_transformation.sql
@@ -395,7 +395,7 @@ INSERT INTO "usage" VALUES('EPSG','9733','grid_transformation','EPSG','6648','EP
INSERT INTO "grid_transformation" VALUES('EPSG','6712','Tokyo to JGD2000 (2)','NTv2 grid derived by ESRI from that supplied by GSI in application tky2jgd. After Tohoku earthquake of 2011 accuracy in northern Honshu reduced to 1-5m and in this area replaced by Tokyo to JGD2011 (tfm code 6714).','EPSG','9615','NTv2','EPSG','4301','EPSG','4612',0.2,'EPSG','8656','Latitude and longitude difference file','tky2jgd.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0);
INSERT INTO "usage" VALUES('EPSG','9740','grid_transformation','EPSG','6712','EPSG','3957','EPSG','1142');
INSERT INTO "grid_transformation" VALUES('EPSG','6713','JGD2000 to JGD2011 (1)','NTv2 grid derived by ESRI from that supplied by GSI in application patchjgd.','EPSG','9615','NTv2','EPSG','4612','EPSG','6668',0.2,'EPSG','8656','Latitude and longitude difference file','touhokutaiheiyouoki2011.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn N Honshu',0);
-INSERT INTO "usage" VALUES('EPSG','9741','grid_transformation','EPSG','6713','EPSG','4170','EPSG','1050');
+INSERT INTO "usage" VALUES('EPSG','9741','grid_transformation','EPSG','6713','EPSG','4170','EPSG','1280');
INSERT INTO "grid_transformation" VALUES('EPSG','6740','Tokyo to JGD2011 (2)','Parameter values from Tokyo to JGD2000 (2) (tfm code 6712) as in area of applicability JGD2011 = JGD2000. NTv2 grid derived by ESRI from that supplied by GSI in application tky2jgd. See Tokyo to JGD2011 (1) (tfm code 6714) for northern Honshu area.','EPSG','9615','NTv2','EPSG','4301','EPSG','6668',0.2,'EPSG','8656','Latitude and longitude difference file','tky2jgd.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn ex N Honshu',0);
INSERT INTO "usage" VALUES('EPSG','9756','grid_transformation','EPSG','6740','EPSG','4194','EPSG','1142');
INSERT INTO "grid_transformation" VALUES('EPSG','6946','TM75 to ETRS89 (3)','Approximate alternative to official OS polynomial method (tfm code 1041). May be taken as approximate transformation TM75 to WGS 84 - see code 6947.','EPSG','9615','NTv2','EPSG','4300','EPSG','4258',0.41,'EPSG','8656','Latitude and longitude difference file','tm75_etrs89.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSI-Ire NT',0);
@@ -694,7 +694,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9277','MGI to EVRF2000 Austria
INSERT INTO "usage" VALUES('EPSG','14254','grid_transformation','EPSG','9277','EPSG','1037','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','9278','ETRS89 to GHA height (1)','This transformation gives same result as concatenation of ETRS89 to EVRF2000 Austria height and EVRF2000 Austria height to GHA height transformations, CTs code 9276 and 9275. Accuracy 5cm (1 sigma). The transformation is implemented in BEV-Transformator.','EPSG','1081','Geographic3D to GravityRelatedHeight (BEV AT)','EPSG','4937','EPSG','5778',0.05,'EPSG','8666','Geoid (height correction) model file','GV_Hoehengrid_plus_Geoid_V3.csv',NULL,NULL,NULL,NULL,'EPSG','4258','BEV-Aut',1);
INSERT INTO "usage" VALUES('EPSG','13936','grid_transformation','EPSG','9278','EPSG','1037','EPSG','1133');
-INSERT INTO "grid_transformation" VALUES('EPSG','9280','ITRF2005 to SA LLD height (1)','Hybrid geoid referenced to ITRF2005@2010.02. Accuracy 7cm at 1 sigma. For reversible alternative to this transformation see ITRF2005 to ITRF2005 + SA LLD height (1) (code 9643).','EPSG','1082','Geographic3D to GravityRelatedHeight (SA 2010)','EPSG','7910','EPSG','9279',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,NULL,NULL,'NGI-Zaf',0);
+INSERT INTO "grid_transformation" VALUES('EPSG','9280','ITRF2005 to SA LLD height (1)','Hybrid geoid referenced to ITRF2005@2010.02. Accuracy 7cm at 1 sigma. For reversible alternative to this transformation see ITRF2005 to ITRF2005 + SA LLD height (1) (code 9643).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','7910','EPSG','9279',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,NULL,NULL,'NGI-Zaf',0);
INSERT INTO "usage" VALUES('EPSG','14524','grid_transformation','EPSG','9280','EPSG','3309','EPSG','1133');
INSERT INTO "grid_transformation" VALUES('EPSG','9282','Amersfoort to ETRS89 (9)','Replaces Amersfoort to ETRS89 (7) (tfm code 7000). Horizontal component of official transformation RDNAPTRANS(TM)2018.','EPSG','9615','NTv2','EPSG','4289','EPSG','4258',0.001,'EPSG','8656','Latitude and longitude difference file','rdtrans2018.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGI-Nld 2018',0);
INSERT INTO "usage" VALUES('EPSG','13939','grid_transformation','EPSG','9282','EPSG','1275','EPSG','1051');
@@ -1016,7 +1016,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9641','RGSPM06 to RGSPM06 + Dan
INSERT INTO "usage" VALUES('EPSG','15080','grid_transformation','EPSG','9641','EPSG','3299','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9642','RRAF 1991 to RRAF 1991 + IGN 2008 LD height (1)','Reversible alternative to RRAF 1991 to IGN 2008 LD height (1) (code 9132).','EPSG','1095','Geog3D to Geog2D+GravityRelatedHeight (IGN2009)','EPSG','4557','EPSG','9542',0.2,'EPSG','8666','Geoid (height correction) model file','RALDW842016.mnt',NULL,NULL,NULL,NULL,'EPSG','4558','IGN Glp Des',0);
INSERT INTO "usage" VALUES('EPSG','14502','grid_transformation','EPSG','9642','EPSG','2893','EPSG','1270');
-INSERT INTO "grid_transformation" VALUES('EPSG','9643','ITRF2005 to ITRF2005 + SA LLD height (1)','Reversible alternative to ITRF2005 to SA LLD height (1) (code 9280).','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (SA 2010)','EPSG','7910','EPSG','9543',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,'EPSG','8998','NGI-Zaf',0);
+INSERT INTO "grid_transformation" VALUES('EPSG','9643','ITRF2005 to ITRF2005 + SA LLD height (1)','Reversible alternative to ITRF2005 to SA LLD height (1) (code 9280).','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','7910','EPSG','9543',0.07,'EPSG','8666','Geoid (height correction) model file','SAGEOID2010.dat',NULL,NULL,NULL,NULL,'EPSG','8998','NGI-Zaf',0);
INSERT INTO "usage" VALUES('EPSG','14523','grid_transformation','EPSG','9643','EPSG','3309','EPSG','1270');
INSERT INTO "grid_transformation" VALUES('EPSG','9644','NAD83(CSRS)v6 to NAD83(CSRS)v6 + CGVD2013(CGG2013a) height (1)','Reversible alternative to NAD83(CSRS)v6 to CGVD2013(CGG2013a) height (1) (code 9247).','EPSG','1090','Geog3D to Geog2D+GravityRelatedHeight (CGG 2013)','EPSG','8251','EPSG','9544',0.03,'EPSG','8666','Geoid (height correction) model file','CGG2013n83a.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NRC Can CGG2013a',0);
INSERT INTO "usage" VALUES('EPSG','15099','grid_transformation','EPSG','9644','EPSG','1061','EPSG','1270');
@@ -1130,10 +1130,16 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9886','NAD27 to NAD83(CSRS)v2 (
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','9896','JGD2000 to WGS 84 (2)','Parameter file from JGD2000 to JGD2011 (1) (code 6713) assuming that JGD2011 is equivalent to WGS 84 within the accuracy of this CT. Use for area affected by the 2011 Tohoku earthquake; for areas outside this extent use JGD2000 to WGS 84 (1) (code 1826).','EPSG','9615','NTv2','EPSG','4612','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','touhokutaiheiyouoki2011.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Jpn N Honshu',0);
+INSERT INTO "usage" VALUES('EPSG','17283','grid_transformation','EPSG','9896','EPSG','4170','EPSG','1252');
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','9925','ETRS89 to DHHN2016 height (1)','Accuracy approx. 1 cm in the lowlands, approx. 2 cm in the high mountains and 2 - 6 cm offshore. For reversible alternative to this transformation see ETRS89 to ETRS89 + DHHN2016 height (1) (code 9926).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','4937','EPSG','7837',0.02,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,NULL,NULL,'BKG-Deu 2016',0);
+INSERT INTO "usage" VALUES('EPSG','17171','grid_transformation','EPSG','9925','EPSG','3339','EPSG','1133');
+INSERT INTO "grid_transformation" VALUES('EPSG','9926','ETRS89 to ETRS89 + DHHN2016 height (1)','Reversible alternative to ETRS89 to DHHN2016 height (1) (code 9925). Accuracy approx. 1 cm in the lowlands, approx. 2 cm in the high mountains and 2 - 6 cm offshore.','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','4937','EPSG','9924',0.02,'EPSG','8666','Geoid (height correction) model file','GCG2016.txt',NULL,NULL,NULL,NULL,'EPSG','4258','BKG-Deu 2016',0);
+INSERT INTO "usage" VALUES('EPSG','17170','grid_transformation','EPSG','9926','EPSG','3339','EPSG','1270');
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);
diff --git a/data/sql/helmert_transformation.sql b/data/sql/helmert_transformation.sql
index f070f31c..4eb62af8 100644
--- a/data/sql/helmert_transformation.sql
+++ b/data/sql/helmert_transformation.sql
@@ -6,7 +6,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1055','Ain el Abd to WGS 84
INSERT INTO "usage" VALUES('EPSG','7976','helmert_transformation','EPSG','1055','EPSG','3267','EPSG','1041');
INSERT INTO "helmert_transformation" VALUES('EPSG','1056','Ain el Abd to WGS 84 (4)','Derivation is more precise, but no evidence that accuracy is better than Ain el Abd to WGS 84 (3). OGP recommends using Ain el Abd to WGS 84 (3).','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-85.645,-273.077,-79.708,'EPSG','9001',-2.289,1.421,-2.532,'EPSG','9104',3.194,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt',0);
INSERT INTO "usage" VALUES('EPSG','7977','helmert_transformation','EPSG','1056','EPSG','3267','EPSG','1041');
-INSERT INTO "helmert_transformation" VALUES('EPSG','1057','Ain el Abd to WGS 84 (5)','.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-202.234,-168.351,-63.51,'EPSG','9001',-3.545,-0.659,1.945,'EPSG','9104',2.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt N',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','1057','Ain el Abd to WGS 84 (5)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-202.234,-168.351,-63.51,'EPSG','9001',-3.545,-0.659,1.945,'EPSG','9104',2.1,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt N',0);
INSERT INTO "usage" VALUES('EPSG','7978','helmert_transformation','EPSG','1057','EPSG','2956','EPSG','1041');
INSERT INTO "helmert_transformation" VALUES('EPSG','1058','Ain el Abd to WGS 84 (6)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4204','EPSG','4326',1.0,-18.944,-379.364,-24.063,'EPSG','9001',-0.04,0.764,-6.431,'EPSG','9104',3.657,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Par-Kwt S',0);
INSERT INTO "usage" VALUES('EPSG','7979','helmert_transformation','EPSG','1058','EPSG','2957','EPSG','1041');
@@ -38,9 +38,9 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1074','Palestine 1923 to WGS
INSERT INTO "usage" VALUES('EPSG','7995','helmert_transformation','EPSG','1074','EPSG','2603','EPSG','1136');
INSERT INTO "helmert_transformation" VALUES('EPSG','1075','ED50 to WGS 84 (38)','Derived in 1987 by Geodetic for TPAO. Used on BP 1991/92 2D seismic surveys in central and eastern Turkish sector of Black Sea. In Turkey, replaced by tfm code 1784. Also adopted for use offshore Israel.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4230','EPSG','4326',10.0,-89.05,-87.03,-124.56,'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,'TPAO-Tur',0);
INSERT INTO "usage" VALUES('EPSG','7996','helmert_transformation','EPSG','1075','EPSG','2896','EPSG','1136');
-INSERT INTO "helmert_transformation" VALUES('EPSG','1078','Luxembourg 1930 to ETRS89 (2)','May be taken as approximate transformation Luxembourg 1930 to WGS 84 - see code 1079. Replaced by Luxembourg 1930 to ETRS89 (3) (code 5483).','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.1,-265.983,76.918,20.182,'EPSG','9001',0.4099,2.9332,-2.6881,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4098647.674,442843.139,4851251.093,'EPSG','9001','ACT-Lux 0.1m',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','1078','LUREF to ETRS89 (2)','LUREF 1994 parameters. Replaced by LUREF 2006 parameters, see transformation LUREF to ETRS89 (4) (code 5483). May be taken as approximate transformation LUREF to WGS 84 - see CT code 1079.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.1,-265.983,76.918,20.182,'EPSG','9001',0.4099,2.9332,-2.6881,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4098647.674,442843.139,4851251.093,'EPSG','9001','ACT-Lux 0.1m',0);
INSERT INTO "usage" VALUES('EPSG','7999','helmert_transformation','EPSG','1078','EPSG','1146','EPSG','1031');
-INSERT INTO "helmert_transformation" VALUES('EPSG','1079','Luxembourg 1930 to WGS 84 (2)','Parameter values from Luxembourg 1930 to ETRS89 (2) (code 1078). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4326',0.5,-265.983,76.918,20.182,'EPSG','9001',0.4099,2.9332,-2.6881,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4098647.674,442843.139,4851251.093,'EPSG','9001','EPSG-Lux 0.5m',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','1079','LUREF to WGS 84 (2)','Parameter values from LUREF to ETRS89 (2) (code 1078). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4326',1.0,-265.983,76.918,20.182,'EPSG','9001',0.4099,2.9332,-2.6881,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4098647.674,442843.139,4851251.093,'EPSG','9001','EPSG-Lux 1994',0);
INSERT INTO "usage" VALUES('EPSG','8000','helmert_transformation','EPSG','1079','EPSG','1146','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','1080','CI1971 to WGS 84 (1)','Derived at 4 stations. Accuracy 15m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4672','EPSG','4326',26.0,175.0,-38.0,113.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Nzl CI',0);
INSERT INTO "usage" VALUES('EPSG','8001','helmert_transformation','EPSG','1080','EPSG','2889','EPSG','1160');
@@ -758,9 +758,9 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1640','TM65 to ETRS89 (1)','
INSERT INTO "usage" VALUES('EPSG','8561','helmert_transformation','EPSG','1640','EPSG','1305','EPSG','1041');
INSERT INTO "helmert_transformation" VALUES('EPSG','1641','TM65 to WGS 84 (2)','Parameter values from TM75 to ETRS89 (2) (code 1953). Assumes each pair of (i) TM65 and TM75, and (ii) ETRS89 and WGS 84, can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4299','EPSG','4326',1.0,482.5,-130.6,564.6,'EPSG','9001',-1.042,-0.214,-0.631,'EPSG','9104',8.15,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Ire',0);
INSERT INTO "usage" VALUES('EPSG','8562','helmert_transformation','EPSG','1641','EPSG','1305','EPSG','1252');
-INSERT INTO "helmert_transformation" VALUES('EPSG','1642','Luxembourg 1930 to ETRS89 (1)','May be taken as approximate transformation Luxembourg 1930 to WGS 84 - see code 1643. Replaced by Luxembourg 1930 to ETRS89 (3) (code 5485).','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4181','EPSG','4258',1.0,-193.0,13.7,-39.3,'EPSG','9001',-0.41,-2.933,2.688,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','1642','LUREF to ETRS89 (1)','Derived by EuroGeographics from ACT transformation parameters (see CT code 1078). Not published by ACT. Replaced by LUREF to ETRS89 (3) (CT code 5485). May be taken as approximate transformation LUREF to WGS 84 - see CT code 1643.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4181','EPSG','4258',1.0,-193.0,13.7,-39.3,'EPSG','9001',-0.41,-2.933,2.688,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux',0);
INSERT INTO "usage" VALUES('EPSG','8563','helmert_transformation','EPSG','1642','EPSG','1146','EPSG','1041');
-INSERT INTO "helmert_transformation" VALUES('EPSG','1643','Luxembourg 1930 to WGS 84 (1)','Parameter values from Luxembourg 1930 to ETRS89 (1) (code 1642). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4181','EPSG','4326',1.0,-193.0,13.7,-39.3,'EPSG','9001',-0.41,-2.933,2.688,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Lux',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','1643','LUREF to WGS 84 (1)','Parameter values from LUREF to ETRS89 (1) (code 1642). Assumes ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4181','EPSG','4326',1.0,-193.0,13.7,-39.3,'EPSG','9001',-0.41,-2.933,2.688,'EPSG','9104',0.43,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Lux',0);
INSERT INTO "usage" VALUES('EPSG','8564','helmert_transformation','EPSG','1643','EPSG','1146','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','1644','Pulkovo 1942(58) to ETRS89 (1)','May be taken as approximate transformation Pulkovo 1942(58) to WGS 84 - see code 1645. Parameter values given to greater precision but to no better accuracy in GUGiK Technical Instruction G-2, Warsaw 2001.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4179','EPSG','4258',1.0,33.4,-146.6,-76.3,'EPSG','9001',-0.359,-0.053,0.844,'EPSG','9104',-0.84,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GUGK-Pol',0);
INSERT INTO "usage" VALUES('EPSG','8565','helmert_transformation','EPSG','1644','EPSG','3293','EPSG','1041');
@@ -971,8 +971,8 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','1824','Minna to WGS 84 (10)'
INSERT INTO "usage" VALUES('EPSG','8745','helmert_transformation','EPSG','1824','EPSG','3824','EPSG','1136');
INSERT INTO "helmert_transformation" VALUES('EPSG','1825','Hong Kong 1980 to WGS 84 (1)','Published 1st March 2002. Parameter values from Hong Kong 1980 to Hong Kong Geodetic CS (1) (code 8437) with change of rotation convention. Assumes Hong Kong Geodetic CS and WGS 84 are equivalent within the accuracy of the transformation.','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4611','EPSG','4326',1.0,-162.619,-276.959,-161.764,'EPSG','9001',0.067753,-2.243649,-1.158827,'EPSG','9104',-1.094246,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LSD-HKG 2002',0);
INSERT INTO "usage" VALUES('EPSG','8746','helmert_transformation','EPSG','1825','EPSG','1118','EPSG','1252');
-INSERT INTO "helmert_transformation" VALUES('EPSG','1826','JGD2000 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4612','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-Jpn',0);
-INSERT INTO "usage" VALUES('EPSG','8747','helmert_transformation','EPSG','1826','EPSG','1129','EPSG','1252');
+INSERT INTO "helmert_transformation" VALUES('EPSG','1826','JGD2000 to WGS 84 (1)','Excludes area affected by the 2011 Tohoku earthquake. For areas of northern Honshu affected by the earthquake see JGD2000 to WGS 84 (2) (code 9896).','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4612','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-Jpn',0);
+INSERT INTO "usage" VALUES('EPSG','8747','helmert_transformation','EPSG','1826','EPSG','4163','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','1828','Yoff to WGS 72 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4310','EPSG','4322',25.0,-37.0,157.0,85.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-SEN',0);
INSERT INTO "usage" VALUES('EPSG','8749','helmert_transformation','EPSG','1828','EPSG','1207','EPSG','1160');
INSERT INTO "helmert_transformation" VALUES('EPSG','1829','HD72 to ETRS89 (1)','Derived at 5 stations. OGP recommends corrected Hungarian standard MSZ 7222 (tfm code 1449) be used in preference to this transformation. May be taken as approximate transformation HD72 to WGS 84 - see code 1830.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4237','EPSG','4258',0.5,56.0,-75.77,-15.31,'EPSG','9001',0.37,0.2,0.21,'EPSG','9104',1.01,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'FOMI-Hun',0);
@@ -1555,13 +1555,13 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','5473','Ocotepeque 1935 to WG
INSERT INTO "usage" VALUES('EPSG','9427','helmert_transformation','EPSG','5473','EPSG','3232','EPSG','1153');
INSERT INTO "helmert_transformation" VALUES('EPSG','5474','Ocotepeque 1935 to NAD27 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5451','EPSG','4326',9.0,205.435,-29.099,292.202,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Cri',1);
INSERT INTO "usage" VALUES('EPSG','9428','helmert_transformation','EPSG','5474','EPSG','3876','EPSG','1153');
-INSERT INTO "helmert_transformation" VALUES('EPSG','5483','Luxembourg 1930 to ETRS89 (4)','Replaces transformation code 1078, this being derived through more observations. May be taken as approximate transformation Luxembourg 1930 to WGS 84 - see code 5484. For an equivalent transformation using the Coordinate Frame method see code 5485.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.1,-265.8867,76.9851,20.2667,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3943,440486.4235,4846923.4558,'EPSG','9001','ACT-Lux MB 2011',0);
-INSERT INTO "usage" VALUES('EPSG','9433','helmert_transformation','EPSG','5483','EPSG','1146','EPSG','1031');
-INSERT INTO "helmert_transformation" VALUES('EPSG','5484','Luxembourg 1930 to WGS 84 (4)','Parameter values from Luxembourg 1930 to ETRS89 (4) (code 5483) assuming ETRS89 and WGS 84 are coincident within the one metre level. Replaces tfm code 1079. For an equivalent transformation using the Coordinate Frame method see code 5486.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4326',1.0,-265.8867,76.9851,20.2667,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3943,440486.4235,4846923.4558,'EPSG','9001','OGP-Lux MB 2011',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','5483','LUREF to ETRS89 (4)','LUREF 2006 parameters. For an equivalent CT using the Coordinate Frame method see CT 5485. Defines LUREF between 2006 and 2014. Replaces LUREF 1994 parameters (CT 1078). May be taken as approximate transformation LUREF to WGS 84 - see CT code 5484.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.0,-265.8867,76.9851,20.2667,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3943,440486.4235,4846923.4558,'EPSG','9001','ACT-Lux MB 2011',0);
+INSERT INTO "usage" VALUES('EPSG','9433','helmert_transformation','EPSG','5483','EPSG','1146','EPSG','1281');
+INSERT INTO "helmert_transformation" VALUES('EPSG','5484','LUREF to WGS 84 (4)','Parameter values from LUREF to ETRS89 (4) (code 5483) assuming ETRS89 and WGS 84 are coincident within the one metre level. Replaces CT code 1079. For an equivalent transformation using the Coordinate Frame method see code 5486.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4326',1.0,-265.8867,76.9851,20.2667,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3943,440486.4235,4846923.4558,'EPSG','9001','OGP-Lux MB 2011',0);
INSERT INTO "usage" VALUES('EPSG','9434','helmert_transformation','EPSG','5484','EPSG','1146','EPSG','1252');
-INSERT INTO "helmert_transformation" VALUES('EPSG','5485','Luxembourg 1930 to ETRS89 (3)','Replaces transformation code 1642, this being derived through more observations. May be taken as approximate transformation Luxembourg 1930 to WGS 84 - see code 5486. For an equivalent transformation using the Molodensky-Badekas method see code 5483.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.1,-189.6806,18.3463,-42.7695,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2011',0);
-INSERT INTO "usage" VALUES('EPSG','9435','helmert_transformation','EPSG','5485','EPSG','1146','EPSG','1031');
-INSERT INTO "helmert_transformation" VALUES('EPSG','5486','Luxembourg 1930 to WGS 84 (3)','Parameter values from Luxembourg 1930 to ETRS89 (3) (code 5485) assuming ETRS89 and WGS 84 are coincident within the one metre level. Replaces tfm code 1643. For an equivalent transformation using the Molodensky-Badekas method see code 5484.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4326',1.0,-189.6806,18.3463,-42.7695,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Lux CF 2011',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','5485','LUREF to ETRS89 (3)','LUREF 2006 parameters. For an equivalent CT using the Molodensky-Badekas method see code 5483. Defines LUREF between 2006 and 2014. Replaces LUREF to ETRS89 (1) (CT 1642). May be taken as approximate transformation LUREF to WGS 84 - see CT code 5486.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.0,-189.6806,18.3463,-42.7695,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2011',0);
+INSERT INTO "usage" VALUES('EPSG','9435','helmert_transformation','EPSG','5485','EPSG','1146','EPSG','1281');
+INSERT INTO "helmert_transformation" VALUES('EPSG','5486','LUREF to WGS 84 (3)','Parameter values from LUREF to ETRS89 (3) (code 5485) assuming ETRS89 and WGS 84 are coincident within the one metre level. Replaces CT code 1643. For an equivalent transformation using the Molodensky-Badekas method see code 5484.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4326',1.0,-189.6806,18.3463,-42.7695,'EPSG','9001',0.33746,3.09264,-2.53861,'EPSG','9104',0.4598,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Lux CF 2011',0);
INSERT INTO "usage" VALUES('EPSG','9436','helmert_transformation','EPSG','5486','EPSG','1146','EPSG','1252');
INSERT INTO "helmert_transformation" VALUES('EPSG','5491','Martinique 1938 to RGAF09 (1)','','EPSG','9606','Position Vector transformation (geog2D domain)','EPSG','4625','EPSG','5489',0.1,127.744,547.069,118.359,'EPSG','9001',-3.1116,4.9509,-0.8837,'EPSG','9104',14.1012,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Mtq',0);
INSERT INTO "usage" VALUES('EPSG','9437','helmert_transformation','EPSG','5491','EPSG','3276','EPSG','1031');
@@ -1605,7 +1605,7 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','5822','UCS-2000 to ITRF2005
INSERT INTO "usage" VALUES('EPSG','9506','helmert_transformation','EPSG','5822','EPSG','1242','EPSG','1041');
INSERT INTO "helmert_transformation" VALUES('EPSG','5823','Ukraine 2000 to WGS 84 (1)','Parameter values taken from Ukraine 2000 to ITRF2005 (1) (code 5822) assuming that ITRS2005 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','5561','EPSG','4326',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',1);
INSERT INTO "usage" VALUES('EPSG','9507','helmert_transformation','EPSG','5823','EPSG','1242','EPSG','1252');
-INSERT INTO "helmert_transformation" VALUES('EPSG','5826','DB_REF to ETRS89 (1)','Given with rotation and scale to greater resolution: dX = -1.1155214628", dY = -0.2824339890", dZ = 3.1384490633", dS = 7.992235". The truncated values given by OGP do not impact calculation accuracy.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5681','EPSG','4258',0.5,584.9636,107.7175,413.8067,'EPSG','9001',-1.1155,-0.2824,3.1384,'EPSG','9104',7.9922,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DB-Deu',0);
+INSERT INTO "helmert_transformation" VALUES('EPSG','5826','DB_REF to ETRS89 (1)','Defines DB_REF so considered errorless. Defined with parameter values for forward and reverse CTs with rotation and scale to greater resolution. The OGP truncated values and reversible formula have no impact on calculation results at the micron level.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','5681','EPSG','4258',0.0,584.9636,107.7175,413.8067,'EPSG','9001',-1.1155,-0.2824,3.1384,'EPSG','9104',7.9922,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DB-Deu',0);
INSERT INTO "usage" VALUES('EPSG','9509','helmert_transformation','EPSG','5826','EPSG','3339','EPSG','1141');
INSERT INTO "helmert_transformation" VALUES('EPSG','5827','AGD66 to GDA94 (19)','Replaces nationally-derived transformation code 1458.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',0.5,-129.164,-41.188,130.718,'EPSG','9001',-0.246,-0.374,-0.329,'EPSG','9104',-2.955,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'PLA-ACT',0);
INSERT INTO "usage" VALUES('EPSG','9510','helmert_transformation','EPSG','5827','EPSG','2283','EPSG','1158');
@@ -2467,8 +2467,18 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','9792','RGF93 v2b to WGS 84 (
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','9898','LUREF to ETRS89 (5)','LUREF 2014 parameters. For an equivalent CT using the Coordinate Frame method see CT 9899. Defines LUREF between 2014 and 2020. Replaces LUREF 2006 parameters (CT 5483). Info source gives this CT in reverse direction. Derived using ETRF2000 @2013-01-27.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.0,-265.8979,76.9761,20.2504,'EPSG','9001',0.43335,3.11447,-2.63637,'EPSG','9104',0.4752,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4103620.3891,440486.4152,4846923.4466,'EPSG','9001','ACT-Lux MB 2014',0);
+INSERT INTO "usage" VALUES('EPSG','17305','helmert_transformation','EPSG','9898','EPSG','1146','EPSG','1282');
+INSERT INTO "helmert_transformation" VALUES('EPSG','9899','LUREF to ETRS89 (6)','LUREF 2014 parameters. For an equivalent CT using the Molodensky-Badekas method see CT 9898. Defines LUREF between 2014 and 2020. Replaces LUREF 2006 parameters (CT 5485). Info source gives this CT in reverse direction. Derived using ETRF2000@2013-01-27.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.0,-189.033,14.1335,-43.0901,'EPSG','9001',0.43331,3.11448,-2.63636,'EPSG','9104',0.4752,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2014',0);
+INSERT INTO "usage" VALUES('EPSG','17306','helmert_transformation','EPSG','9899','EPSG','1146','EPSG','1282');
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','9936','JGD2011 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','6668','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-Jpn',0);
+INSERT INTO "usage" VALUES('EPSG','17201','helmert_transformation','EPSG','9936','EPSG','1129','EPSG','1252');
+INSERT INTO "helmert_transformation" VALUES('EPSG','9937','LUREF to ETRS89 (7)','LUREF 2020 parameters. For an equivalent CT using the Coordinate Frame method see CT 9938. Defines LUREF from 2020. Replaces LUREF 2014 parameters (CT 9898). Info source gives this CT in reverse direction. Derived using ETRF2000 @2013-01-27.','EPSG','9636','Molodensky-Badekas (CF geog2D domain)','EPSG','4181','EPSG','4258',0.0,-265.9196,76.9506,20.2222,'EPSG','9001',0.48171,3.09948,-2.68639,'EPSG','9104',0.46346,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4101567.0943,440245.0881,4848681.4115,'EPSG','9001','ACT-Lux MB 2020',0);
+INSERT INTO "usage" VALUES('EPSG','17307','helmert_transformation','EPSG','9937','EPSG','1146','EPSG','1283');
+INSERT INTO "helmert_transformation" VALUES('EPSG','9938','LUREF to ETRS89 (8)','LUREF 2020 parameters. For an equivalent CT using the Molodensky-Badekas method see CT 9937. Defines LUREF from 2020. Replaces LUREF 2014 parameters (CT 9899). Info source gives CT in reverse direction. Derived using ETRF2000 @2013-01-27.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4181','EPSG','4258',0.0,-189.228,12.0035,-42.6303,'EPSG','9001',0.48171,3.09948,-2.68639,'EPSG','9104',0.46346,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ACT-Lux CF 2020',0);
+INSERT INTO "usage" VALUES('EPSG','17308','helmert_transformation','EPSG','9938','EPSG','1146','EPSG','1283');
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);
diff --git a/data/sql/metadata.sql b/data/sql/metadata.sql
index 6d49c0cb..d1e7fd91 100644
--- a/data/sql/metadata.sql
+++ b/data/sql/metadata.sql
@@ -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.041');
-INSERT INTO "metadata" VALUES('EPSG.DATE', '2021-12-03');
+INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.044');
+INSERT INTO "metadata" VALUES('EPSG.DATE', '2022-01-03');
-- The value of ${PROJ_VERSION} is substituted at build time by the actual
-- value.
diff --git a/data/sql/proj_db_table_defs.sql b/data/sql/proj_db_table_defs.sql
index 20ce940e..9c5768e1 100644
--- a/data/sql/proj_db_table_defs.sql
+++ b/data/sql/proj_db_table_defs.sql
@@ -502,6 +502,7 @@ BEGIN
'EPSG_1069_Change of Vertical Unit',
'EPSG_1104_Change of Vertical Unit',
'EPSG_1078_Equal Earth',
+ 'EPSG_1111_Transverse Mercator 3D',
'EPSG_9602_Geographic/geocentric conversions',
'EPSG_9659_Geographic3D to 2D conversion',
'EPSG_9801_Lambert Conic Conformal (1SP)',
@@ -731,9 +732,9 @@ FOR EACH ROW BEGIN
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.type must be ''cartesian''')
WHERE (SELECT type FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 'Cartesian';
- SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.dimension must be 2')
+ SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: coordinate_system.dimension must be 2 or 3')
-- EPSG:4461 is topocentric
- WHERE NOT(NEW.coordinate_system_auth_name = 'EPSG' AND NEW.coordinate_system_code = '4461') AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) != 2;
+ WHERE NOT(NEW.coordinate_system_auth_name = 'EPSG' AND NEW.coordinate_system_code = '4461') AND (SELECT dimension FROM coordinate_system WHERE coordinate_system.auth_name = NEW.coordinate_system_auth_name AND coordinate_system.code = NEW.coordinate_system_code) NOT IN (2,3);
END;
CREATE TABLE compound_crs(
diff --git a/data/sql/projected_crs.sql b/data/sql/projected_crs.sql
index ec734236..914aa7d3 100644
--- a/data/sql/projected_crs.sql
+++ b/data/sql/projected_crs.sql
@@ -338,7 +338,7 @@ INSERT INTO "projected_crs" VALUES('EPSG','2167','Pulkovo 1942(83) / Gauss Kruge
INSERT INTO "usage" VALUES('EPSG','1191','projected_crs','EPSG','2167','EPSG','1513','EPSG','1056');
INSERT INTO "projected_crs" VALUES('EPSG','2168','Pulkovo 1942(83) / Gauss Kruger zone 5',NULL,'EPSG','4530','EPSG','4178','EPSG','16265',NULL,1);
INSERT INTO "usage" VALUES('EPSG','1192','projected_crs','EPSG','2168','EPSG','1512','EPSG','1056');
-INSERT INTO "projected_crs" VALUES('EPSG','2169','Luxembourg 1930 / Gauss',NULL,'EPSG','4530','EPSG','4181','EPSG','19966',NULL,0);
+INSERT INTO "projected_crs" VALUES('EPSG','2169','LUREF / Luxembourg TM',NULL,'EPSG','4530','EPSG','4181','EPSG','19966',NULL,0);
INSERT INTO "usage" VALUES('EPSG','1193','projected_crs','EPSG','2169','EPSG','1146','EPSG','1142');
INSERT INTO "projected_crs" VALUES('EPSG','2170','MGI / Slovenia Grid',NULL,'EPSG','4530','EPSG','4312','EPSG','19967',NULL,1);
INSERT INTO "usage" VALUES('EPSG','1194','projected_crs','EPSG','2170','EPSG','1212','EPSG','1142');
@@ -7433,6 +7433,8 @@ INSERT INTO "projected_crs" VALUES('EPSG','9875','PNG94 / PNGMG94 zone 58',NULL,
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','9895','LUREF / Luxembourg TM (3D)',NULL,'EPSG','1046','EPSG','9893','EPSG','9894',NULL,0);
+INSERT INTO "usage" VALUES('EPSG','17310','projected_crs','EPSG','9895','EPSG','1146','EPSG','1091');
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);
diff --git a/data/sql/scope.sql b/data/sql/scope.sql
index afb0d45e..75412b86 100644
--- a/data/sql/scope.sql
+++ b/data/sql/scope.sql
@@ -254,3 +254,7 @@ INSERT INTO "scope" VALUES('EPSG','1274','Spatial referencing including water re
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);
+INSERT INTO "scope" VALUES('EPSG','1280','Readjustment of coordinates to account for ground deformation caused by 2011 Tohoku earthquake.',0);
+INSERT INTO "scope" VALUES('EPSG','1281','Geodesy. Defines LUREF from 2006 to 2014.',0);
+INSERT INTO "scope" VALUES('EPSG','1282','Geodesy. Defines LUREF from 2014 to 2020.',0);
+INSERT INTO "scope" VALUES('EPSG','1283','Geodesy. Defines LUREF from 2020.',0);
diff --git a/data/sql/supersession.sql b/data/sql/supersession.sql
index 0ab49650..d97213db 100644
--- a/data/sql/supersession.sql
+++ b/data/sql/supersession.sql
@@ -254,3 +254,7 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8885','grid_tran
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9786','grid_transformation','EPSG','9876','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9787','grid_transformation','EPSG','9877','EPSG',1);
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9638','grid_transformation','EPSG','9787','EPSG',0);
+INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','5483','helmert_transformation','EPSG','9898','EPSG',1);
+INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','5485','helmert_transformation','EPSG','9899','EPSG',1);
+INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9898','helmert_transformation','EPSG','9937','EPSG',1);
+INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','9899','helmert_transformation','EPSG','9938','EPSG',1);
diff --git a/data/sql/vertical_crs.sql b/data/sql/vertical_crs.sql
index 1310c508..a4f90419 100644
--- a/data/sql/vertical_crs.sql
+++ b/data/sql/vertical_crs.sql
@@ -210,7 +210,7 @@ INSERT INTO "vertical_crs" VALUES('EPSG','5772','Stewart Island 1977 height',NUL
INSERT INTO "usage" VALUES('EPSG','4215','vertical_crs','EPSG','5772','EPSG','3338','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5773','EGM96 height',NULL,'EPSG','6499','EPSG','5171',0);
INSERT INTO "usage" VALUES('EPSG','4216','vertical_crs','EPSG','5773','EPSG','1262','EPSG','1027');
-INSERT INTO "vertical_crs" VALUES('EPSG','5774','NG-L height',NULL,'EPSG','6499','EPSG','5172',0);
+INSERT INTO "vertical_crs" VALUES('EPSG','5774','NG95 height',NULL,'EPSG','6499','EPSG','5172',0);
INSERT INTO "usage" VALUES('EPSG','4217','vertical_crs','EPSG','5774','EPSG','1146','EPSG','1178');
INSERT INTO "vertical_crs" VALUES('EPSG','5775','Antalya height',NULL,'EPSG','6499','EPSG','5173',0);
INSERT INTO "usage" VALUES('EPSG','4218','vertical_crs','EPSG','5775','EPSG','3322','EPSG','1178');
@@ -504,3 +504,7 @@ 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','9923','GNTRANS height',NULL,'EPSG','6499','EPSG','1316',0);
+INSERT INTO "usage" VALUES('EPSG','17285','vertical_crs','EPSG','9923','EPSG','3339','EPSG','1141');
+INSERT INTO "vertical_crs" VALUES('EPSG','9927','GNTRANS2016 height',NULL,'EPSG','6499','EPSG','1318',0);
+INSERT INTO "usage" VALUES('EPSG','17286','vertical_crs','EPSG','9927','EPSG','3339','EPSG','1141');
diff --git a/data/sql/vertical_datum.sql b/data/sql/vertical_datum.sql
index d62e2ed8..7ee384ea 100644
--- a/data/sql/vertical_datum.sql
+++ b/data/sql/vertical_datum.sql
@@ -228,6 +228,10 @@ INSERT INTO "vertical_datum" VALUES('EPSG','1306','Catania 1965',NULL,'1965-01-0
INSERT INTO "usage" VALUES('EPSG','15330','vertical_datum','EPSG','1306','EPSG','2340','EPSG','1178');
INSERT INTO "vertical_datum" VALUES('EPSG','1307','Cagliari 1956',NULL,'1956-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','15331','vertical_datum','EPSG','1307','EPSG','2339','EPSG','1178');
+INSERT INTO "vertical_datum" VALUES('EPSG','1316','GNTRANS',NULL,'2003-01-01',NULL,NULL,NULL,0);
+INSERT INTO "usage" VALUES('EPSG','17277','vertical_datum','EPSG','1316','EPSG','3339','EPSG','1141');
+INSERT INTO "vertical_datum" VALUES('EPSG','1318','GNTRANS2016',NULL,'2016-01-01',NULL,NULL,NULL,0);
+INSERT INTO "usage" VALUES('EPSG','17278','vertical_datum','EPSG','1318','EPSG','3339','EPSG','1141');
INSERT INTO "vertical_datum" VALUES('EPSG','5100','Mean Sea Level',NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13307','vertical_datum','EPSG','5100','EPSG','1262','EPSG','1199');
INSERT INTO "vertical_datum" VALUES('EPSG','5101','Ordnance Datum Newlyn',NULL,'1956-01-01',NULL,NULL,NULL,0);
@@ -370,7 +374,7 @@ INSERT INTO "vertical_datum" VALUES('EPSG','5170','Stewart Island 1977',NULL,'19
INSERT INTO "usage" VALUES('EPSG','13376','vertical_datum','EPSG','5170','EPSG','3338','EPSG','1178');
INSERT INTO "vertical_datum" VALUES('EPSG','5171','EGM96 geoid',NULL,'1996-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13377','vertical_datum','EPSG','5171','EPSG','1262','EPSG','1027');
-INSERT INTO "vertical_datum" VALUES('EPSG','5172','Nivellement General du Luxembourg',NULL,'1995-01-01',NULL,NULL,NULL,0);
+INSERT INTO "vertical_datum" VALUES('EPSG','5172','Nivellement General du Luxembourg 1995',NULL,'1995-01-01',NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13378','vertical_datum','EPSG','5172','EPSG','1146','EPSG','1178');
INSERT INTO "vertical_datum" VALUES('EPSG','5173','Antalya',NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO "usage" VALUES('EPSG','13379','vertical_datum','EPSG','5173','EPSG','3322','EPSG','1178');
diff --git a/docs/source/community/code_contributions.rst b/docs/source/community/code_contributions.rst
index 84feeb2f..a21b590b 100644
--- a/docs/source/community/code_contributions.rst
+++ b/docs/source/community/code_contributions.rst
@@ -111,10 +111,10 @@ possible, you can add a comment in the code like
in the preceding line. Replace
duplicateBreak with the actual name of the violated rule emitted by cppcheck.
-CLang Static Analyzer (CSA)
+Clang Static Analyzer (CSA)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-CSA is run by the ``travis/csa`` build configuration. You may also run it locally.
+CSA is run by a GitHub Actions workflow. You may also run it locally.
Preliminary step: install clang. For example:
@@ -123,27 +123,29 @@ Preliminary step: install clang. For example:
wget https://releases.llvm.org/9.0.0/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
tar xJf clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz
mv clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04 clang+llvm-9
+ export PATH=$PWD/clang+llvm-9/bin:$PATH
-Run configure under the scan-build utility of clang:
+Configure PROJ with the :program:`scan-build` utility of clang:
::
+ mkdir csa_build
+ cd csa_build
+ scan-build cmake ..
- ./clang+llvm-9/bin/scan-build ./configure
-
-Build under scan-build:
+Build using :program:`scan-build`:
::
- ./clang+llvm-9/bin/scan-build make [-j8]
+ scan-build make [-j8]
If CSA finds errors, they will be emitted during the build. And in which case,
-at the end of the build process, scan-build will emit a warning message
+at the end of the build process, :program:`scan-build` will emit a warning message
indicating errors have been found and how to display the error report. This
is with something like
::
- ./clang+llvm-9/bin/scan-view /tmp/scan-build-2021-03-15-121416-17476-1
+ scan-view /tmp/scan-build-2021-03-15-121416-17476-1
This will open a web browser with the interactive report.
diff --git a/scripts/build_db.py b/scripts/build_db.py
index 263756c9..f93617bb 100755
--- a/scripts/build_db.py
+++ b/scripts/build_db.py
@@ -282,6 +282,9 @@ def fill_geodetic_crs(proj_db_cursor):
# 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))
+ # FIXME: remove me for EPSG > 10.044 where the issue with EPSG:4181 and EPSG:9893 having a null datum_code has been solved.
+ 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, ?, 6181, NULL, deprecated FROM epsg.epsg_coordinatereferencesystem WHERE coord_ref_sys_kind IN ('geographic 2D', 'geographic 3D', 'geocentric') AND datum_code IS NULL AND coord_ref_sys_code IN (4181, 9893)", (EPSG_AUTHORITY, EPSG_AUTHORITY, EPSG_AUTHORITY))
+
def fill_vertical_crs(proj_db_cursor):
#proj_db_cursor.execute(
diff --git a/src/geodesic.c b/src/geodesic.c
index c8835a7a..225ccfdf 100644
--- a/src/geodesic.c
+++ b/src/geodesic.c
@@ -593,8 +593,8 @@ real geod_genposition(const struct geod_geodesicline* l,
* if ((outmask & GEOD_XX) && pYY)
* *pYY = YY;
*
- * the second check "&& pYY" is redundant. It's there to make the CLang
- * static analyzer happy.
+ * the second check "&& pYY" is redundant. It's there to make the Clang
+ * Static Analyzer happy.
*/
if ((outmask & GEOD_LATITUDE) && plat2)
*plat2 = lat2;
@@ -1826,7 +1826,7 @@ void geod_polygon_addedge(const struct geod_geodesic* g,
real azi, real s) {
if (p->num) { /* Do nothing is num is zero */
/* Initialize S12 to stop Visual Studio warning. Initialization of lat and
- * lon is to make CLang static analyzer happy. */
+ * lon is to make Clang Static Analyzer happy. */
real lat = 0, lon = 0, S12 = 0;
geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s,
&lat, &lon, nullptr,
@@ -1928,7 +1928,7 @@ unsigned geod_polygon_testedge(const struct geod_geodesic* g,
tempsum = p->A[0];
crossings = p->crossings;
{
- /* Initialization of lat, lon, and S12 is to make CLang static analyzer
+ /* Initialization of lat, lon, and S12 is to make Clang Static Analyzer
* happy. */
real lat = 0, lon = 0, s12, S12 = 0;
geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s,
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index 575f6e2b..2ea8393c 100644
--- a/src/iso19111/crs.cpp
+++ b/src/iso19111/crs.cpp
@@ -5879,6 +5879,7 @@ BoundCRS::_identify(const io::AuthorityFactoryPtr &authorityFactory) const {
}
return !resMatchOfTransfToWGS84.empty() ? resMatchOfTransfToWGS84 : res;
}
+//! @endcond
// ---------------------------------------------------------------------------
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index 9415dafd..710fd6d5 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -8799,6 +8799,7 @@ std::list<datum::EllipsoidNNPtr> AuthorityFactory::createEllipsoidFromExisting(
}
return res;
}
+//! @endcond
// ---------------------------------------------------------------------------
@@ -9310,7 +9311,6 @@ AuthorityFactory::createCompoundCRSFromExisting(
// ---------------------------------------------------------------------------
-//! @cond Doxygen_Suppress
std::vector<operation::CoordinateOperationNNPtr>
AuthorityFactory::getTransformationsForGeoid(
const std::string &geoidName, bool usePROJAlternativeGridNames) const {
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index 67877206..ca5a3d97 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -866,6 +866,8 @@ void WKTFormatter::stopInversion() {
bool WKTFormatter::isInverted() const { return d->inversionStack_.back(); }
#endif
+//! @endcond
+
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
@@ -1411,6 +1413,7 @@ struct WKTParser::Private {
ConcatenatedOperationNNPtr
buildConcatenatedOperation(const WKTNodeNNPtr &node);
};
+//! @endcond
// ---------------------------------------------------------------------------
@@ -8867,6 +8870,8 @@ struct PROJStringParser::Private {
int iAxisSwap, bool ignorePROJAxis);
};
+//! @endcond
+
// ---------------------------------------------------------------------------
PROJStringParser::PROJStringParser() : d(internal::make_unique<Private>()) {}
diff --git a/src/iso19111/operation/parammappings.cpp b/src/iso19111/operation/parammappings.cpp
index 240a2b50..af1309b3 100644
--- a/src/iso19111/operation/parammappings.cpp
+++ b/src/iso19111/operation/parammappings.cpp
@@ -561,6 +561,10 @@ static const MethodMapping projectionMethodMappings[] = {
{EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR,
"Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK},
+ {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_3D,
+ EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_3D, "Transverse_Mercator", "tmerc",
+ nullptr, paramsNatOriginScaleK},
+
{EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED,
EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED,
"Transverse_Mercator_South_Orientated", "tmerc", "axis=wsu",
diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp
index 4dadfa40..99b70609 100644
--- a/src/iso19111/operation/singleoperation.cpp
+++ b/src/iso19111/operation/singleoperation.cpp
@@ -533,6 +533,7 @@ void OperationMethod::_exportToJSON(
formatID(formatter);
}
}
+//! @endcond
// ---------------------------------------------------------------------------
diff --git a/src/iso19111/operation/transformation.cpp b/src/iso19111/operation/transformation.cpp
index 36540242..a018a7b4 100644
--- a/src/iso19111/operation/transformation.cpp
+++ b/src/iso19111/operation/transformation.cpp
@@ -1477,7 +1477,6 @@ createApproximateInverseIfPossible(const Transformation *op) {
return nullptr;
}
-//! @endcond
// ---------------------------------------------------------------------------
diff --git a/src/iso19111/util.cpp b/src/iso19111/util.cpp
index 82d36458..f8ae9049 100644
--- a/src/iso19111/util.cpp
+++ b/src/iso19111/util.cpp
@@ -293,6 +293,8 @@ const BaseObjectNNPtr *PropertyMap::get(const std::string &key) const {
}
return nullptr;
}
+//! @endcond
+
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
diff --git a/src/networkfilemanager.cpp b/src/networkfilemanager.cpp
index cd0da86f..3eecc5e2 100644
--- a/src/networkfilemanager.cpp
+++ b/src/networkfilemanager.cpp
@@ -2077,8 +2077,6 @@ int proj_context_is_network_enabled(PJ_CONTEXT *ctx) {
return ctx->networking.enabled;
}
-//! @endcond
-
// ---------------------------------------------------------------------------
/** Define the URL endpoint to query for remote grids.
diff --git a/src/proj_constants.h b/src/proj_constants.h
index 5985f1b1..815511fe 100644
--- a/src/proj_constants.h
+++ b/src/proj_constants.h
@@ -34,6 +34,9 @@
#define EPSG_NAME_METHOD_TRANSVERSE_MERCATOR "Transverse Mercator"
#define EPSG_CODE_METHOD_TRANSVERSE_MERCATOR 9807
+#define EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_3D "Transverse Mercator (3D)"
+#define EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_3D 1111
+
#define EPSG_NAME_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED \
"Transverse Mercator (South Orientated)"
#define EPSG_CODE_METHOD_TRANSVERSE_MERCATOR_SOUTH_ORIENTATED 9808
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 8a323376..3e6ef1ab 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -1797,12 +1797,12 @@ TEST_F(CApi, proj_create_operations_dont_discard_superseded) {
TEST_F(CApi, proj_create_operations_with_pivot) {
auto source_crs = proj_create_from_database(
- m_ctxt, "EPSG", "4326", PJ_CATEGORY_CRS, false, nullptr); // WGS84
+ m_ctxt, "EPSG", "4230", PJ_CATEGORY_CRS, false, nullptr); // ED50
ASSERT_NE(source_crs, nullptr);
ObjectKeeper keeper_source_crs(source_crs);
auto target_crs = proj_create_from_database(
- m_ctxt, "EPSG", "6668", PJ_CATEGORY_CRS, false, nullptr); // JGD2011
+ m_ctxt, "EPSG", "4171", PJ_CATEGORY_CRS, false, nullptr); // RGF93 v1
ASSERT_NE(target_crs, nullptr);
ObjectKeeper keeper_target_crs(target_crs);
@@ -1825,7 +1825,7 @@ TEST_F(CApi, proj_create_operations_with_pivot) {
EXPECT_EQ(
proj_get_name(op),
std::string(
- "Inverse of JGD2000 to WGS 84 (1) + JGD2000 to JGD2011 (2)"));
+ "ED50 to ETRS89 (10) + Inverse of RGF93 v1 to ETRS89 (1)"));
}
// Disallow pivots
@@ -1846,27 +1846,23 @@ TEST_F(CApi, proj_create_operations_with_pivot) {
EXPECT_EQ(
proj_get_name(op),
- std::string("Ballpark geographic offset from WGS 84 to JGD2011"));
+ std::string("Ballpark geographic offset from ED50 to RGF93 v1"));
}
- // Restrict pivot to Tokyo CRS
+ // Restrict pivot to ETRS89
{
auto ctxt = proj_create_operation_factory_context(m_ctxt, "EPSG");
ASSERT_NE(ctxt, nullptr);
ContextKeeper keeper_ctxt(ctxt);
- const char *pivots[] = {"EPSG", "4301", nullptr};
+ const char *pivots[] = {"EPSG", "4258", nullptr};
proj_operation_factory_context_set_allowed_intermediate_crs(
m_ctxt, ctxt, pivots);
- proj_operation_factory_context_set_spatial_criterion(
- m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION);
- proj_operation_factory_context_set_grid_availability_use(
- m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED);
auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt);
ASSERT_NE(res, nullptr);
ObjListKeeper keeper_res(res);
- EXPECT_EQ(proj_list_get_count(res), 8);
+ EXPECT_EQ(proj_list_get_count(res), 1);
auto op = proj_list_get(m_ctxt, res, 0);
ASSERT_NE(op, nullptr);
ObjectKeeper keeper_op(op);
@@ -1874,38 +1870,32 @@ TEST_F(CApi, proj_create_operations_with_pivot) {
EXPECT_EQ(
proj_get_name(op),
std::string(
- "Inverse of Tokyo to WGS 84 (108) + Tokyo to JGD2011 (2)"));
+ "ED50 to ETRS89 (10) + Inverse of RGF93 v1 to ETRS89 (1)"));
}
- // Restrict pivot to JGD2000
+ // Restrict pivot to something unrelated
{
auto ctxt = proj_create_operation_factory_context(m_ctxt, "any");
ASSERT_NE(ctxt, nullptr);
ContextKeeper keeper_ctxt(ctxt);
- const char *pivots[] = {"EPSG", "4612", nullptr};
+ const char *pivots[] = {"EPSG", "4267", nullptr}; // NAD27
proj_operation_factory_context_set_allowed_intermediate_crs(
m_ctxt, ctxt, pivots);
- proj_operation_factory_context_set_spatial_criterion(
- m_ctxt, ctxt, PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION);
- proj_operation_factory_context_set_grid_availability_use(
- m_ctxt, ctxt, PROJ_GRID_AVAILABILITY_IGNORED);
proj_operation_factory_context_set_allow_use_intermediate_crs(
m_ctxt, ctxt, PROJ_INTERMEDIATE_CRS_USE_ALWAYS);
auto res = proj_create_operations(m_ctxt, source_crs, target_crs, ctxt);
ASSERT_NE(res, nullptr);
ObjListKeeper keeper_res(res);
- // includes results from ESRI
- EXPECT_EQ(proj_list_get_count(res), 4);
+ EXPECT_EQ(proj_list_get_count(res), 1);
auto op = proj_list_get(m_ctxt, res, 0);
ASSERT_NE(op, nullptr);
ObjectKeeper keeper_op(op);
EXPECT_EQ(
proj_get_name(op),
- std::string(
- "Inverse of JGD2000 to WGS 84 (1) + JGD2000 to JGD2011 (2)"));
+ std::string("Ballpark geographic offset from ED50 to RGF93 v1"));
}
}