From 180592073965aea5fff1e8a41f570e827264d54d Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 19 Mar 2024 11:57:39 +0100 Subject: [PATCH] Implement EPSG:9656 'Cartesian Grid Offsets' operation method, and import related records --- data/sql/other_transformation.sql | 140 +++++++++++++++++++++ include/proj/coordinateoperation.hpp | 6 + scripts/build_db.py | 7 +- scripts/reference_exported_symbols.txt | 1 + src/iso19111/operation/parammappings.cpp | 16 +++ src/iso19111/operation/singleoperation.cpp | 66 ++++++++++ src/iso19111/operation/transformation.cpp | 49 ++++++++ src/proj_constants.h | 11 ++ test/unit/test_factory.cpp | 2 - test/unit/test_operation.cpp | 74 +++++++++++ test/unit/test_operationfactory.cpp | 62 +++++++++ 11 files changed, 429 insertions(+), 5 deletions(-) diff --git a/data/sql/other_transformation.sql b/data/sql/other_transformation.sql index 78cfe33cb1..65253c96f8 100644 --- a/data/sql/other_transformation.sql +++ b/data/sql/other_transformation.sql @@ -34,6 +34,8 @@ INSERT INTO "other_transformation" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2022_DEPT INSERT INTO "usage" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2022_DEPTH_USAGE','other_transformation','PROJ','DKLAT_DEPTH_TO_DKLAT_2022_DEPTH','EPSG','4756','EPSG','1024'); INSERT INTO "other_transformation" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2023_DEPTH','DKLAT depth to DKLAT(2023) depth','Accuracy 0.5 m, from datum ensemble definition','EPSG','9616','Vertical Offset','EPSG','10552','EPSG','10550',0.5,'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,'',0); INSERT INTO "usage" VALUES('PROJ','DKLAT_DEPTH_TO_DKLAT_2023_DEPTH_USAGE','other_transformation','PROJ','DKLAT_DEPTH_TO_DKLAT_2023_DEPTH','EPSG','4756','EPSG','1024'); +INSERT INTO "other_transformation" VALUES('EPSG','1072','Palestine 1923 / Israeli CS to Israel 1993 / Israeli TM (1)','Accuracy: 1m to north and 10m to south of east-west line through Beersheba (31°15''N). For more accurate transformation contact Survey of Israel.','EPSG','9656','Cartesian Grid Offsets','EPSG','28193','EPSG','2039',3.0,'EPSG','8728','Easting offset',50000.0,'EPSG','9001','EPSG','8729','Northing offset',-500000.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,'SoI-Isr',0); +INSERT INTO "usage" VALUES('EPSG','14561','other_transformation','EPSG','1072','EPSG','2603','EPSG','1153'); INSERT INTO "other_transformation" VALUES('EPSG','1258','Bogota 1975 (Bogota) to Bogota 1975 (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4802','EPSG','4218',NULL,'EPSG','8602','Longitude offset',-74.04513,'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,'IGAC-Col',1); INSERT INTO "usage" VALUES('EPSG','8179','other_transformation','EPSG','1258','EPSG','1070','EPSG','1100'); INSERT INTO "other_transformation" VALUES('EPSG','1259','Lisbon (Lisbon) to Lisbon (Greenwich)','','EPSG','9601','Longitude rotation','EPSG','4803','EPSG','4207',NULL,'EPSG','8602','Longitude offset',-9.0754862,'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,'IGC-Prt',1); @@ -408,6 +410,8 @@ INSERT INTO "other_transformation" VALUES('EPSG','3960','D48/GK to D96/TM (23)', INSERT INTO "usage" VALUES('EPSG','9008','other_transformation','EPSG','3960','EPSG','2878','EPSG','1032'); INSERT INTO "other_transformation" VALUES('EPSG','3961','D48/GK to D96/TM (24)','Information source gives rotation angle of source CRS axes as 359.9979842399° using opposite rotation convention to EPSG formula.','EPSG','9621','Similarity transformation','EPSG','3912','EPSG','3794',0.2,'EPSG','8621','Ordinate 1 of evaluation point in target CRS',-371.498,'EPSG','9001','EPSG','8622','Ordinate 2 of evaluation point in target CRS',504.461,'EPSG','9001','EPSG','1061','Scale factor for source CRS axes',0.9999956084,'EPSG','9201','EPSG','8614','Rotation angle of source CRS axes',0.0020157601,'EPSG','9102',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn 24',0); INSERT INTO "usage" VALUES('EPSG','9009','other_transformation','EPSG','3961','EPSG','3346','EPSG','1032'); +INSERT INTO "other_transformation" VALUES('EPSG','4072','Karbala 1979 / UTM zone 38N to IGRS / UTM zone 38N (1)','Used on a temporary basis prior to development of IRQCON. See also Karbala 1979 to WGS 84 (2) (tfm code 5076) for an equivalent tfm using geocentric translations.','EPSG','9656','Cartesian Grid Offsets','EPSG','3392','EPSG','3891',3.0,'EPSG','8728','Easting offset',-287.54,'EPSG','9001','EPSG','8729','Northing offset',278.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,'MWR-Irq prov 2007',0); +INSERT INTO "usage" VALUES('EPSG','9034','other_transformation','EPSG','4072','EPSG','3702','EPSG','1239'); INSERT INTO "other_transformation" VALUES('EPSG','4441','NZVD2009 height to One Tree Point 1964 height (1)','Accuracy 0.03m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5767',0.03,'EPSG','8603','Vertical Offset',0.06,'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 ONTP',0); INSERT INTO "usage" VALUES('EPSG','9076','other_transformation','EPSG','4441','EPSG','3762','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','4442','NZVD2009 height to Auckland 1946 height (1)','Accuracy 0.05m (1 sigma).','EPSG','9616','Vertical Offset','EPSG','4440','EPSG','5759',0.05,'EPSG','8603','Vertical Offset',0.34,'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 AUCK',0); @@ -436,6 +440,56 @@ INSERT INTO "other_transformation" VALUES('EPSG','4453','NZVD2009 height to Dune 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','5045','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (4)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-347, dY=180 and dZ=156m. Other maps give different values - see tfm code 5081','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',372.0,'EPSG','9001','EPSG','8729','Northing offset',196.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,'MoO-Irq map A sheet 3',1); +INSERT INTO "usage" VALUES('EPSG','9184','other_transformation','EPSG','5045','EPSG','3719','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5046','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (12)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-319, dY=185 and dZ=188m. Other maps give different values - see tfm code 5089.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',229.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,'MoO-Irq map A sheet 14',1); +INSERT INTO "usage" VALUES('EPSG','9185','other_transformation','EPSG','5046','EPSG','3728','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5047','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (13)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-306, dY=196 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.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,'MoO-Irq map A sheet 13',1); +INSERT INTO "usage" VALUES('EPSG','9186','other_transformation','EPSG','5047','EPSG','3729','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5076','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (18)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-329, dY=176 and dZ=151m. Other maps give different values - see tfm code 5092.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.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,'MoO-Irq map A sheet 17',1); +INSERT INTO "usage" VALUES('EPSG','9210','other_transformation','EPSG','5076','EPSG','3704','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5079','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (1)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-346, dY=216 and dZ=156m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',386.0,'EPSG','9001','EPSG','8729','Northing offset',204.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,'MoO-Irq map B sheet 1',1); +INSERT INTO "usage" VALUES('EPSG','9213','other_transformation','EPSG','5079','EPSG','3714','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5080','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (2)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-351, dY=190 and dZ=171m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',383.0,'EPSG','9001','EPSG','8729','Northing offset',205.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,'MoO-Irq map B sheet 2',1); +INSERT INTO "usage" VALUES('EPSG','9214','other_transformation','EPSG','5080','EPSG','3717','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5081','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (3)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-351, dY=184 and dZ=156m. Other maps give different values - see tfm code 5045.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',378.0,'EPSG','9001','EPSG','8729','Northing offset',196.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,'MoO-Irq map B sheet 3',1); +INSERT INTO "usage" VALUES('EPSG','9215','other_transformation','EPSG','5081','EPSG','3719','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5082','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (5)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations fromn Nahrwan 1967 to Karbala 1979 of dX=-337, dY=192 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',375.0,'EPSG','9001','EPSG','8729','Northing offset',200.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,'MoO-Irq map B sheet 5',1); +INSERT INTO "usage" VALUES('EPSG','9216','other_transformation','EPSG','5082','EPSG','3701','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5083','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (6)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-335, dY=181 and dZ=183m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',365.0,'EPSG','9001','EPSG','8729','Northing offset',196.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,'MoO-Irq map B sheet 6',1); +INSERT INTO "usage" VALUES('EPSG','9217','other_transformation','EPSG','5083','EPSG','3715','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5084','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (7)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-345, dY=182 and dZ=152m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',373.0,'EPSG','9001','EPSG','8729','Northing offset',191.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,'MoO-Irq map B sheet 7',1); +INSERT INTO "usage" VALUES('EPSG','9218','other_transformation','EPSG','5084','EPSG','3718','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5085','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (8)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-313, dY=203 and dZ=173m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.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,'MoO-Irq map B sheet 8',1); +INSERT INTO "usage" VALUES('EPSG','9219','other_transformation','EPSG','5085','EPSG','3722','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5086','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (9)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-320 dY=197 and dZ=167m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.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,'MoO-Irq map B sheet 9',1); +INSERT INTO "usage" VALUES('EPSG','9220','other_transformation','EPSG','5086','EPSG','3723','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5087','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (10)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-323, dY=179 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',200.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,'MoO-Irq map B sheet 10',1); +INSERT INTO "usage" VALUES('EPSG','9221','other_transformation','EPSG','5087','EPSG','3724','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5088','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (11)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-330, dY=176 and dZ=162m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',195.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,'MoO-Irq map B sheet 11',1); +INSERT INTO "usage" VALUES('EPSG','9222','other_transformation','EPSG','5088','EPSG','3725','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5089','Nahrwan 1967 / UTM zone 37N to Karbala 1979 / UTM zone 37N (14)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-325, dY=192 and dZ=188m. Other maps give different values - see tfm code 5046.','EPSG','9656','Cartesian Grid Offsets','EPSG','27037','EPSG','3391',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',229.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,'MoO-Irq map B sheet 14',1); +INSERT INTO "usage" VALUES('EPSG','9223','other_transformation','EPSG','5089','EPSG','3728','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5090','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (15)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-322, dY=178 and dZ=182m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',208.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,'MoO-Irq map B sheet 15',1); +INSERT INTO "usage" VALUES('EPSG','9224','other_transformation','EPSG','5090','EPSG','3709','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5091','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (16)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-325, dY=163 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.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,'MoO-Irq map B sheet 16',1); +INSERT INTO "usage" VALUES('EPSG','9225','other_transformation','EPSG','5091','EPSG','3695','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5092','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (17)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-338, dY=166 and dZ=173m. Other maps give different values - see tfm code 5076.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',211.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,'MoO-Irq map B sheet 17',1); +INSERT INTO "usage" VALUES('EPSG','9226','other_transformation','EPSG','5092','EPSG','3704','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5093','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (19)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-303, dY=185 and dZ=163m. Other maps give different values - see tfm code 5098.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',183.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,'MoO-Irq map B sheet 19',1); +INSERT INTO "usage" VALUES('EPSG','9227','other_transformation','EPSG','5093','EPSG','3706','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5094','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (20)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-319, dY=186 and dZ=160m. Other maps give different values - see tfm code 5099.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',186.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,'MoO-Irq map B sheet 20',1); +INSERT INTO "usage" VALUES('EPSG','9228','other_transformation','EPSG','5094','EPSG','3708','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5095','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (21)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-324, dY=178 and dZ=154m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',185.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,'MoO-Irq map B sheet 21',1); +INSERT INTO "usage" VALUES('EPSG','9229','other_transformation','EPSG','5095','EPSG','3710','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5096','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (24)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-313, dY=193 and dZ=153m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',175.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,'MoO-Irq map B sheet 24',1); +INSERT INTO "usage" VALUES('EPSG','9230','other_transformation','EPSG','5096','EPSG','3711','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5097','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (25)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-308, dY=177 and dZ=146m.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',343.0,'EPSG','9001','EPSG','8729','Northing offset',175.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,'MoO-Irq map B sheet 25',1); +INSERT INTO "usage" VALUES('EPSG','9231','other_transformation','EPSG','5097','EPSG','3712','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5098','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (22)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-304, dY=184 and dZ=166m. Other maps give different values - see tfm code 5093.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',186.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,'MoO-Irq map A sheet 19',1); +INSERT INTO "usage" VALUES('EPSG','9232','other_transformation','EPSG','5098','EPSG','3706','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','5099','Nahrwan 1967 / UTM zone 38N to Karbala 1979 / UTM zone 38N (23)','There is some doubt as to whether source CRS is Nahrwan 1967 or Nahrwan 1934. May be emulated using geocentric translations from Nahrwan 1967 to Karbala 1979 of dX=-320, dY=185 and dZ=162m. Other maps give different values - see tfm code 5094.','EPSG','9656','Cartesian Grid Offsets','EPSG','27038','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.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,'MoO-Irq map A sheet 20',1); +INSERT INTO "usage" VALUES('EPSG','9233','other_transformation','EPSG','5099','EPSG','3708','EPSG','1082'); 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); @@ -584,6 +638,56 @@ INSERT INTO "other_transformation" VALUES('EPSG','5557','GHA height to EVRF2007 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','7008','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (1)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-346, dY=216 and dZ=156m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',386.0,'EPSG','9001','EPSG','8729','Northing offset',204.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,'MoO-Irq map B sheet 1',0); +INSERT INTO "usage" VALUES('EPSG','9886','other_transformation','EPSG','7008','EPSG','3714','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7009','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (2)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-351, dY=190 and dZ=171m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',383.0,'EPSG','9001','EPSG','8729','Northing offset',205.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,'MoO-Irq map B sheet 2',0); +INSERT INTO "usage" VALUES('EPSG','9887','other_transformation','EPSG','7009','EPSG','3717','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7010','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (3)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-351, dY=184 and dZ=156m. Other maps give different values - see tfm code 7011.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',378.0,'EPSG','9001','EPSG','8729','Northing offset',196.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,'MoO-Irq map B sheet 3',0); +INSERT INTO "usage" VALUES('EPSG','9888','other_transformation','EPSG','7010','EPSG','3719','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7011','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (4)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-347, dY=180 and dZ=156m. Other maps give different values - see tfm code 7010.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',372.0,'EPSG','9001','EPSG','8729','Northing offset',196.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,'MoO-Irq map A sheet 3',0); +INSERT INTO "usage" VALUES('EPSG','9889','other_transformation','EPSG','7011','EPSG','3719','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7012','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (5)','May be emulated using geocentric translations fromn Nahrwan 1934 to Karbala 1979 of dX=-337, dY=192 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',375.0,'EPSG','9001','EPSG','8729','Northing offset',200.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,'MoO-Irq map B sheet 5',0); +INSERT INTO "usage" VALUES('EPSG','9890','other_transformation','EPSG','7012','EPSG','3701','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7013','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (6)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-335, dY=181 and dZ=183m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',365.0,'EPSG','9001','EPSG','8729','Northing offset',196.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,'MoO-Irq map B sheet 6',0); +INSERT INTO "usage" VALUES('EPSG','9891','other_transformation','EPSG','7013','EPSG','3715','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7014','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (7)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-345, dY=182 and dZ=152m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',373.0,'EPSG','9001','EPSG','8729','Northing offset',191.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,'MoO-Irq map B sheet 7',0); +INSERT INTO "usage" VALUES('EPSG','9892','other_transformation','EPSG','7014','EPSG','3718','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7015','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (8)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-313, dY=203 and dZ=173m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.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,'MoO-Irq map B sheet 8',0); +INSERT INTO "usage" VALUES('EPSG','9893','other_transformation','EPSG','7015','EPSG','3722','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7016','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (9)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-320 dY=197 and dZ=167m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',208.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,'MoO-Irq map B sheet 9',0); +INSERT INTO "usage" VALUES('EPSG','9894','other_transformation','EPSG','7016','EPSG','3723','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7017','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (10)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-323, dY=179 and dZ=172m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',200.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,'MoO-Irq map B sheet 10',0); +INSERT INTO "usage" VALUES('EPSG','9895','other_transformation','EPSG','7017','EPSG','3724','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7018','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (11)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-330, dY=176 and dZ=162m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',195.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,'MoO-Irq map B sheet 11',0); +INSERT INTO "usage" VALUES('EPSG','9896','other_transformation','EPSG','7018','EPSG','3725','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7019','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (12)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-319, dY=185 and dZ=188m. Other maps give different values - see tfm code 7021.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',229.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,'MoO-Irq map A sheet 14',0); +INSERT INTO "usage" VALUES('EPSG','9897','other_transformation','EPSG','7019','EPSG','3728','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7020','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (13)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-306, dY=196 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.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,'MoO-Irq map A sheet 13',0); +INSERT INTO "usage" VALUES('EPSG','9898','other_transformation','EPSG','7020','EPSG','3729','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7021','Nahrwan 1934 / UTM zone 37N to Karbala 1979 / UTM zone 37N (14)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-325, dY=192 and dZ=188m. Other maps give different values - see tfm code 7019.','EPSG','9656','Cartesian Grid Offsets','EPSG','7005','EPSG','3391',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',229.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,'MoO-Irq map B sheet 14',0); +INSERT INTO "usage" VALUES('EPSG','9899','other_transformation','EPSG','7021','EPSG','3728','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7022','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (15)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-322, dY=178 and dZ=182m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',354.0,'EPSG','9001','EPSG','8729','Northing offset',208.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,'MoO-Irq map B sheet 15',0); +INSERT INTO "usage" VALUES('EPSG','9900','other_transformation','EPSG','7022','EPSG','3709','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7023','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (16)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-325, dY=163 and dZ=181m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',214.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,'MoO-Irq map B sheet 16',0); +INSERT INTO "usage" VALUES('EPSG','9901','other_transformation','EPSG','7023','EPSG','3695','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7024','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (17)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-338, dY=166 and dZ=173m. Other maps give different values - see tfm code 7025.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',211.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,'MoO-Irq map B sheet 17',0); +INSERT INTO "usage" VALUES('EPSG','9902','other_transformation','EPSG','7024','EPSG','3704','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7025','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (18)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-329, dY=176 and dZ=151m. Other maps give different values - see tfm code 7024.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.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,'MoO-Irq map A sheet 17',0); +INSERT INTO "usage" VALUES('EPSG','9903','other_transformation','EPSG','7025','EPSG','3704','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7026','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (19)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-303, dY=185 and dZ=163m. Other maps give different values - see tfm code 7029.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',183.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,'MoO-Irq map B sheet 19',0); +INSERT INTO "usage" VALUES('EPSG','9904','other_transformation','EPSG','7026','EPSG','3706','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7027','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (20)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-319, dY=186 and dZ=160m. Other maps give different values - see tfm code 7030.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',186.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,'MoO-Irq map B sheet 20',0); +INSERT INTO "usage" VALUES('EPSG','9905','other_transformation','EPSG','7027','EPSG','3708','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7028','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (21)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-324, dY=178 and dZ=154m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',355.0,'EPSG','9001','EPSG','8729','Northing offset',185.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,'MoO-Irq map B sheet 21',0); +INSERT INTO "usage" VALUES('EPSG','9906','other_transformation','EPSG','7028','EPSG','3710','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7029','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (22)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-304, dY=184 and dZ=166m. Other maps give different values - see tfm code 7026.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',345.0,'EPSG','9001','EPSG','8729','Northing offset',186.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,'MoO-Irq map A sheet 19',0); +INSERT INTO "usage" VALUES('EPSG','9907','other_transformation','EPSG','7029','EPSG','3706','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7030','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (23)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-320, dY=185 and dZ=162m. Other maps give different values - see tfm code 7027.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',357.0,'EPSG','9001','EPSG','8729','Northing offset',188.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,'MoO-Irq map A sheet 20',0); +INSERT INTO "usage" VALUES('EPSG','9908','other_transformation','EPSG','7030','EPSG','3708','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7031','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (24)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-313, dY=193 and dZ=153m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',358.0,'EPSG','9001','EPSG','8729','Northing offset',175.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,'MoO-Irq map B sheet 24',0); +INSERT INTO "usage" VALUES('EPSG','9909','other_transformation','EPSG','7031','EPSG','3711','EPSG','1082'); +INSERT INTO "other_transformation" VALUES('EPSG','7032','Nahrwan 1934 / UTM zone 38N to Karbala 1979 / UTM zone 38N (25)','May be emulated using geocentric translations from Nahrwan 1934 to Karbala 1979 of dX=-308, dY=177 and dZ=146m.','EPSG','9656','Cartesian Grid Offsets','EPSG','7006','EPSG','3392',5.0,'EPSG','8728','Easting offset',343.0,'EPSG','9001','EPSG','8729','Northing offset',175.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,'MoO-Irq map B sheet 25',0); +INSERT INTO "usage" VALUES('EPSG','9910','other_transformation','EPSG','7032','EPSG','3712','EPSG','1082'); 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); @@ -648,6 +752,26 @@ INSERT INTO "other_transformation" VALUES('EPSG','8356','Caspian height to Caspi INSERT INTO "usage" VALUES('EPSG','10506','other_transformation','EPSG','8356','EPSG','1291','EPSG','1111'); INSERT INTO "other_transformation" VALUES('EPSG','8359','Baltic 1957 height to Baltic 1957 depth','Change of axis positive direction from up to down.','EPSG','1068','Height Depth Reversal','EPSG','8357','EPSG','8358',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1); INSERT INTO "usage" VALUES('EPSG','10507','other_transformation','EPSG','8359','EPSG','1306','EPSG','1111'); +INSERT INTO "other_transformation" VALUES('EPSG','9041','ISN2004 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that ISN2004 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5638','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Isl 2004',0); +INSERT INTO "usage" VALUES('EPSG','10877','other_transformation','EPSG','9041','EPSG','1120','EPSG','1088'); +INSERT INTO "other_transformation" VALUES('EPSG','9042','ISN2004 / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that ISN2004 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5639','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Isl 2004',0); +INSERT INTO "usage" VALUES('EPSG','10878','other_transformation','EPSG','9042','EPSG','1120','EPSG','1087'); +INSERT INTO "other_transformation" VALUES('EPSG','9043','ISN2016 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that ISN2016 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','9039','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Isl',0); +INSERT INTO "usage" VALUES('EPSG','10879','other_transformation','EPSG','9043','EPSG','1120','EPSG','1088'); +INSERT INTO "other_transformation" VALUES('EPSG','9044','ISN2016 / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that ISN2016 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','9040','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Isl 2016',0); +INSERT INTO "usage" VALUES('EPSG','10880','other_transformation','EPSG','9044','EPSG','1120','EPSG','1087'); +INSERT INTO "other_transformation" VALUES('EPSG','9045','PTRA08 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that PTRA08 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5633','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Prt Azores-Madeira',0); +INSERT INTO "usage" VALUES('EPSG','10881','other_transformation','EPSG','9045','EPSG','3670','EPSG','1088'); +INSERT INTO "other_transformation" VALUES('EPSG','9046','PTRA08 / LCC Europe to ETRS89 / LCC Europe (1)','Assumes that PTRA08 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5632','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Prt Azores-Madeira',0); +INSERT INTO "usage" VALUES('EPSG','10882','other_transformation','EPSG','9046','EPSG','3670','EPSG','1087'); +INSERT INTO "other_transformation" VALUES('EPSG','9047','REGCAN95 / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that REGCAN95 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5635','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Esp Canary',0); +INSERT INTO "usage" VALUES('EPSG','10883','other_transformation','EPSG','9047','EPSG','3199','EPSG','1088'); +INSERT INTO "other_transformation" VALUES('EPSG','9048','REGCAN95 / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that REGCAN95 and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5634','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Esp Canary',0); +INSERT INTO "usage" VALUES('EPSG','10884','other_transformation','EPSG','9048','EPSG','3199','EPSG','1087'); +INSERT INTO "other_transformation" VALUES('EPSG','9049','TUREF / LAEA Europe to ETRS89-extended / LAEA Europe (1)','Assumes that TUREF and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5636','EPSG','3035',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Tur',0); +INSERT INTO "usage" VALUES('EPSG','10885','other_transformation','EPSG','9049','EPSG','1237','EPSG','1088'); +INSERT INTO "other_transformation" VALUES('EPSG','9050','TUREF / LCC Europe to ETRS89-extended / LCC Europe (1)','Assumes that TUREF and ETRS89 are equivalent within the accuracy of the transformation. ETRS89 formally limited to stable part of Eurasian plate but use extended for pan-European small scale analysis. For a more accurate CT, concatenate through ITRF.','EPSG','9656','Cartesian Grid Offsets','EPSG','5637','EPSG','3034',1.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Tur',0); +INSERT INTO "usage" VALUES('EPSG','10886','other_transformation','EPSG','9050','EPSG','1237','EPSG','1087'); INSERT INTO "other_transformation" VALUES('EPSG','9371','Vienna height to GHA height (1)','Defines Wiener Null surface. GHA vertical reference surface is 156.68m below Wiener Null surface.','EPSG','9616','Vertical Offset','EPSG','8881','EPSG','5778',0.0,'EPSG','8603','Vertical Offset',156.68,'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,'BEV-Aut Wien',0); INSERT INTO "usage" VALUES('EPSG','13986','other_transformation','EPSG','9371','EPSG','4585','EPSG','1059'); INSERT INTO "other_transformation" VALUES('EPSG','9446','ODN height to EVRF2019 mean-tide height (1)','Determined at Channel Tunnel portal.','EPSG','9616','Vertical Offset','EPSG','5701','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.173,'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-Gbr 2019m',1); @@ -678,6 +802,16 @@ INSERT INTO "other_transformation" VALUES('EPSG','10096','Mauritania 1999 / UTM INSERT INTO "usage" VALUES('EPSG','11097','other_transformation','EPSG','10096','EPSG','2970','EPSG','1249'); INSERT INTO "other_transformation" VALUES('EPSG','10097','Mauritania 1999 / UTM zone 30N to WGS 84 / UTM zone 30N (1)','Parameter values consistent with the OGP Affine parametric transformation method derived by OGP from the published Helmert 2D parameter values.','EPSG','9624','Affine parametric transformation','EPSG','3105','EPSG','32630',40.0,'EPSG','8623','A0',NULL,'EPSG',NULL,'EPSG','8624','A1',NULL,'EPSG',NULL,'EPSG','8625','A2',NULL,'EPSG',NULL,'EPSG','8639','B0',NULL,'EPSG',NULL,'EPSG','8640','B1',NULL,'EPSG',NULL,'EPSG','8641','B2',NULL,'EPSG',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'MMI-Mau E',1); INSERT INTO "usage" VALUES('EPSG','11098','other_transformation','EPSG','10097','EPSG','2969','EPSG','1249'); +INSERT INTO "other_transformation" VALUES('EPSG','10216','MAGNA-SIRGAS / Col FW to MAGNA-SIRGAS 2018 / Col FW (5)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3114','EPSG','11114',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Col FW',0); +INSERT INTO "usage" VALUES('EPSG','19033','other_transformation','EPSG','10216','EPSG','3091','EPSG','1142'); +INSERT INTO "other_transformation" VALUES('EPSG','10221','MAGNA-SIRGAS / Col W to MAGNA-SIRGAS 2018 / Col W (4)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3115','EPSG','11115',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Col W',0); +INSERT INTO "usage" VALUES('EPSG','19032','other_transformation','EPSG','10221','EPSG','3090','EPSG','1142'); +INSERT INTO "other_transformation" VALUES('EPSG','10242','MAGNA-SIRGAS / Col Bog to MAGNA-SIRGAS 2018 / Col Bog (3)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3116','EPSG','11116',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Col Bog',0); +INSERT INTO "usage" VALUES('EPSG','19034','other_transformation','EPSG','10242','EPSG','1599','EPSG','1208'); +INSERT INTO "other_transformation" VALUES('EPSG','10243','MAGNA-SIRGAS / Col EC to MAGNA-SIRGAS 2018 / Col EC (2)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3117','EPSG','11117',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Col EC',0); +INSERT INTO "usage" VALUES('EPSG','19035','other_transformation','EPSG','10243','EPSG','1600','EPSG','1142'); +INSERT INTO "other_transformation" VALUES('EPSG','10244','MAGNA-SIRGAS / Col E to MAGNA-SIRGAS 2018 / Col E (1)','Not intended for high accuracy purposes. See Geodetic Datum 1329 remarks for details on how to directly convert from GeogCRS 4686 "MAGNA-SIRGAS" to GeogCRS 20446 "MAGNA-SIRGAS 2018".','EPSG','9656','Cartesian Grid Offsets','EPSG','3118','EPSG','11118',0.3,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'IOGP-Col E',0); +INSERT INTO "usage" VALUES('EPSG','19036','other_transformation','EPSG','10244','EPSG','1601','EPSG','1142'); INSERT INTO "other_transformation" VALUES('EPSG','10380','Cascais depth to ZH Portugal depth (1)','The Zero Hidrografico (CD Portugal) surface is defined to be 2.0m below the Cascais vertical reference surface offshore mainland Portugal and 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon (see CT 10381).','EPSG','9616','Vertical Offset','EPSG','10364','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-2.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,'IH-Por mainland',0); INSERT INTO "usage" VALUES('EPSG','20316','other_transformation','EPSG','10380','EPSG','4691','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10381','Cascais depth to ZH Portugal depth (2)','The Zero Hidrografico surface is defined to be 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon and 2.0m below the Cascais vertical reference surface offshore mainland Portugal (see CT 10380). ','EPSG','9616','Vertical Offset','EPSG','10364','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-2.08,'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,'IH-Por Tagus',0); @@ -702,6 +836,10 @@ INSERT INTO "other_transformation" VALUES('EPSG','10390','Ponta Delgada depth to INSERT INTO "usage" VALUES('EPSG','20083','other_transformation','EPSG','10390','EPSG','4736','EPSG','1060'); INSERT INTO "other_transformation" VALUES('EPSG','10391','Cais da Vila do Porto depth to ZH Portugal depth (1)','Offshore of Santa Maria and Formigas islands the Zero Hidrografico (CD Portugal) surface is defined to be 1.0m below the Cais da Vila do Porto vertical reference surface.','EPSG','9616','Vertical Offset','EPSG','10379','EPSG','10349',0.0,'EPSG','8603','Vertical Offset',-1.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,'IH-Por Santa Maria',0); INSERT INTO "usage" VALUES('EPSG','20101','other_transformation','EPSG','10391','EPSG','4737','EPSG','1060'); +INSERT INTO "other_transformation" VALUES('EPSG','10517','NAD83(2011) / Adjusted Jackson (ftUS) to NAD83(HARN) / WISCRS Jackson (ftUS) (1)','','EPSG','9656','Cartesian Grid Offsets','EPSG','10516','EPSG','8162',0.1,'EPSG','8728','Easting offset',0.0,'EPSG','9003','EPSG','8729','Northing offset',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'1',0); +INSERT INTO "usage" VALUES('EPSG','20745','other_transformation','EPSG','10517','EPSG','4343','EPSG','1026'); +INSERT INTO "other_transformation" VALUES('EPSG','15487','TWD67 / TM2 zone 121 to TWD97 / TM2 zone 121 (1)','Derived at Hu Tzu Shan (23°59''N, 120°58''E). Residuals increase to maximum of 6.4m as distance increases from this point.','EPSG','9656','Cartesian Grid Offsets','EPSG','3828','EPSG','3826',7.0,'EPSG','8728','Easting offset',828.589,'EPSG','9001','EPSG','8729','Northing offset',-206.915,'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,'asafi-Twn',0); +INSERT INTO "usage" VALUES('EPSG','11498','other_transformation','EPSG','15487','EPSG','3982','EPSG','1045'); INSERT INTO "other_transformation" VALUES('EPSG','15596','Tokyo + JSLD height to WGS 84 (7)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',7.94,'EPSG','9104','EPSG','8602','Longitude offset',-13.97,'EPSG','9104','EPSG','8604','Geoid undulation',26.9,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GSI-Jpn 452142',0); INSERT INTO "usage" VALUES('EPSG','11607','other_transformation','EPSG','15596','EPSG','2426','EPSG','1158'); INSERT INTO "other_transformation" VALUES('EPSG','15597','Tokyo + JSLD height to WGS 84 (8)','','EPSG','9618','Geographic2D with Height Offsets','EPSG','7414','EPSG','4979',1.0,'EPSG','8601','Latitude offset',8.1,'EPSG','9104','EPSG','8602','Longitude offset',-13.81,'EPSG','9104','EPSG','8604','Geoid undulation',27.2,'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,'GSI-Jpn 444141',0); @@ -918,3 +1056,5 @@ INSERT INTO "other_transformation" VALUES('EPSG','15862','IGN Astro 1960 / UTM z INSERT INTO "usage" VALUES('EPSG','11873','other_transformation','EPSG','15862','EPSG','2970','EPSG','1252'); INSERT INTO "other_transformation" VALUES('EPSG','15863','IGN Astro 1960 / UTM zone 30N to WGS 84 / UTM zone 30N (1)','Transformation taken from IGN Astro 1960 / UTM zone 30N to Mauritania 1999 / UTM zone 30N (1) (tfm code 15859) assuming that Mauritania 1999 is equivalent to WGS 84 within the accuracy of this tfm.','EPSG','9624','Affine parametric transformation','EPSG','3369','EPSG','32630',1.0,'EPSG','8623','A0',-286.351,'EPSG','9001','EPSG','8624','A1',1.0001754456884,'EPSG','9203','EPSG','8625','A2',9.270672363e-05,'EPSG','9203','EPSG','8639','B0',-146.722,'EPSG','9001','EPSG','8640','B1',-9.270672363e-05,'EPSG','9203','EPSG','8641','B2',1.0001754456884,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'OGP-Mau E',0); INSERT INTO "usage" VALUES('EPSG','11874','other_transformation','EPSG','15863','EPSG','2969','EPSG','1252'); +INSERT INTO "other_transformation" VALUES('EPSG','15922','Kertau 1968 / Singapore Grid to SVY21 / Singapore TM (1)','SLA used several affine transformations for migration of legacy data. These are not publicly available.','EPSG','9656','Cartesian Grid Offsets','EPSG','24500','EPSG','3414',2.0,'EPSG','8728','Easting offset',0.0,'EPSG','9001','EPSG','8729','Northing 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,'OGP-SGP',0); +INSERT INTO "usage" VALUES('EPSG','11933','other_transformation','EPSG','15922','EPSG','1210','EPSG','1042'); diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp index d4dbe78a4c..3d288ddd82 100644 --- a/include/proj/coordinateoperation.hpp +++ b/include/proj/coordinateoperation.hpp @@ -1683,6 +1683,12 @@ class PROJ_GCC_DLL Transformation : public SingleOperation { const common::Angle &offsetLong, const common::Length &offsetHeight, const std::vector &accuracies); + PROJ_DLL static TransformationNNPtr createCartesianGridOffsets( + const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, + const crs::CRSNNPtr &targetCRSIn, const common::Length &eastingOffset, + const common::Length &northingOffset, + const std::vector &accuracies); + PROJ_DLL static TransformationNNPtr createVerticalOffset( const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, const common::Length &offsetHeight, diff --git a/scripts/build_db.py b/scripts/build_db.py index 710197d327..de9ce3219f 100755 --- a/scripts/build_db.py +++ b/scripts/build_db.py @@ -829,8 +829,9 @@ def fill_other_transformation(proj_db_cursor): # 1068: Height Depth Reversal # 1069: Change of Vertical Unit # 1046: Vertical Offset and Slope - # 9621 : Similarity transformation - 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, 9621)") + # 9621: Similarity transformation + # 9656: Cartesian Grid Offsets + 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, 9621, 9656)") 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 @@ -854,7 +855,7 @@ def fill_other_transformation(proj_db_cursor): target_crs_code = target_codes[0][0] # Engineering CRS - if source_crs_code in (5800, 5817): + if source_crs_code in (5800, 5817, 6715): print("Skipping transformation %s as source CRS (%d) is not handled" % (name, source_crs_code)) continue diff --git a/scripts/reference_exported_symbols.txt b/scripts/reference_exported_symbols.txt index 19860f2637..07bfd3e6b0 100644 --- a/scripts/reference_exported_symbols.txt +++ b/scripts/reference_exported_symbols.txt @@ -737,6 +737,7 @@ osgeo::proj::operation::SingleOperation::~SingleOperation() osgeo::proj::operation::SingleOperation::substitutePROJAlternativeGridNames(dropbox::oxygen::nn >) const osgeo::proj::operation::SingleOperation::validateParameters() const osgeo::proj::operation::Transformation::createAbridgedMolodensky(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, std::vector >, std::allocator > > > const&) +osgeo::proj::operation::Transformation::createCartesianGridOffsets(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Length const&, osgeo::proj::common::Length const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createChangeVerticalUnit(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, osgeo::proj::common::Scale const&, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createCoordinateFrameRotation(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, double, double, double, double, std::vector >, std::allocator > > > const&) osgeo::proj::operation::Transformation::createGeocentricTranslations(osgeo::proj::util::PropertyMap const&, dropbox::oxygen::nn > const&, dropbox::oxygen::nn > const&, double, double, double, std::vector >, std::allocator > > > const&) diff --git a/src/iso19111/operation/parammappings.cpp b/src/iso19111/operation/parammappings.cpp index 19bded5ebd..6d04e21019 100644 --- a/src/iso19111/operation/parammappings.cpp +++ b/src/iso19111/operation/parammappings.cpp @@ -1011,6 +1011,7 @@ const struct MethodNameCode methodNameCodesList[] = { METHOD_NAME_CODE(GEOGRAPHIC2D_OFFSETS), METHOD_NAME_CODE(GEOGRAPHIC2D_WITH_HEIGHT_OFFSETS), METHOD_NAME_CODE(GEOGRAPHIC3D_OFFSETS), + METHOD_NAME_CODE(CARTESIAN_GRID_OFFSETS), METHOD_NAME_CODE(VERTICAL_OFFSET), METHOD_NAME_CODE(VERTICAL_OFFSET_AND_SLOPE), METHOD_NAME_CODE(NTV2), @@ -1336,6 +1337,17 @@ static const ParamMapping paramVerticalOffset = { static const ParamMapping *const paramsGeographic3DOffsets[] = { ¶mLatitudeOffset, ¶mLongitudeOffset, ¶mVerticalOffset, nullptr}; +static const ParamMapping paramEastingOffset = { + EPSG_NAME_PARAMETER_EASTING_OFFSET, EPSG_CODE_PARAMETER_EASTING_OFFSET, + nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; + +static const ParamMapping paramNorthingOffset = { + EPSG_NAME_PARAMETER_NORTHING_OFFSET, EPSG_CODE_PARAMETER_NORTHING_OFFSET, + nullptr, common::UnitOfMeasure::Type::LINEAR, nullptr}; + +static const ParamMapping *const paramsCartesianGridOffsets[] = { + ¶mEastingOffset, ¶mNorthingOffset, nullptr}; + static const ParamMapping *const paramsVerticalOffsets[] = { ¶mVerticalOffset, nullptr}; @@ -1569,6 +1581,10 @@ static const MethodMapping otherMethodMappings[] = { EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSETS, nullptr, nullptr, nullptr, paramsGeographic3DOffsets}, + {EPSG_NAME_METHOD_CARTESIAN_GRID_OFFSETS, + EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS, nullptr, nullptr, nullptr, + paramsCartesianGridOffsets}, + {EPSG_NAME_METHOD_VERTICAL_OFFSET, EPSG_CODE_METHOD_VERTICAL_OFFSET, nullptr, nullptr, nullptr, paramsVerticalOffsets}, diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp index 6cc62a39ed..19dd67da15 100644 --- a/src/iso19111/operation/singleoperation.cpp +++ b/src/iso19111/operation/singleoperation.cpp @@ -3829,6 +3829,72 @@ bool SingleOperation::exportToPROJStringGeneric( return true; } + if (methodEPSGCode == EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS) { + double eastingOffset = parameterValueNumeric( + EPSG_CODE_PARAMETER_EASTING_OFFSET, common::UnitOfMeasure::METRE); + double northingOffset = parameterValueNumeric( + EPSG_CODE_PARAMETER_NORTHING_OFFSET, common::UnitOfMeasure::METRE); + + const auto checkIfCompatEngineeringCRS = [](const crs::CRSPtr &crs) { + auto engineeringCRS = + dynamic_cast(crs.get()); + if (engineeringCRS) { + auto cs = dynamic_cast( + engineeringCRS->coordinateSystem().get()); + if (!cs) { + throw io::FormattingException( + "Can apply Cartesian grid offsets only to " + "EngineeringCRS with CartesianCS"); + } + const auto &unit = cs->axisList()[0]->unit(); + if (!unit._isEquivalentTo( + common::UnitOfMeasure::METRE, + util::IComparable::Criterion::EQUIVALENT)) { + // Could be enhanced to support other units... + throw io::FormattingException( + "Can apply Cartesian grid offsets only to " + "EngineeringCRS with CartesianCS with metre unit"); + } + } else { + throw io::FormattingException( + "Can apply Cartesian grid offsets only to ProjectedCRS or " + "EngineeringCRS"); + } + }; + + auto l_sourceCRS = sourceCRS(); + auto sourceCRSProj = + dynamic_cast(l_sourceCRS.get()); + if (!sourceCRSProj) { + checkIfCompatEngineeringCRS(l_sourceCRS); + } + + auto l_targetCRS = targetCRS(); + auto targetCRSProj = + dynamic_cast(l_targetCRS.get()); + if (!targetCRSProj) { + checkIfCompatEngineeringCRS(l_targetCRS); + } + + if (sourceCRSProj) { + formatter->startInversion(); + sourceCRSProj->addUnitConvertAndAxisSwap(formatter, false); + formatter->stopInversion(); + } + + if (eastingOffset != 0.0 || northingOffset != 0.0) { + formatter->addStep("affine"); + formatter->addParam("xoff", eastingOffset); + formatter->addParam("yoff", northingOffset); + } + + if (targetCRSProj) { + targetCRSProj->addUnitConvertAndAxisSwap(formatter, false); + } + + return true; + } + if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET) { const crs::CRS *srcCRS = sourceCRS().get(); diff --git a/src/iso19111/operation/transformation.cpp b/src/iso19111/operation/transformation.cpp index f6ce84f27d..3d25f54c30 100644 --- a/src/iso19111/operation/transformation.cpp +++ b/src/iso19111/operation/transformation.cpp @@ -1273,6 +1273,38 @@ TransformationNNPtr Transformation::createGeographic2DWithHeightOffsets( // --------------------------------------------------------------------------- +/** \brief Instantiate a transformation with method Cartesian grid offsets + * + * This method is defined as + * + * EPSG:9656. + * + * @param properties See \ref general_properties of the Transformation. + * At minimum the name should be defined. + * @param sourceCRSIn Source CRS. + * @param targetCRSIn Target CRS. + * @param eastingOffset Easting offset to add. + * @param northingOffset Northing offset to add. + * @param accuracies Vector of positional accuracy (might be empty). + * @return new Transformation. + * @since PROJ 9.5.0 + */ +TransformationNNPtr Transformation::createCartesianGridOffsets( + const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn, + const crs::CRSNNPtr &targetCRSIn, const common::Length &eastingOffset, + const common::Length &northingOffset, + const std::vector &accuracies) { + return create( + properties, sourceCRSIn, targetCRSIn, nullptr, + createMethodMapNameEPSGCode(EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS), + VectorOfParameters{ + createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_EASTING_OFFSET), + createOpParamNameEPSGCode(EPSG_CODE_PARAMETER_NORTHING_OFFSET)}, + VectorOfValues{eastingOffset, northingOffset}, accuracies); +} + +// --------------------------------------------------------------------------- + /** \brief Instantiate a transformation with method Vertical Offset. * * This method is defined as @@ -1650,6 +1682,23 @@ TransformationNNPtr Transformation::inverseAsTransformation() const { newOffsetHeight, coordinateOperationAccuracies())); } + if (methodEPSGCode == EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS) { + const auto &eastingOffset = + parameterValueMeasure(EPSG_CODE_PARAMETER_EASTING_OFFSET); + const common::Length newEastingOffset(negate(eastingOffset.value()), + eastingOffset.unit()); + + const auto &northingOffset = + parameterValueMeasure(EPSG_CODE_PARAMETER_NORTHING_OFFSET); + const common::Length newNorthingOffset(negate(northingOffset.value()), + northingOffset.unit()); + return Private::registerInv( + this, createCartesianGridOffsets( + createPropertiesForInverse(this, false, false), + l_targetCRS, l_sourceCRS, newEastingOffset, + newNorthingOffset, coordinateOperationAccuracies())); + } + if (methodEPSGCode == EPSG_CODE_METHOD_VERTICAL_OFFSET) { const auto &offsetHeight = diff --git a/src/proj_constants.h b/src/proj_constants.h index 6e5daf408b..3092acda36 100644 --- a/src/proj_constants.h +++ b/src/proj_constants.h @@ -819,6 +819,17 @@ /* ------------------------------------------------------------------------ */ +#define EPSG_CODE_METHOD_CARTESIAN_GRID_OFFSETS 9656 +#define EPSG_NAME_METHOD_CARTESIAN_GRID_OFFSETS "Cartesian Grid Offsets" + +#define EPSG_CODE_PARAMETER_EASTING_OFFSET 8728 +#define EPSG_NAME_PARAMETER_EASTING_OFFSET "Easting offset" + +#define EPSG_CODE_PARAMETER_NORTHING_OFFSET 8729 +#define EPSG_NAME_PARAMETER_NORTHING_OFFSET "Northing offset" + +/* ------------------------------------------------------------------------ */ + #define EPSG_NAME_METHOD_GEOCENTRIC_TOPOCENTRIC \ "Geocentric/topocentric conversions" #define EPSG_CODE_METHOD_GEOCENTRIC_TOPOCENTRIC 9836 diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp index c673c15d36..728a77da1d 100644 --- a/test/unit/test_factory.cpp +++ b/test/unit/test_factory.cpp @@ -182,8 +182,6 @@ TEST(factory, AuthorityFactory_identifyBodyFromSemiMajorAxis) { TEST(factory, AuthorityFactory_createEllipsoid) { auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG"); EXPECT_THROW(factory->createEllipsoid("-1"), NoSuchAuthorityCodeException); - EXPECT_TRUE(nn_dynamic_pointer_cast( - factory->createObject("7030")) != nullptr); auto ellipsoid = factory->createEllipsoid("7030"); ASSERT_EQ(ellipsoid->identifiers().size(), 1U); EXPECT_EQ(ellipsoid->identifiers()[0]->code(), "7030"); diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp index 7e20be56cb..dec076c5b3 100644 --- a/test/unit/test_operation.cpp +++ b/test/unit/test_operation.cpp @@ -5843,3 +5843,77 @@ TEST(operation, PointMotionOperation_with_epochs) { "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); } + +// --------------------------------------------------------------------------- + +TEST(operation, export_of_Cartesian_Grid_Offsets_with_EngineeringCRS) { + + auto wkt = + "COORDINATEOPERATION[\"CIG85 to GDA94 / MGA zone 48\",\n" + " VERSION[\"GA-Cxr\"],\n" + " SOURCECRS[\n" + " ENGCRS[\"Christmas Island Grid 1985\",\n" + " EDATUM[\"Christmas Island Datum 1985\"],\n" + " CS[Cartesian,2],\n" + " AXIS[\"(E)\",east,\n" + " ORDER[1],\n" + " LENGTHUNIT[\"metre\",1]],\n" + " AXIS[\"(N)\",north,\n" + " ORDER[2],\n" + " LENGTHUNIT[\"metre\",1]],\n" + " ID[\"EPSG\",6715]]],\n" + " TARGETCRS[\n" + " PROJCRS[\"GDA94 / MGA zone 48\",\n" + " BASEGEOGCRS[\"GDA94\",\n" + " DATUM[\"Geocentric Datum of Australia 1994\",\n" + " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" + " LENGTHUNIT[\"metre\",1]]],\n" + " PRIMEM[\"Greenwich\",0,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" + " ID[\"EPSG\",4283]],\n" + " CONVERSION[\"Map Grid of Australia zone 48\",\n" + " METHOD[\"Transverse Mercator\",\n" + " ID[\"EPSG\",9807]],\n" + " PARAMETER[\"Latitude of natural origin\",0,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433],\n" + " ID[\"EPSG\",8801]],\n" + " PARAMETER[\"Longitude of natural origin\",105,\n" + " ANGLEUNIT[\"degree\",0.0174532925199433],\n" + " ID[\"EPSG\",8802]],\n" + " PARAMETER[\"Scale factor at natural origin\",0.9996,\n" + " SCALEUNIT[\"unity\",1],\n" + " ID[\"EPSG\",8805]],\n" + " PARAMETER[\"False easting\",500000,\n" + " LENGTHUNIT[\"metre\",1],\n" + " ID[\"EPSG\",8806]],\n" + " PARAMETER[\"False northing\",10000000,\n" + " LENGTHUNIT[\"metre\",1],\n" + " ID[\"EPSG\",8807]]],\n" + " CS[Cartesian,2],\n" + " AXIS[\"(E)\",east,\n" + " ORDER[1],\n" + " LENGTHUNIT[\"metre\",1]],\n" + " AXIS[\"(N)\",north,\n" + " ORDER[2],\n" + " LENGTHUNIT[\"metre\",1]],\n" + " ID[\"EPSG\",28348]]],\n" + " METHOD[\"Cartesian Grid Offsets\",\n" + " ID[\"EPSG\",9656]],\n" + " PARAMETER[\"Easting offset\",550015,\n" + " LENGTHUNIT[\"metre\",1],\n" + " ID[\"EPSG\",8728]],\n" + " PARAMETER[\"Northing offset\",8780001,\n" + " LENGTHUNIT[\"metre\",1],\n" + " ID[\"EPSG\",8729]],\n" + " OPERATIONACCURACY[5],\n" + " ID[\"EPSG\",6724]]"; + + auto obj = WKTParser().createFromWKT(wkt); + auto transf = nn_dynamic_pointer_cast(obj); + ASSERT_TRUE(transf != nullptr); + EXPECT_EQ(transf->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=affine +xoff=550015 +yoff=8780001"); + EXPECT_EQ(transf->inverse()->exportToPROJString( + PROJStringFormatter::create().get()), + "+proj=affine +xoff=-550015 +yoff=-8780001"); +} diff --git a/test/unit/test_operationfactory.cpp b/test/unit/test_operationfactory.cpp index d1f4a79e23..8d43116174 100644 --- a/test/unit/test_operationfactory.cpp +++ b/test/unit/test_operationfactory.cpp @@ -2578,6 +2578,68 @@ TEST(operation, projCRS_to_projCRS_context_incompatible_areas_ballpark) { // --------------------------------------------------------------------------- +TEST(operation, projCRS_to_projCRS_context_grid_offsets) { + auto authFactory = + AuthorityFactory::create(DatabaseContext::create(), "EPSG"); + auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); + ctxt->setSpatialCriterion( + CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); + { + auto list = CoordinateOperationFactory::create()->createOperations( + authFactory->createCoordinateReferenceSystem( + "3392"), // Karbala 1979 / UTM zone 38N + authFactory->createCoordinateReferenceSystem( + "3891"), // IGRS / UTM zone 38N + ctxt); + ASSERT_EQ(list.size(), 2U); + EXPECT_EQ(list[1]->nameStr(), + "Karbala 1979 / UTM zone 38N to IGRS / UTM zone 38N (1)"); + EXPECT_EQ( + list[1]->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=affine +xoff=-287.54 +yoff=278.25"); + } + { + auto list = CoordinateOperationFactory::create()->createOperations( + authFactory->createCoordinateReferenceSystem( + "3891"), // IGRS / UTM zone 38N + authFactory->createCoordinateReferenceSystem( + "3392"), // Karbala 1979 / UTM zone 38N + ctxt); + ASSERT_EQ(list.size(), 2U); + EXPECT_EQ(list[1]->nameStr(), "Inverse of Karbala 1979 / UTM zone 38N " + "to IGRS / UTM zone 38N (1)"); + EXPECT_EQ( + list[1]->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=affine +xoff=287.54 +yoff=-278.25"); + } +} + +// --------------------------------------------------------------------------- + +TEST(operation, projCRS_to_projCRS_context_grid_offsets_non_metre_unit_noop) { + auto authFactory = + AuthorityFactory::create(DatabaseContext::create(), "EPSG"); + auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0); + ctxt->setSpatialCriterion( + CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION); + ctxt->setGridAvailabilityUse( + CoordinateOperationContext::GridAvailabilityUse:: + IGNORE_GRID_AVAILABILITY); + auto list = CoordinateOperationFactory::create()->createOperations( + authFactory->createCoordinateReferenceSystem( + "10516"), // NAD83(2011) / Adjusted Jackson (ftUS) + authFactory->createCoordinateReferenceSystem( + "8162"), // NAD83(HARN) / WISCRS Jackson (ftUS) + ctxt); + ASSERT_GE(list.size(), 2U); + EXPECT_EQ(list[0]->nameStr(), "NAD83(2011) / Adjusted Jackson (ftUS) to " + "NAD83(HARN) / WISCRS Jackson (ftUS) (1)"); + EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), + "+proj=noop"); +} + +// --------------------------------------------------------------------------- + TEST( operation, projCRS_to_projCRS_context_incompatible_areas_crs_extent_use_intersection) {