From 72e8f89451e7578dc169ac2d07fe6ee35adcd644 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 14 May 2022 15:23:41 +0200 Subject: [PATCH 1/3] Add a +proj=vertoffset method for Vertical Offset And Slope transformation (refs #3194) --- .../operations/transformations/index.rst | 1 + .../operations/transformations/vertoffset.rst | 89 +++++++++++++++ src/lib_proj.cmake | 1 + src/pj_list.h | 1 + src/transformations/vertoffset.cpp | 102 ++++++++++++++++++ test/gie/more_builtins.gie | 15 +++ 6 files changed, 209 insertions(+) create mode 100644 docs/source/operations/transformations/vertoffset.rst create mode 100644 src/transformations/vertoffset.cpp diff --git a/docs/source/operations/transformations/index.rst b/docs/source/operations/transformations/index.rst index a413b8f672..a7478a487f 100644 --- a/docs/source/operations/transformations/index.rst +++ b/docs/source/operations/transformations/index.rst @@ -20,5 +20,6 @@ systems are based on different datums. molobadekas hgridshift tinshift + vertoffset vgridshift xyzgridshift diff --git a/docs/source/operations/transformations/vertoffset.rst b/docs/source/operations/transformations/vertoffset.rst new file mode 100644 index 0000000000..c9ea3aba45 --- /dev/null +++ b/docs/source/operations/transformations/vertoffset.rst @@ -0,0 +1,89 @@ +.. _vertoffset: + +================================================================================ +Vertical Offset And Slope +================================================================================ + +.. versionadded:: 9.1.0 + +The Vertical Offset And Slope offsets transformation adds an offset to an +orthometric height, taking account a constant offset and a inclinated plane, +defined by its slope along latitude and longitude axis. + ++---------------------+----------------------------------------------------------+ +| **Alias** | vertoffset | ++---------------------+----------------------------------------------------------+ +| **Domain** | 3D | ++---------------------+----------------------------------------------------------+ +| **Input type** | Geodetic coordinates (horizontal), meters (vertical) | ++---------------------+----------------------------------------------------------+ +| **output type** | Geodetic coordinates (horizontal), meters (vertical) | ++---------------------+----------------------------------------------------------+ + +It is documented as coordinate operation method code 1046 in the EPSG dataset (:cite:`IOGP2018`). +It is typically used in Europe, to relate national vertical systems to +pan-European vertical systems (EVRF200, EVRF2007). + +Examples +############################################################################### + +Vertical offset from LN02 height to EVRF2000 height with horizontal coordinates in ETRS89:: + + +proj=vertoffset +lat_0=46.9166666666666666 +lon_0=8.183333333333334 \ + +dh=-0.245 +slope_lat=-0.210 +slope_lon=-0.032 +ellps=GRS80 + +Parameters +################################################################################ + +Required +------------------------------------------------------------------------------- + +.. option:: +lat_0= + + Latitude of origin of the inclinated plane. + +.. option:: +lon_0= + + Longitude of origin of the inclinated plane + +.. option:: +dh= + + Offset in height, expressed in meter, to add. + +.. option:: +slope_lat= + + Slope parameter in the latitude domain, expressed in arc-seconds. + +.. option:: +slope_lon= + + Slope parameter in the longitude domain, expressed in arc-seconds. + +.. include:: ../options/ellps.rst + +Formula +################################################################################ + +The :math:`Z_{dest}` destination elevation is obtained from the +:math:`Z_{src}` source elevation with: + +.. math:: + + \begin{align} + Z_{dest} = Z_{src} + \left( dh + slope_{lat} * {\rho}_0 * (\phi - {\phi}_0) + slope_{lon} * {\nu}_0 * (\lambda - {\lambda}_0) * cos(\phi) \right) + \end{align} + +where: + +* :math:`dh`, :math:`slope_{lat}` and :math:`slope_{lon}` are the above mentioned parameters +* :math:`{\lambda}_0`, :math:`{\phi}_0` is the longitude, latitude of the point of origin of the inclinate plane (``+lon_0``, ``+lat_0``) +* :math:`\lambda`, :math:`\phi` is the longitude, latitude of the point to evaluate +* :math:`{\rho}_0` is the radius of curvature of the meridian at latitude :math:`{\phi}_0` +* :math:`{\nu}_0` is the radius of curvature on the prime vertical (i.e. perpendicular to the meridian) at latitude :math:`{\phi}_0` + +The reverse formula is: + +.. math:: + + \begin{align} + Z_{src} = Z_{dest} - \left( dh + slope_{lat} * {\rho}_0 * (\phi - {\phi}_0) + slope_{lon} * {\nu}_0 * (\lambda - {\lambda}_0) * cos(\phi) \right) + \end{align} diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index 95e7a4cdb0..7896b9a1a5 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -175,6 +175,7 @@ set(SRC_LIBPROJ_TRANSFORMATIONS transformations/xyzgridshift.cpp transformations/defmodel.cpp transformations/tinshift.cpp + transformations/vertoffset.cpp ) set(SRC_LIBPROJ_ISO19111 diff --git a/src/pj_list.h b/src/pj_list.h index 197514af20..9bc32dfcb3 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -170,6 +170,7 @@ PROJ_HEAD(vandg, "van der Grinten (I)") PROJ_HEAD(vandg2, "van der Grinten II") PROJ_HEAD(vandg3, "van der Grinten III") PROJ_HEAD(vandg4, "van der Grinten IV") +PROJ_HEAD(vertoffset, "Vertical Offset and Slope") PROJ_HEAD(vitk1, "Vitkovsky I") PROJ_HEAD(vgridshift, "Vertical grid shift") PROJ_HEAD(wag1, "Wagner I (Kavrayskiy VI)") diff --git a/src/transformations/vertoffset.cpp b/src/transformations/vertoffset.cpp new file mode 100644 index 0000000000..a228125efc --- /dev/null +++ b/src/transformations/vertoffset.cpp @@ -0,0 +1,102 @@ +/************************************************************************ +* Copyright (c) 2022, Even Rouault +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +* DEALINGS IN THE SOFTWARE. +* +***********************************************************************/ +#define PJ_LIB__ + +#include +#include + +#include "proj.h" +#include "proj_internal.h" + +PROJ_HEAD(vertoffset, "Vertical Offset and Slope"); + +namespace { // anonymous namespace +struct pj_opaque_vertoffset { + double slope_lon; + double slope_lat; + double zoff; + double rho0; + double nu0; +}; +} // anonymous namespace + +// Cf EPSG Dataset coordinate operation method code 1046 "Vertical Offset and Slope" + +static double get_forward_offset(const PJ* P, double phi, double lam) +{ + const struct pj_opaque_vertoffset *Q = (const struct pj_opaque_vertoffset *) P->opaque; + return Q->zoff + + Q->slope_lat * Q->rho0 * (phi - P->phi0) + + Q->slope_lon * Q->nu0 * lam * cos(phi); +} + +static PJ_XYZ forward_3d(PJ_LPZ lpz, PJ *P) { + PJ_XYZ xyz; + // We need to add lam0 (+lon_0) since it is substracted in fwd_prepare(), + // which is desirable for map projections, but not + // for that method which modifies only the Z component. + xyz.x = lpz.lam + P->lam0; + xyz.y = lpz.phi; + xyz.z = lpz.z + get_forward_offset(P, lpz.phi, lpz.lam); + return xyz; +} + + +static PJ_LPZ reverse_3d(PJ_XYZ xyz, PJ *P) { + PJ_LPZ lpz; + // We need to subtract lam0 (+lon_0) since it is added in inv_finalize(), + // which is desirable for map projections, but not + // for that method which modifies only the Z component. + lpz.lam = xyz.x - P->lam0; + lpz.phi = xyz.y; + lpz.z = xyz.z - get_forward_offset(P, lpz.phi, lpz.lam); + return lpz; +} + +/* Arcsecond to radians */ +#define ARCSEC_TO_RAD (DEG_TO_RAD / 3600.0) + + +PJ *TRANSFORMATION(vertoffset,1) { + struct pj_opaque_vertoffset *Q = static_cast(calloc(1, sizeof(struct pj_opaque_vertoffset))); + if (nullptr==Q) + return pj_default_destructor(P, PROJ_ERR_OTHER /*ENOMEM*/); + P->opaque = (void *) Q; + + P->fwd3d = forward_3d; + P->inv3d = reverse_3d; + + P->left = PJ_IO_UNITS_RADIANS; + P->right = PJ_IO_UNITS_RADIANS; + + /* read args */ + Q->slope_lon = pj_param(P->ctx, P->params, "dslope_lon").f * ARCSEC_TO_RAD; + Q->slope_lat = pj_param(P->ctx, P->params, "dslope_lat").f * ARCSEC_TO_RAD; + Q->zoff = pj_param(P->ctx, P->params, "ddh").f; + const double sinlat0 = sin(P->phi0); + const double oneMinusEsSinlat0Square = 1 - P->es * (sinlat0 * sinlat0); + Q->rho0 = P->a * (1 - P->es) / (oneMinusEsSinlat0Square * sqrt(oneMinusEsSinlat0Square)); + Q->nu0 = P->a / sqrt(oneMinusEsSinlat0Square); + + return P; +} diff --git a/test/gie/more_builtins.gie b/test/gie/more_builtins.gie index b388fa09a0..847420cef0 100644 --- a/test/gie/more_builtins.gie +++ b/test/gie/more_builtins.gie @@ -773,6 +773,21 @@ expect 359 10 0 ------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +# Test for vertoffset (Vertical Offset And Slope) +# Test point for EPSG Guidance note 7.2 +------------------------------------------------------------------------------- +------------------------------------------------------------------------------- +operation +proj=vertoffset +lat_0=46.9166666666666666 +lon_0=8.183333333333334 +dh=-0.245 +slope_lat=-0.210 +slope_lon=-0.032 +ellps=GRS80 +------------------------------------------------------------------------------- +direction forward +tolerance 1mm + +accept 9.666666666666666 47.333333333333336 473.000 +expect 9.666666666666666 47.333333333333336 472.690 +roundtrip 1 + + ------------------------------------------------------------------------------- # No-op ------------------------------------------------------------------------------- From c250b3f187c35f84fe3d1a4637eb0c462973bce5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 14 May 2022 15:24:04 +0200 Subject: [PATCH 2/3] Map EPSG:1046 operation method to PROJ +proj=vertoffset (fixes #3194) --- data/sql/other_transformation.sql | 84 +++++++++++++++++++++++ scripts/build_db.py | 14 +++- src/iso19111/operation/parammappings.cpp | 22 ++++++ src/iso19111/operation/transformation.cpp | 60 ++++++++++++++++ src/proj_constants.h | 9 +++ test/unit/test_operationfactory.cpp | 21 +++++- 6 files changed, 205 insertions(+), 5 deletions(-) diff --git a/data/sql/other_transformation.sql b/data/sql/other_transformation.sql index 23945f22e9..ab4723dea0 100644 --- a/data/sql/other_transformation.sql +++ b/data/sql/other_transformation.sql @@ -304,10 +304,54 @@ INSERT INTO "other_transformation" VALUES('EPSG','4452','NZVD2009 height to Stew INSERT INTO "usage" VALUES('EPSG','9087','other_transformation','EPSG','4452','EPSG','3338','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4453','NZVD2009 height to Dunedin-Bluff 1960 height (1)','Accuracy 0.04m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','4458',0.04,'EPSG','8603','Vertical Offset',0.38,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-NZ DUBL',0); INSERT INTO "usage" VALUES('EPSG','9088','other_transformation','EPSG','4453','EPSG','3806','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','4651','ODN height to EVRF2000 height (1)','Determined at 31 points. RMS residual 0.026m, maximum residual 0.080m.','EPSG','1046','Vertical Offset and Slope','EPSG','5701','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',54.35,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',-2.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.07,'EPSG','9001','EPSG','8730','Inclination in latitude',0.044,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr',0); +INSERT INTO "usage" VALUES('EPSG','9118','other_transformation','EPSG','4651','EPSG','2792','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5133','Tokyo 1892 to Tokyo (1)','Caused by redetermination of longitude of Tokyo datum fundamental point in 1918.','EPSG','9601','Longitude rotation','EPSG','5132','EPSG','4301',0.0,'EPSG','8602','Longitude offset',10.405,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn',0); INSERT INTO "usage" VALUES('EPSG','9240','other_transformation','EPSG','5133','EPSG','1364','EPSG','1027'); INSERT INTO "other_transformation" VALUES('EPSG','5134','Tokyo 1892 to Korean 1985 (1)','Caused by redetermination of longitude of Tokyo datum origin in 1918. Korean 1985 is based on the 1918 determination.','EPSG','9601','Longitude rotation','EPSG','5132','EPSG','4162',0.0,'EPSG','8602','Longitude offset',10.405,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,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-Kor',0); INSERT INTO "usage" VALUES('EPSG','9241','other_transformation','EPSG','5134','EPSG','3266','EPSG','1027'); +INSERT INTO "other_transformation" VALUES('EPSG','5196','HVRS71 height to EVRF2000 height (1)','Determined at 46 points. RMS residual 0.008m, maximum residual 0.016m.','EPSG','1046','Vertical Offset and Slope','EPSG','5610','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',45.21,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',16.22,'EPSG','9110','EPSG','8603','Vertical Offset',-0.343,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.007,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.016,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hrv',0); +INSERT INTO "usage" VALUES('EPSG','9279','other_transformation','EPSG','5196','EPSG','3234','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5197','HVRS71 height to EVRF2007 height (1)','Determined at 46 points. RMS residual 0.008m, maximum residual 0.017m.','EPSG','1046','Vertical Offset and Slope','EPSG','5610','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',45.21,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',16.22,'EPSG','9110','EPSG','8603','Vertical Offset',-0.313,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.016,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.018,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hrv',0); +INSERT INTO "usage" VALUES('EPSG','9280','other_transformation','EPSG','5197','EPSG','3234','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5198','Ostend height to EVRF2000 height (1)','Determined at 4 points. RMS residual 0.002m, maximum residual 0.002m.','EPSG','1046','Vertical Offset and Slope','EPSG','5710','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',50.43,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',4.46,'EPSG','9110','EPSG','8603','Vertical Offset',-2.311,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.016,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel',0); +INSERT INTO "usage" VALUES('EPSG','9281','other_transformation','EPSG','5198','EPSG','1347','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5199','Ostend height to EVRF2007 height (1)','Determined at 4 points. RMS residual 0.002m, maximum residual 0.002m.','EPSG','1046','Vertical Offset and Slope','EPSG','5710','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',50.43,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',4.46,'EPSG','9110','EPSG','8603','Vertical Offset',-2.317,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.031,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel',0); +INSERT INTO "usage" VALUES('EPSG','9282','other_transformation','EPSG','5199','EPSG','1347','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5200','Baltic 1982 height to EVRF2007 height (1)','Determined at 58 points. RMS residual 0.002m, maximum residual 0.005m.','EPSG','1046','Vertical Offset and Slope','EPSG','5786','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.373,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.2236,'EPSG','9110','EPSG','8603','Vertical Offset',0.228,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.009,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.003,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr',0); +INSERT INTO "usage" VALUES('EPSG','9283','other_transformation','EPSG','5200','EPSG','3224','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5201','Baltic 1957 height to EVRF2000 height (4)','Determined at 53 points. RMS residual 0.014m, maximum residual 0.035m.','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.116,'EPSG','9001','EPSG','8730','Inclination in latitude',0.036,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); +INSERT INTO "usage" VALUES('EPSG','9284','other_transformation','EPSG','5201','EPSG','1079','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5202','Baltic 1957 height to EVRF2007 height (1)','Determined at 60 points. RMS residual 0.011m, maximum residual 0.025m.','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.13,'EPSG','9001','EPSG','8730','Inclination in latitude',0.026,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); +INSERT INTO "usage" VALUES('EPSG','9285','other_transformation','EPSG','5202','EPSG','1079','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5203','Baltic 1977 height to EVRF2007 height (2)','Determined at 52 points. RMS residual 0.004m, maximum residual 0.007m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',58.42,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.52,'EPSG','9110','EPSG','8603','Vertical Offset',0.195,'EPSG','9001','EPSG','8730','Inclination in latitude',0.009,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.013,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Est',0); +INSERT INTO "usage" VALUES('EPSG','9286','other_transformation','EPSG','5203','EPSG','3246','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5204','Baltic 1977 height to EVRF2007 height (3)','Determined at 30 points. RMS residual 0.013m, maximum residual 0.022m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',55.18,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.01,'EPSG','9110','EPSG','8603','Vertical Offset',0.121,'EPSG','9001','EPSG','8730','Inclination in latitude',0.053,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ltu',0); +INSERT INTO "usage" VALUES('EPSG','9287','other_transformation','EPSG','5204','EPSG','3272','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5205','Constanta height to EVRF2000 height (1)','Determined at 46 points. RMS residual 0.002m, maximum residual 0.009m.','EPSG','1046','Vertical Offset and Slope','EPSG','5781','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.01,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.49,'EPSG','9110','EPSG','8603','Vertical Offset',0.028,'EPSG','9001','EPSG','8730','Inclination in latitude',0.002,'EPSG','9104','EPSG','8731','Inclination in longitude',0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou',0); +INSERT INTO "usage" VALUES('EPSG','9288','other_transformation','EPSG','5205','EPSG','3295','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5206','Constanta height to EVRF2007 height (1)','Determined at 48 points. RMS residual 0.004m, maximum residual 0.013m.','EPSG','1046','Vertical Offset and Slope','EPSG','5781','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.01,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.49,'EPSG','9110','EPSG','8603','Vertical Offset',0.062,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.005,'EPSG','9104','EPSG','8731','Inclination in longitude',0.008,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou',0); +INSERT INTO "usage" VALUES('EPSG','9289','other_transformation','EPSG','5206','EPSG','3295','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5207','LN02 height to EVRF2007 height (1)','Determined at 240 points. RMS residual 0.031m, maximum residual 0.085m','EPSG','1046','Vertical Offset and Slope','EPSG','5728','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.11,'EPSG','9110','EPSG','8603','Vertical Offset',-0.225,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.221,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.033,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che',0); +INSERT INTO "usage" VALUES('EPSG','9290','other_transformation','EPSG','5207','EPSG','1286','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5208','RH2000 height to EVRF2007 height (1)','Determined at 3353 points. RMS residual 0.001m, maximum residual 0.004m.','EPSG','1046','Vertical Offset and Slope','EPSG','5613','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',61.54,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.48,'EPSG','9110','EPSG','8603','Vertical Offset',-0.008,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.0006,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.0003,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe',0); +INSERT INTO "usage" VALUES('EPSG','9291','other_transformation','EPSG','5208','EPSG','3313','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5209','Baltic 1977 height to EVRF2000 height (5)','Determined at 123 points. RMS residual 0.007m, maximum residual 0.022m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.58,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.53,'EPSG','9110','EPSG','8603','Vertical Offset',0.105,'EPSG','9001','EPSG','8730','Inclination in latitude',0.0,'EPSG','9104','EPSG','8731','Inclination in longitude',0.004,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva',0); +INSERT INTO "usage" VALUES('EPSG','9292','other_transformation','EPSG','5209','EPSG','3268','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5210','Baltic 1977 height to EVRF2007 height (4)','Determined at 122 points. RMS residual 0.007m, maximum residual 0.019m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.58,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.53,'EPSG','9110','EPSG','8603','Vertical Offset',0.154,'EPSG','9001','EPSG','8730','Inclination in latitude',0.016,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.012,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva',0); +INSERT INTO "usage" VALUES('EPSG','9293','other_transformation','EPSG','5210','EPSG','3268','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5211','DHHN92 height to EVRF2007 height (1)','Determined at 427 points. RMS residual 0.002m, maximum residual 0.007m.','EPSG','1046','Vertical Offset and Slope','EPSG','5783','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',10.13,'EPSG','9110','EPSG','8603','Vertical Offset',0.015,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.01,'EPSG','9104','EPSG','8731','Inclination in longitude',0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu',0); +INSERT INTO "usage" VALUES('EPSG','9294','other_transformation','EPSG','5211','EPSG','3339','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5212','DHHN85 height to EVRF2007 height (1)','Determined at 357 points. RMS residual 0.004m, maximum residual 0.012m.','EPSG','1046','Vertical Offset and Slope','EPSG','5784','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.4,'EPSG','9110','EPSG','8603','Vertical Offset',0.017,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.011,'EPSG','9104','EPSG','8731','Inclination in longitude',0.005,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu W',0); +INSERT INTO "usage" VALUES('EPSG','9295','other_transformation','EPSG','5212','EPSG','2326','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5213','Genoa 1942 height to EVRF2000 height (1)','Determined at 40 points. RMS residual 0.035m, maximum residual 0.086m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.35,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',12.58,'EPSG','9110','EPSG','8603','Vertical Offset',-0.309,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.03,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita pen',0); +INSERT INTO "usage" VALUES('EPSG','9296','other_transformation','EPSG','5213','EPSG','2372','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5215','Genoa 1942 height to EVRF2007 height (1)','Determined at 47 points. RMS residual 0.035m, maximum residual 0.088m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.35,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',12.58,'EPSG','9110','EPSG','8603','Vertical Offset',-0.259,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.036,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita pen',0); +INSERT INTO "usage" VALUES('EPSG','9297','other_transformation','EPSG','5215','EPSG','2372','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5216','Genoa 1942 height to EVRF2000 height (2)','Determined at 4 points. RMS residual 0.026m, maximum residual 0.020m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',37.3,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.18,'EPSG','9110','EPSG','8603','Vertical Offset',-0.402,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.079,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita Sci',0); +INSERT INTO "usage" VALUES('EPSG','9298','other_transformation','EPSG','5216','EPSG','2340','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5217','Genoa 1942 height to EVRF2007 height (2)','Determined at 6 points. RMS residual 0.021m, maximum residual 0.032m.','EPSG','1046','Vertical Offset and Slope','EPSG','5214','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',37.3,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.18,'EPSG','9110','EPSG','8603','Vertical Offset',-0.333,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.051,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ita Sci',0); +INSERT INTO "usage" VALUES('EPSG','9299','other_transformation','EPSG','5217','EPSG','2340','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5238','S-JTSK/05 (Ferro) to S-JTSK/05 (1)','','EPSG','9601','Longitude rotation','EPSG','5229','EPSG','5228',0.0,'EPSG','8602','Longitude offset',-17.4,'EPSG','9110',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,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-Cze',0); INSERT INTO "usage" VALUES('EPSG','9310','other_transformation','EPSG','5238','EPSG','1079','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','5241','S-JTSK to S-JTSK/05 (1)','S-JTSK/05 is derived from the R05 realisation of ETRS89 and constrained to be coincident with S-JTSK.','EPSG','9619','Geographic2D offsets','EPSG','4156','EPSG','5228',0.0,'EPSG','8601','Latitude offset',0.0,'EPSG','9104','EPSG','8602','Longitude offset',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CUZK-Cze',0); @@ -336,14 +380,44 @@ INSERT INTO "other_transformation" VALUES('EPSG','5413','KOC CD height to KOC WD INSERT INTO "usage" VALUES('EPSG','9381','other_transformation','EPSG','5413','EPSG','3267','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5414','KOC WD to Kuwait PWD (1)','Well datum is 4.25m above PWD datum.','EPSG','9616','Vertical Offset','EPSG','5789','EPSG','5788',0.1,'EPSG','8603','Vertical Offset',-4.25,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9382','other_transformation','EPSG','5414','EPSG','1136','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5415','GHA height to EVRF2000 height (1)','Determined at 114 points. RMS residual 0.031m, maximum residual 0.061m.','EPSG','1046','Vertical Offset and Slope','EPSG','5778','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',47.32,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.27,'EPSG','9110','EPSG','8603','Vertical Offset',-0.356,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.057,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.058,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut',0); +INSERT INTO "usage" VALUES('EPSG','9383','other_transformation','EPSG','5415','EPSG','1037','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5416','Baltic 1982 height to EVRF2000 height (1)','Determined at 36 points. RMS residual 0.002m, maximum residual 0.006m.','EPSG','1046','Vertical Offset and Slope','EPSG','5786','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',42.373,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.2236,'EPSG','9110','EPSG','8603','Vertical Offset',0.182,'EPSG','9001','EPSG','8730','Inclination in latitude',0.001,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.004,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr',0); +INSERT INTO "usage" VALUES('EPSG','9384','other_transformation','EPSG','5416','EPSG','3224','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5417','DNN height to EVRF2000 height (1)','Determined at 707 points. RMS residual 0.003m, maximum residual 0.009m.','EPSG','1046','Vertical Offset and Slope','EPSG','5733','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.02,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',9.14,'EPSG','9110','EPSG','8603','Vertical Offset',0.011,'EPSG','9001','EPSG','8730','Inclination in latitude',0.003,'EPSG','9104','EPSG','8731','Inclination in longitude',0.011,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Den',0); +INSERT INTO "usage" VALUES('EPSG','9385','other_transformation','EPSG','5417','EPSG','3237','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5419','NGF IGN69 height to EVRF2000 height (1)','Determined at 8 points. RMS residual 0.005m, maximum residual 0.010m. The IGN69 vertical reference surface is below the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5720','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',-0.486,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Fra',0); INSERT INTO "usage" VALUES('EPSG','9387','other_transformation','EPSG','5419','EPSG','1326','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5420','DHHN92 height to EVRF2000 height (1)','Determined at 443 points. RMS residual 0.002m, maximum residual 0.007m.','EPSG','1046','Vertical Offset and Slope','EPSG','5783','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',10.13,'EPSG','9110','EPSG','8603','Vertical Offset',0.014,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.001,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu',0); +INSERT INTO "usage" VALUES('EPSG','9388','other_transformation','EPSG','5420','EPSG','3339','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5421','DHHN85 height to EVRF2000 height (1)','Determined at 363 points. RMS residual 0.004m, maximum residual 0.026m.','EPSG','1046','Vertical Offset and Slope','EPSG','5784','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.4,'EPSG','9110','EPSG','8603','Vertical Offset',0.017,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.002,'EPSG','9104','EPSG','8731','Inclination in longitude',0.003,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu W',0); +INSERT INTO "usage" VALUES('EPSG','9389','other_transformation','EPSG','5421','EPSG','2326','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5422','SNN76 height to EVRF2000 height (1)','Determined at 73 points. RMS residual 0.004m, maximum residual 0.011m.','EPSG','1046','Vertical Offset and Slope','EPSG','5785','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',52.32,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',13.1,'EPSG','9110','EPSG','8603','Vertical Offset',0.157,'EPSG','9001','EPSG','8730','Inclination in latitude',0.007,'EPSG','9104','EPSG','8731','Inclination in longitude',0.005,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu E',0); +INSERT INTO "usage" VALUES('EPSG','9390','other_transformation','EPSG','5422','EPSG','1343','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5424','EOMA height 1980 to EVRF2000 height (1)','Determined at 35 points. RMS residual 0.003m.','EPSG','1046','Vertical Offset and Slope','EPSG','5787','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.59,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',19.35,'EPSG','9110','EPSG','8603','Vertical Offset',0.14,'EPSG','9001','EPSG','8730','Inclination in latitude',0.008,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hun',0); +INSERT INTO "usage" VALUES('EPSG','9392','other_transformation','EPSG','5424','EPSG','1119','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5425','NAP height to EVRF2000 height (1)','Determined at 757 points. RMS residual 0.002m, maximum residual 0.021m. The NAP vertical reference surface is below the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5709','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',-0.005,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Nld',0); INSERT INTO "usage" VALUES('EPSG','9393','other_transformation','EPSG','5425','EPSG','1275','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5426','NN54 height to EVRF2000 height (1)','Determined at 117 points. RMS residual 0.037m, maximum residual 0.076m.','EPSG','1046','Vertical Offset and Slope','EPSG','5776','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',62.56,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',11.1,'EPSG','9110','EPSG','8603','Vertical Offset',-0.001,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.01,'EPSG','9104','EPSG','8731','Inclination in longitude',0.034,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Nor',0); +INSERT INTO "usage" VALUES('EPSG','9394','other_transformation','EPSG','5426','EPSG','1352','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5427','Cascais height to EVRF2000 height (1)','Determined at 5 points. RMS residual 0.013m, maximum residual 0.021m. The Cascais vertical reference surface is below the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5780','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',-0.315,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Prt',0); INSERT INTO "usage" VALUES('EPSG','9395','other_transformation','EPSG','5427','EPSG','1294','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5428','NVN99 height to EVRF2000 height (1)','Determined at 9 points. RMS residual 0.003m, maximum residual 0.004m.','EPSG','1046','Vertical Offset and Slope','EPSG','5779','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.0,'EPSG','9102','EPSG','8618','Ordinate 2 of evaluation point',15.0,'EPSG','9102','EPSG','8603','Vertical Offset',-0.411,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.033,'EPSG','9104','EPSG','8731','Inclination in longitude',0.008,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn',0); +INSERT INTO "usage" VALUES('EPSG','9396','other_transformation','EPSG','5428','EPSG','3307','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5429','Alicante height to EVRF2000 height (1)','Determined at 70 points. RMS residual 0.010m.','EPSG','1046','Vertical Offset and Slope','EPSG','5782','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',40.462,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',-3.3935,'EPSG','9110','EPSG','8603','Vertical Offset',-0.486,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.003,'EPSG','9104','EPSG','8731','Inclination in longitude',0.006,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Esp',0); +INSERT INTO "usage" VALUES('EPSG','9397','other_transformation','EPSG','5429','EPSG','4188','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5430','RH70 height to EVRF2000 height (1)','Determined at 21 points. RMS residual 0.011m, maximum residual 0.023m. Not recognised by National Land Survey of Sweden. No longer supported by information source.','EPSG','1046','Vertical Offset and Slope','EPSG','5718','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',64.0,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',16.14,'EPSG','9110','EPSG','8603','Vertical Offset',0.005,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.012,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe',0); +INSERT INTO "usage" VALUES('EPSG','9398','other_transformation','EPSG','5430','EPSG','3313','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5431','LN02 height to EVRF2000 height (1)','Determined at 225 points. RMS residual 0.033m, maximum residual 0.094m','EPSG','1046','Vertical Offset and Slope','EPSG','5728','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',46.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',8.11,'EPSG','9110','EPSG','8603','Vertical Offset',-0.245,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.21,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.032,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che',0); +INSERT INTO "usage" VALUES('EPSG','9399','other_transformation','EPSG','5431','EPSG','1286','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5432','N60 height to EVRF2000 height (1)','Determined at 66 points. RMS residual 0.003m, maximum residual 0.009m. The N60 vertical reference surface is above the EVRF2000 vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5717','EPSG','5730',0.1,'EPSG','8603','Vertical Offset',0.213,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Fin',0); INSERT INTO "usage" VALUES('EPSG','9400','other_transformation','EPSG','5432','EPSG','3333','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5435','Baltic 1957 height to EVRF2000 height (3)','Determined at 3 points. RMS residual 0.002m, maximum residual 0.001m.','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',48.38,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',19.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.122,'EPSG','9001','EPSG','8730','Inclination in latitude',0.02,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svk',0); +INSERT INTO "usage" VALUES('EPSG','9403','other_transformation','EPSG','5435','EPSG','1211','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5436','Baltic 1977 height to EVRF2000 height (1)','Determined at 36 points. RMS residual 0.003m, maximum residual 0.005m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',58.42,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',25.52,'EPSG','9110','EPSG','8603','Vertical Offset',0.133,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.014,'EPSG','9104','EPSG','8731','Inclination in longitude',0.005,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Est',0); +INSERT INTO "usage" VALUES('EPSG','9404','other_transformation','EPSG','5436','EPSG','3246','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5437','Baltic 1977 height to EVRF2000 height (2)','Determined at 46 points. RMS residual 0.002m, maximum residual 0.003m.','EPSG','1046','Vertical Offset and Slope','EPSG','5705','EPSG','5730',0.1,'EPSG','8617','Ordinate 1 of evaluation point',55.18,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.01,'EPSG','9110','EPSG','8603','Vertical Offset',0.102,'EPSG','9001','EPSG','8730','Inclination in latitude',0.0,'EPSG','9104','EPSG','8731','Inclination in longitude',0.002,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Ltu',0); +INSERT INTO "usage" VALUES('EPSG','9405','other_transformation','EPSG','5437','EPSG','3272','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5438','Baltic 1977 height to Caspian height (1)','Baltic 1977 vertical reference surface is 28m above Caspian vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5705','EPSG','5611',0.0,'EPSG','8603','Vertical Offset',28.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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Caspian Sea',0); INSERT INTO "usage" VALUES('EPSG','9406','other_transformation','EPSG','5438','EPSG','1291','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','5440','Baltic 1977 depth to Caspian depth (1)','The Baltic 1977 vertical reference surface is 28m above the Caspian vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','5612','EPSG','5706',0.0,'EPSG','8603','Vertical Offset',-28.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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Caspian Sea',0); @@ -374,12 +448,18 @@ INSERT INTO "other_transformation" VALUES('EPSG','5454','HKPD height to HKCD dep INSERT INTO "usage" VALUES('EPSG','9421','other_transformation','EPSG','5454','EPSG','1118','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','5455','KOC WD depth to Kuwait PWD height (1)','Well Datum datum plane is 4.25m above PWD datum plane.','EPSG','9616','Vertical Offset','EPSG','5789','EPSG','5788',0.1,'EPSG','8603','Vertical Offset',4.25,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'KOC-Kwt',1); INSERT INTO "usage" VALUES('EPSG','9422','other_transformation','EPSG','5455','EPSG','3267','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','5557','GHA height to EVRF2007 height (1)','Determined at 108 points. RMS residual 0.032m, maximum residual 0.063m.','EPSG','1046','Vertical Offset and Slope','EPSG','5778','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',47.32,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',14.27,'EPSG','9110','EPSG','8603','Vertical Offset',-0.335,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.065,'EPSG','9104','EPSG','8731','Inclination in longitude',-0.06,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut',0); +INSERT INTO "usage" VALUES('EPSG','9471','other_transformation','EPSG','5557','EPSG','1037','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','6699','JGD2000 (vertical) height to JGD2011 (vertical) height (1)','Excludes areas of eastern Honshu affected by 2008 Iwate-Miyagi and 2011 Tohoku earthquakes (Aomori, Iwate, Miyagi, Akita, Yamagata, Fukushima and Ibaraki prefectures).','EPSG','9616','Vertical Offset','EPSG','6694','EPSG','6695',0.01,'EPSG','8603','Vertical Offset',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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Jpn ex E Honshu',0); INSERT INTO "usage" VALUES('EPSG','9735','other_transformation','EPSG','6699','EPSG','4165','EPSG','1235'); INSERT INTO "other_transformation" VALUES('EPSG','7653','EGM96 height to Kumul 34 height (1)','Defines Kumul 34 heights.','EPSG','9616','Vertical Offset','EPSG','5773','EPSG','7651',0.0,'EPSG','8603','Vertical Offset',-0.87,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Kumul34',0); INSERT INTO "usage" VALUES('EPSG','10195','other_transformation','EPSG','7653','EPSG','4013','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','7654','EGM2008 height to Kiunga height (1)','Defines Kiunga heights.','EPSG','9616','Vertical Offset','EPSG','3855','EPSG','7652',0.0,'EPSG','8603','Vertical Offset',-3.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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Kiunga',0); INSERT INTO "usage" VALUES('EPSG','10196','other_transformation','EPSG','7654','EPSG','4383','EPSG','1133'); +INSERT INTO "other_transformation" VALUES('EPSG','7701','Latvia 2000 height to EVRF2007 height (1)','Determined at 82 points. RMS residual 0.010, maximum residual 0.019m.','EPSG','1046','Vertical Offset and Slope','EPSG','7700','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',56.58,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',24.53,'EPSG','9110','EPSG','8603','Vertical Offset',0.003,'EPSG','9001','EPSG','8730','Inclination in latitude',0.0,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0074,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva',0); +INSERT INTO "usage" VALUES('EPSG','10216','other_transformation','EPSG','7701','EPSG','3268','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','7838','DHHN2016 height to EVRF2007 height (1)','Determined at 425 points. RMS residual 0.017m, maximum residual 0.061m.','EPSG','1046','Vertical Offset and Slope','EPSG','7837','EPSG','5621',0.1,'EPSG','8617','Ordinate 1 of evaluation point',51.03,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',10.13,'EPSG','9110','EPSG','8603','Vertical Offset',0.014,'EPSG','9001','EPSG','8730','Inclination in latitude',-0.01,'EPSG','9104','EPSG','8731','Inclination in longitude',0.0,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu',0); +INSERT INTO "usage" VALUES('EPSG','10292','other_transformation','EPSG','7838','EPSG','3339','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','7873','EGM96 height to POM96 height (1)','Defines POM96 heights.','EPSG','9616','Vertical Offset','EPSG','5773','EPSG','7832',0.0,'EPSG','8603','Vertical Offset',-1.58,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Gulf-Cen',0); INSERT INTO "usage" VALUES('EPSG','10307','other_transformation','EPSG','7873','EPSG','4425','EPSG','1133'); INSERT INTO "other_transformation" VALUES('EPSG','7874','EGM2008 height to POM08 height (1)','Defines POM08 heights.','EPSG','9616','Vertical Offset','EPSG','3855','EPSG','7841',0.0,'EPSG','8603','Vertical Offset',-0.93,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'QC-Png Gulf-Cen',0); @@ -452,6 +532,10 @@ INSERT INTO "other_transformation" VALUES('EPSG','9562','ODN height to EVRF2019 INSERT INTO "usage" VALUES('EPSG','14640','other_transformation','EPSG','9562','EPSG','2792','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9726','Genoa 1942 height to Catania 1965 height (1)','','EPSG','9616','Vertical Offset','EPSG','5214','EPSG','9721',0.01,'EPSG','8603','Vertical Offset',0.141,'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,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGMI-Ita Sicily',0); INSERT INTO "usage" VALUES('EPSG','15279','other_transformation','EPSG','9726','EPSG','2340','EPSG','1184'); +INSERT INTO "other_transformation" VALUES('EPSG','9744','Baltic 1957 height to EVRF2019 mean-tide height (1)','Determined at 242 points. RMS residual 0.012m, maximum residual 0.028m. Approximates the official transformation available through the CUZK transformation service at https://geoportal.cuzk.cz/ for comparison with transformation to EVRF2007 (CT 5202).','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','9390',0.01,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.13,'EPSG','9001','EPSG','8730','Inclination in latitude',0.036,'EPSG','9104','EPSG','8731','Inclination in longitude',0.006,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); +INSERT INTO "usage" VALUES('EPSG','15350','other_transformation','EPSG','9744','EPSG','1079','EPSG','1059'); +INSERT INTO "other_transformation" VALUES('EPSG','9745','Baltic 1957 height to EVRF2019 height (1)','Determined at 242 points. RMS residual 0.012m, maximum residual 0.029m. Approximates the official transformation available through the CUZK transformation service at https://geoportal.cuzk.cz/ for comparison with transformation to EVRF2007 (CT 5202).','EPSG','1046','Vertical Offset and Slope','EPSG','8357','EPSG','9389',0.01,'EPSG','8617','Ordinate 1 of evaluation point',49.55,'EPSG','9110','EPSG','8618','Ordinate 2 of evaluation point',15.15,'EPSG','9110','EPSG','8603','Vertical Offset',0.142,'EPSG','9001','EPSG','8730','Inclination in latitude',0.026,'EPSG','9104','EPSG','8731','Inclination in longitude',0.006,'EPSG','9104',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Cze',0); +INSERT INTO "usage" VALUES('EPSG','15351','other_transformation','EPSG','9745','EPSG','1079','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','10087','Jamaica 1875 / Jamaica (Old Grid) to JAD69 / Jamaica National Grid (1)','Derived by least squares fit at primary triangulation stations. Accuracy will be less outside of this network due to extrapolation.','EPSG','9624','Affine parametric transformation','EPSG','24100','EPSG','24200',1.5,'EPSG','8623','A0',82357.457,'EPSG','9001','EPSG','8624','A1',0.304794369,'EPSG','9203','EPSG','8625','A2',1.5417425e-05,'EPSG','9203','EPSG','8639','B0',28091.324,'EPSG','9001','EPSG','8640','B1',-1.5417425e-05,'EPSG','9203','EPSG','8641','B2',0.304794369,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0); INSERT INTO "usage" VALUES('EPSG','11088','other_transformation','EPSG','10087','EPSG','3342','EPSG','1153'); INSERT INTO "other_transformation" VALUES('EPSG','10088','JAD69 / Jamaica National Grid to Jamaica 1875 / Jamaica (Old Grid) (1)','Derived by least squares fit at primary triangulation stations. Accuracy will be less outside of this network due to extrapolation.','EPSG','9624','Affine parametric transformation','EPSG','24200','EPSG','24100',1.5,'EPSG','8623','A0',-270201.96,'EPSG','9005','EPSG','8624','A1',0.00016595792,'EPSG','9203','EPSG','8625','A2',3.2809005,'EPSG','9203','EPSG','8639','B0',-92178.51,'EPSG','9005','EPSG','8640','B1',3.2809005,'EPSG','9203','EPSG','8641','B2',-0.00016595792,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',1); diff --git a/scripts/build_db.py b/scripts/build_db.py index 263756c925..7e3cf98a0b 100755 --- a/scripts/build_db.py +++ b/scripts/build_db.py @@ -669,7 +669,8 @@ def fill_other_transformation(proj_db_cursor): # 9660: Geographic3D offsets # 1068: Height Depth Reversal # 1069: Change of Vertical Unit - proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_method_code IN (9601, 9616, 9618, 9619, 9624, 9660, 1068, 1069)") + # 1046: Vertical Offset and Slope + proj_db_cursor.execute("SELECT coord_op_code, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, epsg_coordoperation.deprecated, epsg_coordoperation.remarks FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_method_code IN (9601, 9616, 9618, 9619, 9624, 9660, 1068, 1069, 1046)") for (code, name, method_code, method_name, source_crs_code, target_crs_code, coord_op_accuracy, coord_tfm_version, deprecated, remarks) in proj_db_cursor.fetchall(): # 1068 and 1069 are Height Depth Reversal and Change of Vertical Unit @@ -700,11 +701,19 @@ def fill_other_transformation(proj_db_cursor): param_value = [None for i in range(max_n_params)] param_uom_auth_name = [None for i in range(max_n_params)] param_uom_code = [None for i in range(max_n_params)] + interpolation_crs_auth_name = None + interpolation_crs_code = None iterator = proj_db_cursor.execute("SELECT sort_order, cop.parameter_code, parameter_name, parameter_value, uom_code from epsg_coordoperationparam cop LEFT JOIN epsg_coordoperationparamvalue copv LEFT JOIN epsg_coordoperationparamusage copu ON cop.parameter_code = copv.parameter_code AND copu.parameter_code = copv.parameter_code WHERE copu.coord_op_method_code = copv.coord_op_method_code AND coord_op_code = ? AND copv.coord_op_method_code = ? ORDER BY sort_order", (code, method_code)) for (order, parameter_code, parameter_name, parameter_value, uom_code) in iterator: assert order <= max_n_params assert order == expected_order + if method_code == 1046 and order == 6: # Vertical offset and slope + assert parameter_code == 1037 # EPSG code for Horizontal CRS + interpolation_crs_auth_name = EPSG_AUTHORITY + interpolation_crs_code = str(int(parameter_value)) # needed to avoid codes like XXXX.0 + break + param_auth_name[order - 1] = EPSG_AUTHORITY param_code[order - 1] = parameter_code param_name[order - 1] = parameter_name @@ -713,6 +722,7 @@ def fill_other_transformation(proj_db_cursor): param_uom_code[order - 1] = uom_code expected_order += 1 + arg = (EPSG_AUTHORITY, code, name, remarks, EPSG_AUTHORITY, method_code, method_name, @@ -733,7 +743,7 @@ def fill_other_transformation(proj_db_cursor): param_uom_auth_name[5], param_uom_code[5], param_auth_name[6], param_code[6], param_name[6], param_value[6], param_uom_auth_name[6], param_uom_code[6], - None, None, # interpolation CRS + interpolation_crs_auth_name, interpolation_crs_code, coord_tfm_version, deprecated) diff --git a/src/iso19111/operation/parammappings.cpp b/src/iso19111/operation/parammappings.cpp index dd94e26706..7a9f59b273 100644 --- a/src/iso19111/operation/parammappings.cpp +++ b/src/iso19111/operation/parammappings.cpp @@ -966,6 +966,7 @@ const struct MethodNameCode methodNameCodes[] = { METHOD_NAME_CODE(GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS), METHOD_NAME_CODE(GEOGRAPHIC3D_OFFSETS), METHOD_NAME_CODE(VERTICAL_OFFSET), + METHOD_NAME_CODE(VERTICAL_OFFSET_AND_SLOPE), METHOD_NAME_CODE(NTV2), METHOD_NAME_CODE(NTV1), METHOD_NAME_CODE(NADCON), @@ -1050,6 +1051,8 @@ const struct ParamNameCode paramNameCodes[] = { PARAM_NAME_CODE(ORDINATE_2_EVAL_POINT), PARAM_NAME_CODE(ORDINATE_3_EVAL_POINT), PARAM_NAME_CODE(GEOCENTRIC_TRANSLATION_FILE), + PARAM_NAME_CODE(INCLINATION_IN_LATITUDE), + PARAM_NAME_CODE(INCLINATION_IN_LONGITUDE), }; const ParamNameCode *getParamNameCodes(size_t &nElts) { @@ -1256,6 +1259,21 @@ static const ParamMapping *const paramsGeographic3DOffsets[] = { static const ParamMapping *const paramsVerticalOffsets[] = { ¶mVerticalOffset, nullptr}; +static const ParamMapping paramInclinationInLatitude = { + EPSG_NAME_PARAMETER_INCLINATION_IN_LATITUDE, + EPSG_CODE_PARAMETER_INCLINATION_IN_LATITUDE, nullptr, + common::UnitOfMeasure::Type::ANGULAR, nullptr}; + +static const ParamMapping paramInclinationInLongitude = { + EPSG_NAME_PARAMETER_INCLINATION_IN_LONGITUDE, + EPSG_CODE_PARAMETER_INCLINATION_IN_LONGITUDE, nullptr, + common::UnitOfMeasure::Type::ANGULAR, nullptr}; + +static const ParamMapping *const paramsVerticalOffsetAndSlope[] = { + ¶mOrdinate1EvalPoint, ¶mOrdinate2EvalPoint, + ¶mVerticalOffset, ¶mInclinationInLatitude, + ¶mInclinationInLongitude, nullptr}; + static const ParamMapping paramLatitudeLongitudeDifferenceFile = { EPSG_NAME_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, EPSG_CODE_PARAMETER_LATITUDE_LONGITUDE_DIFFERENCE_FILE, nullptr, @@ -1450,6 +1468,10 @@ static const MethodMapping otherMethodMappings[] = { {EPSG_NAME_METHOD_VERTICAL_OFFSET, EPSG_CODE_METHOD_VERTICAL_OFFSET, nullptr, nullptr, nullptr, paramsVerticalOffsets}, + {EPSG_NAME_METHOD_VERTICAL_OFFSET_AND_SLOPE, + EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE, nullptr, nullptr, nullptr, + paramsVerticalOffsetAndSlope}, + {EPSG_NAME_METHOD_NTV2, EPSG_CODE_METHOD_NTV2, nullptr, nullptr, nullptr, paramsNTV2}, diff --git a/src/iso19111/operation/transformation.cpp b/src/iso19111/operation/transformation.cpp index 5123c30a00..36530df1a8 100644 --- a/src/iso19111/operation/transformation.cpp +++ b/src/iso19111/operation/transformation.cpp @@ -2991,6 +2991,66 @@ void Transformation::_exportToPROJString( return; } + if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE) { + + const crs::CRS *srcCRS = sourceCRS().get(); + const crs::CRS *tgtCRS = targetCRS().get(); + + const auto sourceCRSCompound = + dynamic_cast(srcCRS); + const auto targetCRSCompound = + dynamic_cast(tgtCRS); + if (sourceCRSCompound && targetCRSCompound && + sourceCRSCompound->componentReferenceSystems()[0]->_isEquivalentTo( + targetCRSCompound->componentReferenceSystems()[0].get(), + util::IComparable::Criterion::EQUIVALENT)) { + srcCRS = sourceCRSCompound->componentReferenceSystems()[1].get(); + tgtCRS = targetCRSCompound->componentReferenceSystems()[1].get(); + } + + auto sourceCRSVert = dynamic_cast(srcCRS); + if (!sourceCRSVert) { + throw io::FormattingException( + "Can apply Vertical offset and slope only to VerticalCRS"); + } + + auto targetCRSVert = dynamic_cast(tgtCRS); + if (!targetCRSVert) { + throw io::FormattingException( + "Can apply Vertical offset and slope only to VerticalCRS"); + } + + const auto latitudeEvaluationPoint = + parameterValueNumeric(EPSG_CODE_PARAMETER_ORDINATE_1_EVAL_POINT, + common::UnitOfMeasure::DEGREE); + const auto longitudeEvaluationPoint = + parameterValueNumeric(EPSG_CODE_PARAMETER_ORDINATE_2_EVAL_POINT, + common::UnitOfMeasure::DEGREE); + const auto offsetHeight = + parameterValueNumericAsSI(EPSG_CODE_PARAMETER_VERTICAL_OFFSET); + const auto inclinationLatitude = + parameterValueNumeric(EPSG_CODE_PARAMETER_INCLINATION_IN_LATITUDE, + common::UnitOfMeasure::ARC_SECOND); + const auto inclinationLongitude = + parameterValueNumeric(EPSG_CODE_PARAMETER_INCLINATION_IN_LONGITUDE, + common::UnitOfMeasure::ARC_SECOND); + + formatter->startInversion(); + sourceCRSVert->addLinearUnitConvert(formatter); + formatter->stopInversion(); + + formatter->addStep("vertoffset"); + formatter->addParam("lat_0", latitudeEvaluationPoint); + formatter->addParam("lon_0", longitudeEvaluationPoint); + formatter->addParam("dh", offsetHeight); + formatter->addParam("slope_lat", inclinationLatitude); + formatter->addParam("slope_lon", inclinationLongitude); + + targetCRSVert->addLinearUnitConvert(formatter); + + return; + } + // Substitute grid names with PROJ friendly names. if (formatter->databaseContext()) { auto alternate = substitutePROJAlternativeGridNames( diff --git a/src/proj_constants.h b/src/proj_constants.h index ccb3571df9..b7247a5645 100644 --- a/src/proj_constants.h +++ b/src/proj_constants.h @@ -620,6 +620,9 @@ #define EPSG_CODE_METHOD_VERTICAL_OFFSET 9616 #define EPSG_NAME_METHOD_VERTICAL_OFFSET "Vertical Offset" +#define EPSG_CODE_METHOD_VERTICAL_OFFSET_AND_SLOPE 1046 +#define EPSG_NAME_METHOD_VERTICAL_OFFSET_AND_SLOPE "Vertical Offset and Slope" + #define EPSG_CODE_METHOD_GEOGRAPHIC2D_OFFSETS 9619 #define EPSG_NAME_METHOD_GEOGRAPHIC2D_OFFSETS "Geographic2D offsets" @@ -646,6 +649,12 @@ #define EPSG_NAME_PARAMETER_GEOID_UNDULATION "Geoid undulation" #define EPSG_CODE_PARAMETER_GEOID_UNDULATION 8604 +#define EPSG_NAME_PARAMETER_INCLINATION_IN_LATITUDE "Inclination in latitude" +#define EPSG_CODE_PARAMETER_INCLINATION_IN_LATITUDE 8730 + +#define EPSG_NAME_PARAMETER_INCLINATION_IN_LONGITUDE "Inclination in longitude" +#define EPSG_CODE_PARAMETER_INCLINATION_IN_LONGITUDE 8731 + /* ------------------------------------------------------------------------ */ #define EPSG_CODE_METHOD_AFFINE_PARAMETRIC_TRANSFORMATION 9624 diff --git a/test/unit/test_operationfactory.cpp b/test/unit/test_operationfactory.cpp index 25fca584c9..d7f644f404 100644 --- a/test/unit/test_operationfactory.cpp +++ b/test/unit/test_operationfactory.cpp @@ -4789,12 +4789,27 @@ TEST( authFactory->createCoordinateReferenceSystem("8360"), // ETRS89 + EVRF2007 height authFactory->createCoordinateReferenceSystem("7423"), ctxt); - ASSERT_GE(list.size(), 1U); + ASSERT_GE(list.size(), 2U); + + // For Czechia EXPECT_EQ( list[0]->exportToPROJString(PROJStringFormatter::create().get()), "+proj=pipeline " "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +xy_out=rad " + "+step +proj=vertoffset +lat_0=49.9166666666667 " + "+lon_0=15.25 +dh=0.13 +slope_lat=0.026 +slope_lon=0 " + "+step +proj=unitconvert +xy_in=rad +xy_out=deg " + "+step +proj=axisswap +order=2,1"); + EXPECT_EQ(list[0]->nameStr(), + "Baltic 1957 height to EVRF2007 height (1)"); + + // For Slovakia + EXPECT_EQ( + list[1]->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=pipeline " + "+step +proj=axisswap +order=2,1 " + "+step +proj=unitconvert +xy_in=deg +xy_out=rad " "+step +proj=vgridshift " "+grids=sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif +multiplier=1 " "+step +inv +proj=vgridshift " @@ -4802,9 +4817,9 @@ TEST( "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); EXPECT_EQ( - list[0]->nameStr(), + list[1]->nameStr(), "ETRS89 + Baltic 1957 height to ETRS89 + EVRF2007 height (1)"); - EXPECT_EQ(list[0]->inverse()->nameStr(), "Inverse of 'ETRS89 + Baltic " + EXPECT_EQ(list[1]->inverse()->nameStr(), "Inverse of 'ETRS89 + Baltic " "1957 height to ETRS89 + " "EVRF2007 height (1)'"); } From 8bdd05fb23be5e36e27cf26eea0d2e25b41d5638 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 15 May 2022 13:38:36 +0200 Subject: [PATCH 3/3] vertoffset: add description of parameters to PROJ_HEAD() --- src/transformations/vertoffset.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/transformations/vertoffset.cpp b/src/transformations/vertoffset.cpp index a228125efc..08ae57ff7a 100644 --- a/src/transformations/vertoffset.cpp +++ b/src/transformations/vertoffset.cpp @@ -28,7 +28,9 @@ #include "proj.h" #include "proj_internal.h" -PROJ_HEAD(vertoffset, "Vertical Offset and Slope"); +PROJ_HEAD(vertoffset, "Vertical Offset and Slope") + "\n\tTransformation" + "\n\tlat_0= lon_0= dh= slope_lat= slope_lon="; namespace { // anonymous namespace struct pj_opaque_vertoffset {