From f1b4e7237f4e97b5170c0767175d2bb79ce996a6 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 19 Mar 2024 10:06:46 +0100 Subject: [PATCH 1/5] Database: update to EPSG v11.007 --- data/sql/concatenated_operation.sql | 4 +- data/sql/concatenated_operation_step.sql | 2 + data/sql/extent.sql | 5 +- data/sql/geodetic_datum.sql | 14 ++-- data/sql/grid_transformation.sql | 86 +++++++++++++++++----- data/sql/helmert_transformation.sql | 4 +- data/sql/metadata.sql | 4 +- data/sql/scope.sql | 3 +- data/sql/supersession.sql | 6 ++ scripts/build_db.py | 4 +- src/iso19111/operation/singleoperation.cpp | 14 ++-- src/proj_constants.h | 7 ++ test/cli/testprojinfo | 4 +- test/cli/testprojinfo_out.dist | 6 +- test/unit/test_factory.cpp | 18 +++-- test/unit/test_operationfactory.cpp | 8 +- 16 files changed, 129 insertions(+), 60 deletions(-) diff --git a/data/sql/concatenated_operation.sql b/data/sql/concatenated_operation.sql index b19a39a492..2e0b54b515 100644 --- a/data/sql/concatenated_operation.sql +++ b/data/sql/concatenated_operation.sql @@ -439,7 +439,7 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','9731','ETRS89 to ETRS89 + Ca INSERT INTO "usage" VALUES('EPSG','15285','concatenated_operation','EPSG','9731','EPSG','2340','EPSG','1270'); INSERT INTO "concatenated_operation" VALUES('EPSG','9750','ETRS89 to Catania 1965 height (1)','','EPSG','4937','EPSG','9721',0.035,'IGM-Ita 2005 Sicily',0); INSERT INTO "usage" VALUES('EPSG','15385','concatenated_operation','EPSG','9750','EPSG','2340','EPSG','1133'); -INSERT INTO "concatenated_operation" VALUES('EPSG','10146','INAGeoid2020 v1 height to INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9471','EPSG','20036',0.2,'BIG-Idn 2022',0); +INSERT INTO "concatenated_operation" VALUES('EPSG','10146','INAGeoid2020 v1 height to INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9471','EPSG','20036',0.2,'BIG-Idn 2022',1); INSERT INTO "usage" VALUES('EPSG','18452','concatenated_operation','EPSG','10146','EPSG','1122','EPSG','1178'); INSERT INTO "concatenated_operation" VALUES('EPSG','10392','Cascais height to ZH Portugal depth (1)','The Zero Hidrografico (CD Portugal) surface is defined to be 2.0m below the Cascais vertical reference surface off mainland Portugal and 2.08 metres below the Cascais vertical reference surface in the Tagus estuary off Lisbon (see CT 10393).','EPSG','5780','EPSG','10349',0.0,'IH-Por mainland',0); INSERT INTO "usage" VALUES('EPSG','20319','concatenated_operation','EPSG','10392','EPSG','4691','EPSG','1198'); @@ -469,3 +469,5 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','10495','ETRS89 + DVR90(2002) INSERT INTO "usage" VALUES('EPSG','20518','concatenated_operation','EPSG','10495','EPSG','3237','EPSG','1079'); INSERT INTO "concatenated_operation" VALUES('EPSG','10496','ETRS89 + DVR90(2013) height to ETRS89 + DVR90(2023) height (1)','For applications with accuracies of 5cm or worse, DVR90(2013) height and DVR90(2023) height may be considered to be equivalent. At this 3cm accuracy, data referenced to either CRS may be merged without transformation. ','EPSG','10487','EPSG','10488',0.03,'SDFI-Dnk 2023',0); INSERT INTO "usage" VALUES('EPSG','20516','concatenated_operation','EPSG','10496','EPSG','1080','EPSG','1273'); +INSERT INTO "concatenated_operation" VALUES('EPSG','10616','SRGI2013 + INAGeoid2020 v1 height to SRGI2013 + INAGeoid v2 height (1)','In central Java INAGeoid2020 v2 height minus INAGeoid2020 v1 height is approximately +0.2m (v1 surface is above the v2 surface). This difference varies significantly across Indonesia.','EPSG','9529','EPSG','20043',0.2,'BIG-Idn 2022',0); +INSERT INTO "usage" VALUES('EPSG','21321','concatenated_operation','EPSG','10616','EPSG','1122','EPSG','1178'); diff --git a/data/sql/concatenated_operation_step.sql b/data/sql/concatenated_operation_step.sql index c38f0b6040..2e80a8ceec 100644 --- a/data/sql/concatenated_operation_step.sql +++ b/data/sql/concatenated_operation_step.sql @@ -478,3 +478,5 @@ INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',1,'EPSG','10490' INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',2,'EPSG','10492'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',1,'EPSG','10492'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',2,'EPSG','10494'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',1,'EPSG','9629'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',2,'EPSG','10145'); diff --git a/data/sql/extent.sql b/data/sql/extent.sql index c39e66a76f..8eee152183 100644 --- a/data/sql/extent.sql +++ b/data/sql/extent.sql @@ -3727,5 +3727,8 @@ INSERT INTO "extent" VALUES('EPSG','4748','Europe - Equi7','Europe including Rus INSERT INTO "extent" VALUES('EPSG','4749','North America - Equi7','North America, the Caribbean and Central America excluding Panama.',7.98,90.0,167.65,15.72,0); INSERT INTO "extent" VALUES('EPSG','4750','South America - Equi7','South America including Panama.',-59.87,30.31,-124.82,-14.58,0); INSERT INTO "extent" VALUES('EPSG','4751','Oceania - Equi7','Australasia and the western Pacific Ocean.',-60.56,21.57,72.37,-121.05,0); +INSERT INTO "extent" VALUES('EPSG','4752','Canada - onshore south of 60°N','Canada - onshore south of 60°N - Alberta, British Columbia (BC), Manitoba, New Brunswick (NB), Newfoundland and Labrador, Nova Scotia (NS), Ontario, Prince Edward Island (PEI), Quebec and Saskatchewan.',41.67,60.01,-139.04,-52.54,0); +INSERT INTO "extent" VALUES('EPSG','4753','Canada - onshore north of 60°N','Canada - onshore north of 60°N - Newfoundland and Labrador; Northwest Territories (NWT); Nunavut; Quebec; Yukon.',59.99,83.17,-141.01,-60.72,0); +INSERT INTO "extent" VALUES('EPSG','4754','Canada - onshore','Canada - onshore - Alberta; British Columbia (BC); Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward Island (PEI); Quebec; Saskatchewan; Yukon.',41.67,83.17,-141.01,-52.54,0); INSERT INTO "extent" VALUES('EPSG','4755','Europe - ETRF by country','Europe - onshore and offshore: Albania; Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Cyprus; Czechia; Denmark; Estonia; Faroe Islands; Finland; France; Germany; Gibraltar; Greece; Hungary; Ireland; Italy; Kosovo; Latvia; Liechtenstein; Lithuania; Luxembourg; Malta; Moldova; Monaco; Montenegro; Netherlands; North Macedonia; Norway including Svalbard and Jan Mayen; Poland; Portugal; Romania; San Marino; Serbia; Slovakia; Slovenia; Spain; Sweden; Switzerland; United Kingdom (UK) including Channel Islands and Isle of Man; Vatican City State.',32.88,84.73,-16.1,40.18,0); -INSERT INTO "extent" VALUES('EPSG','4756','Denmark - offshore','4756 - Denmark - offshore',54.36,58.27,3.25,16.51,0); +INSERT INTO "extent" VALUES('EPSG','4756','Denmark - offshore','Denmark - offshore.',54.36,58.27,3.25,16.51,0); diff --git a/data/sql/geodetic_datum.sql b/data/sql/geodetic_datum.sql index dd6d66c64e..3dfae55936 100644 --- a/data/sql/geodetic_datum.sql +++ b/data/sql/geodetic_datum.sql @@ -200,17 +200,17 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1191','IGS14',NULL,'EPSG','7019','EP INSERT INTO "usage" VALUES('EPSG','13243','geodetic_datum','EPSG','1191','EPSG','1262','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1192','North American Datum of 1983 (CSRS96)',NULL,'EPSG','7019','EPSG','8901','1996-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13244','geodetic_datum','EPSG','1192','EPSG','1061','EPSG','1027'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1193','North American Datum of 1983 (CSRS) version 2',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1193','North American Datum of 1983 (CSRS) version 2',NULL,'EPSG','7019','EPSG','8901','1998-01-01',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','13245','geodetic_datum','EPSG','1193','EPSG','1061','EPSG','1027'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1194','North American Datum of 1983 (CSRS) version 3',NULL,'EPSG','7019','EPSG','8901','1999-01-01',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1194','North American Datum of 1983 (CSRS) version 3',NULL,'EPSG','7019','EPSG','8901','1999-01-01',NULL,NULL,NULL,1997.0,0); INSERT INTO "usage" VALUES('EPSG','13246','geodetic_datum','EPSG','1194','EPSG','1061','EPSG','1027'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1195','North American Datum of 1983 (CSRS) version 4',NULL,'EPSG','7019','EPSG','8901','2002-01-01',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1195','North American Datum of 1983 (CSRS) version 4',NULL,'EPSG','7019','EPSG','8901','2002-01-01',NULL,NULL,NULL,2002.0,0); INSERT INTO "usage" VALUES('EPSG','13247','geodetic_datum','EPSG','1195','EPSG','1061','EPSG','1027'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1196','North American Datum of 1983 (CSRS) version 5',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1196','North American Datum of 1983 (CSRS) version 5',NULL,'EPSG','7019','EPSG','8901','2007-01-01',NULL,NULL,NULL,2006.0,0); INSERT INTO "usage" VALUES('EPSG','13248','geodetic_datum','EPSG','1196','EPSG','1061','EPSG','1027'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1197','North American Datum of 1983 (CSRS) version 6',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1197','North American Datum of 1983 (CSRS) version 6',NULL,'EPSG','7019','EPSG','8901','2010-01-01',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','13249','geodetic_datum','EPSG','1197','EPSG','1061','EPSG','1027'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1198','North American Datum of 1983 (CSRS) version 7',NULL,'EPSG','7019','EPSG','8901','2017-05-01',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1198','North American Datum of 1983 (CSRS) version 7',NULL,'EPSG','7019','EPSG','8901','2017-05-01',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','13250','geodetic_datum','EPSG','1198','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1201','System of the Unified Trigonometrical Cadastral Network [JTSK03]',NULL,'EPSG','7004','EPSG','8901','2003-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','13253','geodetic_datum','EPSG','1201','EPSG','1211','EPSG','1181'); @@ -418,7 +418,7 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','1359','Hughes 1980',NULL,'EPSG','705 INSERT INTO "usage" VALUES('EPSG','19883','geodetic_datum','EPSG','1359','EPSG','1262','EPSG','1110'); INSERT INTO "geodetic_datum" VALUES('EPSG','1360','NSIDC International 1924 Authalic Sphere',NULL,'EPSG','7057','EPSG','8901',NULL,NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','19879','geodetic_datum','EPSG','1360','EPSG','1262','EPSG','1195'); -INSERT INTO "geodetic_datum" VALUES('EPSG','1365','North American Datum of 1983 (CSRS) version 8',NULL,'EPSG','7019','EPSG','8901','2022-11-27',NULL,NULL,NULL,NULL,0); +INSERT INTO "geodetic_datum" VALUES('EPSG','1365','North American Datum of 1983 (CSRS) version 8',NULL,'EPSG','7019','EPSG','8901','2022-11-27',NULL,NULL,NULL,2010.0,0); INSERT INTO "usage" VALUES('EPSG','20140','geodetic_datum','EPSG','1365','EPSG','1061','EPSG','1027'); INSERT INTO "geodetic_datum" VALUES('EPSG','1366','COV23 Intermediate Reference Frame',NULL,'EPSG','7019','EPSG','8901','2023-01-01',NULL,NULL,NULL,NULL,0); INSERT INTO "usage" VALUES('EPSG','20309','geodetic_datum','EPSG','1366','EPSG','4743','EPSG','1141'); diff --git a/data/sql/grid_transformation.sql b/data/sql/grid_transformation.sql index 12a57fb6e8..010e0f263f 100644 --- a/data/sql/grid_transformation.sql +++ b/data/sql/grid_transformation.sql @@ -478,7 +478,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','7872','NZVD2016 height to Welli INSERT INTO "usage" VALUES('EPSG','10306','grid_transformation','EPSG','7872','EPSG','3773','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','7891','SHGD2015 to SHVD2015 height (1)','This transformation defines SHVD2015 heights. For reversible alternative to this transformation see SHGD2015 to SHGD2015 + SHVD2015 height (1) (code 10614).','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','7885','EPSG','7890',0.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,NULL,NULL,'ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','14318','grid_transformation','EPSG','7891','EPSG','3183','EPSG','1133'); -INSERT INTO "grid_transformation" VALUES('EPSG','7957','Canada velocity grid v6','NOTE: Before being deprecated this record had a second parameter (code 1048, value 8251) which has been removed due to being non-compliant with the data model.','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8251','EPSG','8251',0.01,'EPSG','1050','Point motion velocity grid file','cvg60.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',1); +INSERT INTO "grid_transformation" VALUES('EPSG','7957','Canada velocity grid v6','NOTE: Before being deprecated this record had a second parameter (code 1048, value 8251) which has been removed due to being non-compliant with the data model.','EPSG','1070','Point motion by grid (NTv2_Vel)','EPSG','8251','EPSG','8251',0.01,'EPSG','1050','Point motion velocity grid file','cvg60.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',1); INSERT INTO "usage" VALUES('EPSG','10342','grid_transformation','EPSG','7957','EPSG','1061','EPSG','1058'); INSERT INTO "grid_transformation" VALUES('EPSG','7958','ETRS89 to Belfast height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Belfast height (1) (tfm code 5334). For reversible alternative to this transformation see ETRS89 to ETRS89 + Belfast height (2) (code 9592).','EPSG','1072','Geographic3D to GravityRelatedHeight (OSGM15-Ire)','EPSG','4937','EPSG','5732',0.014,'EPSG','8666','Geoid (height correction) model file','OSGM15_Belfast.gri',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK NI 2015',0); INSERT INTO "usage" VALUES('EPSG','14505','grid_transformation','EPSG','7958','EPSG','2530','EPSG','1133'); @@ -576,8 +576,9 @@ INSERT INTO "grid_transformation" VALUES('EPSG','8672','NAD83(FBN) to NAD83(NSRS INSERT INTO "usage" VALUES('EPSG','10764','grid_transformation','EPSG','8672','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8673','NAD83(NSRS2007) to NAD83(2011) (3)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4759','EPSG','6318',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_2007.nad83_2011.prvi.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_2007.nad83_2011.prvi.lon.trn.20160901.b',NULL,NULL,'NGS-Pri Vir Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10765','grid_transformation','EPSG','8673','EPSG','2251','EPSG','1027'); -INSERT INTO "grid_transformation" VALUES('EPSG','8676','Canada velocity grid v6','File initially published with name cvg60.cvb, later renamed to NAD83v60VG.gvb with no change of content.','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8251','EPSG','8251',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',0); -INSERT INTO "usage" VALUES('EPSG','10767','grid_transformation','EPSG','8676','EPSG','4618','EPSG','1058'); +INSERT INTO "grid_transformation" VALUES('EPSG','8676','Canada velocity grid v6','File initially published as cvg60.cvb, later renamed to NAD83v60VG.gvb with no change of content. Not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by v7 model.','EPSG','1070','Point motion by grid (NTv2_Vel)','EPSG','8251','EPSG','8251',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v6VG.gvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg6.0',0); +INSERT INTO "usage" VALUES('EPSG','10767','grid_transformation','EPSG','8676','EPSG','4752','EPSG','1058'); +INSERT INTO "usage" VALUES('EPSG','20820','grid_transformation','EPSG','8676','EPSG','4753','EPSG','1288'); INSERT INTO "grid_transformation" VALUES('EPSG','8861','NAD83(HARN) to NAD83(FBN) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','4152','EPSG','8860',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_harn.nad83_fbn.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_harn.nad83_fbn.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); INSERT INTO "usage" VALUES('EPSG','10803','grid_transformation','EPSG','8861','EPSG','4516','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8862','NAD83(FBN) to NAD83(NSRS2007) (1)','Uses NADCON5 method which expects longitudes positive east in range 0-360°; EPSG source and target CRSs have longitudes positive east in range -180° to +180°.','EPSG','1075','NADCON5 (3D)','EPSG','8860','EPSG','4759',0.05,'EPSG','8657','Latitude difference file','nadcon5.nad83_fbn.nad83_2007.conus.lat.trn.20160901.b','EPSG','8658','Longitude difference file','nadcon5.nad83_fbn.nad83_2007.conus.lon.trn.20160901.b',NULL,NULL,'NGS-Usa Conus Nadcon5',0); @@ -630,7 +631,7 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9120','NAD83(CSRS)v2 to NAD83(C INSERT INTO "usage" VALUES('EPSG','10934','grid_transformation','EPSG','9120','EPSG','4533','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9121','NAD83(CSRS)v2 to NAD83(CSRS)v3 (2)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','NVI98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC NVI',0); INSERT INTO "usage" VALUES('EPSG','10935','grid_transformation','EPSG','9121','EPSG','4534','EPSG','1027'); -INSERT INTO "grid_transformation" VALUES('EPSG','9122','NAD83(CSRS)v2 to NAD83(CSRS)v4 (1)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','BC_98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0); +INSERT INTO "grid_transformation" VALUES('EPSG','9122','NAD83(CSRS)v2 to NAD83(CSRS)v4 (1)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8240',0.1,'EPSG','8656','Latitude and longitude difference file','BC_98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',1); INSERT INTO "usage" VALUES('EPSG','10936','grid_transformation','EPSG','9122','EPSG','4535','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9123','NAD83(CSRS) to CGVD28 height (1)','Derived through NAD83(CSRS)v3.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','4955','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_0.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC Can CGG2000',1); INSERT INTO "usage" VALUES('EPSG','10937','grid_transformation','EPSG','9123','EPSG','1289','EPSG','1133'); @@ -872,8 +873,8 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9466','GDA2020 to GDA2020 + AHD INSERT INTO "usage" VALUES('EPSG','14146','grid_transformation','EPSG','9466','EPSG','4493','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9467','GDA94 to GDA94 + AHD height (1)','Reversible alternative to GDA94 to AHD height (1) and GDA94 to AHD (Tasmania) height (2) (codes 5656 and 5657). Uses AUSGeoid09 model which uses bi-cubic interpolation; bi-linear interpolation will give results agreeing to within 1cm 99.97% of the time.','EPSG','1083','Geog3D to Geog2D+GravityRelatedHeight (AUSGeoidv2)','EPSG','4939','EPSG','9464',0.15,'EPSG','8666','Geoid (height correction) model file','AUSGeoid09_V1.01.gsb',NULL,NULL,NULL,NULL,'EPSG','4283','GA-Aus09',0); INSERT INTO "usage" VALUES('EPSG','14147','grid_transformation','EPSG','9467','EPSG','2575','EPSG','1133'); -INSERT INTO "grid_transformation" VALUES('EPSG','9483','Canada velocity grid v7','File initially published with name cvg70.cvb, later renamed to NAD83v70VG.gvb with no change of content.','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8254','EPSG','8254',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg7.0',0); -INSERT INTO "usage" VALUES('EPSG','14214','grid_transformation','EPSG','9483','EPSG','1061','EPSG','1131'); +INSERT INTO "grid_transformation" VALUES('EPSG','9483','Canada velocity grid v7','File initially published with name cvg70.cvb, later renamed to NAD83v70VG.gvb with no change of content. Replaces v6 velocity grid.','EPSG','1070','Point motion by grid (NTv2_Vel)','EPSG','8254','EPSG','8254',0.01,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg7.0',0); +INSERT INTO "usage" VALUES('EPSG','14214','grid_transformation','EPSG','9483','EPSG','4754','EPSG','1131'); INSERT INTO "grid_transformation" VALUES('EPSG','9484','ETRS89 to NN54 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN54 height (1) (code 9594).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5776',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2008',0); INSERT INTO "usage" VALUES('EPSG','14374','grid_transformation','EPSG','9484','EPSG','1352','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','9485','ETRS89 to NN2000 height (1)','For reversible alternative to this transformation see ETRS89 to ETRS89 + NN2000 height (1) (code 9593).','EPSG','1047','Geographic3D to GravityRelatedHeight (Gravsoft)','EPSG','4937','EPSG','5941',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.bin',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2018',0); @@ -1440,27 +1441,27 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10114','CGVD28 height to CGVD20 INSERT INTO "usage" VALUES('EPSG','18322','grid_transformation','EPSG','10114','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10115','CGVD28 height to CGVD2013a(2010) height (1)','Equivalent to HT2_2010v70 hybrid geoid model minus CGG2013a geoid model (i.e. CT code 9986 minus CT 9247 = CT 9987 minus CT 10109). Specifies NAD83(CSRS)v6 as interpolation CRS, but NAD83(CSRS)v7 (code 8255) may equally be used.','EPSG','1112','Vertical Offset by Grid Interpolation (NRCan byn)','EPSG','5713','EPSG','9245',0.05,'EPSG','8732','Vertical offset file','HT2_2010v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NR-Can HT2 2010',1); INSERT INTO "usage" VALUES('EPSG','18323','grid_transformation','EPSG','10115','EPSG','1061','EPSG','1133'); -INSERT INTO "grid_transformation" VALUES('EPSG','10116','CGVD2013a(2010) height to CGVD2013a(2002) height (1)','Interpolation CRS = NAD83(CSRS) 2010, i.e. may be any one of NAD83(CSRS)v6, v7 or v8 (CRS codes 8252, 8255 or 10414). Equivalent to CGVD28 to CGVD2013a(2002) minus CGVD28 to CGVD2013a(2010) (i.e. CT code 10114 minus CT 10115).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','9245','EPSG','20034',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10116','CGVD2013a(2010) height to CGVD2013a(2002) height (1)','Interpolation CRS = NAD83(CSRS) 2010, i.e. may be any one of NAD83(CSRS)v6, v7 or v8 (CRS codes 8252, 8255 or 10414). Equivalent to CGVD28 to CGVD2013a(2002) minus CGVD28 to CGVD2013a(2010) (i.e. CT code 10114 minus CT 10115).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','9245','EPSG','20034',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','18325','grid_transformation','EPSG','10116','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10117','CGVD2013a(2010) height to CGVD2013a(1997) height (1)','Interpolation CRS = NAD83(CSRS) 2010, i.e. may be any one of NAD83(CSRS)v6, v7 or v8 (CRS codes 8252, 8255 or 10414). Equivalent to CGVD28 to CGVD2013a(1997) minus CGVD28 to CGVD2013a(2010) (i.e. CT code 10113 minus CT 10115).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','9245','EPSG','20035',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10117','CGVD2013a(2010) height to CGVD2013a(1997) height (1)','Interpolation CRS = NAD83(CSRS) 2010, i.e. may be any one of NAD83(CSRS)v6, v7 or v8 (CRS codes 8252, 8255 or 10414). Equivalent to CGVD28 to CGVD2013a(1997) minus CGVD28 to CGVD2013a(2010) (i.e. CT code 10113 minus CT 10115).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','9245','EPSG','20035',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','18352','grid_transformation','EPSG','10117','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10118','CGVD2013a(2002) height to CGVD2013a(1997) height (1)','Equivalent to CGVD28 to CGVD2013a(1997) minus CGVD28 to CGVD2013a(2002) (i.e. CT code 10113 minus CT 10114).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20034','EPSG','20035',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10118','CGVD2013a(2002) height to CGVD2013a(1997) height (1)','Equivalent to CGVD28 to CGVD2013a(1997) minus CGVD28 to CGVD2013a(2002) (i.e. CT code 10113 minus CT 10114).','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20034','EPSG','20035',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can',1); INSERT INTO "usage" VALUES('EPSG','18328','grid_transformation','EPSG','10118','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10119','NAD83(CSRS)v4 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8244','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10119','NAD83(CSRS)v4 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18201','grid_transformation','EPSG','10119','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10120','NAD83(CSRS)v4 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8244','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10120','NAD83(CSRS)v4 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18210','grid_transformation','EPSG','10120','EPSG','1061','EPSG','1274'); -INSERT INTO "grid_transformation" VALUES('EPSG','10121','NAD83(CSRS)v6 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8251','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10121','NAD83(CSRS)v6 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8251','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18203','grid_transformation','EPSG','10121','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10122','NAD83(CSRS)v6 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8251','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10122','NAD83(CSRS)v6 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8251','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18351','grid_transformation','EPSG','10122','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10123','NAD83(CSRS)v6 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8251','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10123','NAD83(CSRS)v6 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8251','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8252','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18259','grid_transformation','EPSG','10123','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10124','NAD83(CSRS)v7 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8254','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10124','NAD83(CSRS)v7 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8254','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18206','grid_transformation','EPSG','10124','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10125','NAD83(CSRS)v7 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8254','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10125','NAD83(CSRS)v7 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8254','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18207','grid_transformation','EPSG','10125','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10126','NAD83(CSRS)v7 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','8254','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10126','NAD83(CSRS)v7 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8254','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','18350','grid_transformation','EPSG','10126','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10128','NAD83(CSRS)v4 to NAD83(CSRS)v4 + CGVD2013a(2002) height (1)','Reversible alternative to NAD83(CSRS)v4 to CGVD2013a(2002) height (1) (code 10110).','EPSG','1090','Geog3D to Geog2D+GravityRelatedHeight (NRCan byn)','EPSG','8244','EPSG','20037',0.05,'EPSG','8666','Geoid (height correction) model file','CGG2013an83.byn',NULL,NULL,NULL,NULL,'EPSG','8246','NR-Can CGG2013a 2002',0); INSERT INTO "usage" VALUES('EPSG','18287','grid_transformation','EPSG','10128','EPSG','1061','EPSG','1270'); @@ -1568,11 +1569,11 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10417','NAD83(CSRS)v8 to CGVD20 INSERT INTO "usage" VALUES('EPSG','20252','grid_transformation','EPSG','10417','EPSG','1061','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10418','NAD83(CSRS)v8 to CGVD28 height (1)','Valid at epoch 2010.0. Hybrid geoid model, grid derived at epoch 1997.0 through NAD83(CSRS)v3 (CT code 9983) and then modified to include correction for propagation of height between 1997.0 and 2010.0 derived from the Canada velocity grid v7.0.','EPSG','1060','Geographic3D to GravityRelatedHeight (NRCan byn)','EPSG','10413','EPSG','5713',0.05,'EPSG','8666','Geoid (height correction) model file','HT2_2010v70.byn',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can CGG2000 2010',0); INSERT INTO "usage" VALUES('EPSG','20137','grid_transformation','EPSG','10418','EPSG','1289','EPSG','1133'); -INSERT INTO "grid_transformation" VALUES('EPSG','10421','NAD83(CSRS)v8 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','10413','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10421','NAD83(CSRS)v8 to NAD83(CSRS)v2 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','10413','EPSG','8235',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','20188','grid_transformation','EPSG','10421','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10422','NAD83(CSRS)v8 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','10413','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10422','NAD83(CSRS)v8 to NAD83(CSRS)v3 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','10413','EPSG','8239',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','10414','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','20189','grid_transformation','EPSG','10422','EPSG','1061','EPSG','1026'); -INSERT INTO "grid_transformation" VALUES('EPSG','10423','NAD83(CSRS)v8 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NRCan byn)','EPSG','10413','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',0); +INSERT INTO "grid_transformation" VALUES('EPSG','10423','NAD83(CSRS)v8 to NAD83(CSRS)v4 (1)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','10413','EPSG','8244',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can cvg70',1); INSERT INTO "usage" VALUES('EPSG','20190','grid_transformation','EPSG','10423','EPSG','1061','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10469','ETRS89 to COV23-IRF (1)','In conjunction with the COV23-TM map projection (code 10470) applied to COV23-IRF (code 10468), emulates the COV23 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009) defines COV23-IRF hence is errorless. ','EPSG','9615','NTv2','EPSG','4258','EPSG','10468',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-COV23-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'CCC-Gbr COV23 OSNet2009',0); INSERT INTO "usage" VALUES('EPSG','20323','grid_transformation','EPSG','10469','EPSG','4743','EPSG','1141'); @@ -1606,6 +1607,49 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10519','CGVD28 height to CGVD20 INSERT INTO "usage" VALUES('EPSG','20893','grid_transformation','EPSG','10519','EPSG','1289','EPSG','1059'); INSERT INTO "grid_transformation" VALUES('EPSG','10520','CGVD28 height to CGVD2013a(2010) height (2)','Equivalent to HT2_2010v70 hybrid geoid model minus CGG2013a geoid model (i.e. CT code 9986 - CT 9247). NAD83(CSRS)v6 is specified as the interpolation CRS, but for grid interpolation NAD83(CSRS)v2 or any later realization may be used without error.','EPSG','1126','Vertical change by geoid grid difference (NRCan)','EPSG','5713','EPSG','9245',0.05,'EPSG','1063','Geoid model difference file','HT2_2010v70_CGG2013a.byn',NULL,NULL,NULL,NULL,'EPSG','8252','NR-Can HT2 2010',0); INSERT INTO "usage" VALUES('EPSG','20894','grid_transformation','EPSG','10520','EPSG','1289','EPSG','1059'); +INSERT INTO "grid_transformation" VALUES('EPSG','10521','NAD83(CSRS)v2 to NAD83(CSRS)v4 (3)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v4 (4) (code 10522).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8244',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v60VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg60',0); +INSERT INTO "usage" VALUES('EPSG','21280','grid_transformation','EPSG','10521','EPSG','4752','EPSG','1058'); +INSERT INTO "usage" VALUES('EPSG','21281','grid_transformation','EPSG','10521','EPSG','4753','EPSG','1288'); +INSERT INTO "grid_transformation" VALUES('EPSG','10522','NAD83(CSRS)v2 to NAD83(CSRS)v4 (4)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v4 (3) (code 10521).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8244',0.015,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21279','grid_transformation','EPSG','10522','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10523','NAD83(CSRS)v2 to NAD83(CSRS)v6 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v2 to NAD83(CSRS)v6 (3) (code 10524).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8251',0.03,'EPSG','1050','Point motion velocity grid file','NAD83v60VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg60',0); +INSERT INTO "usage" VALUES('EPSG','21131','grid_transformation','EPSG','10523','EPSG','4752','EPSG','1058'); +INSERT INTO "usage" VALUES('EPSG','21132','grid_transformation','EPSG','10523','EPSG','4753','EPSG','1288'); +INSERT INTO "grid_transformation" VALUES('EPSG','10524','NAD83(CSRS)v2 to NAD83(CSRS)v6 (3)','Replaces NAD83(CSRS)v2 to NAD83(CSRS)v6 (2) (code 10523).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21133','grid_transformation','EPSG','10524','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10525','NAD83(CSRS)v2 to NAD83(CSRS)v7 (2)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','8254',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21134','grid_transformation','EPSG','10525','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10526','NAD83(CSRS)v2 to NAD83(CSRS)v8 (2)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8235','EPSG','10413',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8237','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21323','grid_transformation','EPSG','10526','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10527','NAD83(CSRS)v3 to NAD83(CSRS)v4 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v4 (3) (code 10528).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8244',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v60VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg60',0); +INSERT INTO "usage" VALUES('EPSG','21136','grid_transformation','EPSG','10527','EPSG','4752','EPSG','1058'); +INSERT INTO "usage" VALUES('EPSG','21137','grid_transformation','EPSG','10527','EPSG','4753','EPSG','1288'); +INSERT INTO "grid_transformation" VALUES('EPSG','10528','NAD83(CSRS)v3 to NAD83(CSRS)v4 (3)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v4 (2) (code 10527).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8244',0.015,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21138','grid_transformation','EPSG','10528','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10529','NAD83(CSRS)v3 to NAD83(CSRS)v6 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v3 to NAD83(CSRS)v6 (3) (code 10530).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8251',0.03,'EPSG','1050','Point motion velocity grid file','NAD83v60VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg60',0); +INSERT INTO "usage" VALUES('EPSG','21139','grid_transformation','EPSG','10529','EPSG','4752','EPSG','1058'); +INSERT INTO "usage" VALUES('EPSG','21140','grid_transformation','EPSG','10529','EPSG','4753','EPSG','1288'); +INSERT INTO "grid_transformation" VALUES('EPSG','10530','NAD83(CSRS)v3 to NAD83(CSRS)v6 (3)','Replaces NAD83(CSRS)v3 to NAD83(CSRS)v6 (2) (code 10529).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21141','grid_transformation','EPSG','10530','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10534','NAD83(CSRS)v3 to NAD83(CSRS)v7 (2)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','8254',0.03,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21142','grid_transformation','EPSG','10534','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10535','NAD83(CSRS)v3 to NAD83(CSRS)v8 (2)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8239','EPSG','10413',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8240','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21324','grid_transformation','EPSG','10535','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10536','NAD83(CSRS)v4 to NAD83(CSRS)v6 (2)','The v6 velocity grid is not recommended for height transformation north of 60°N due to due to inaccuracies in the vertical component of the velocity model. Replaced by NAD83(CSRS)v4 to NAD83(CSRS)v6 (3) (code 10537).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8251',0.025,'EPSG','1050','Point motion velocity grid file','NAD83v60VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg60',0); +INSERT INTO "usage" VALUES('EPSG','21325','grid_transformation','EPSG','10536','EPSG','4752','EPSG','1058'); +INSERT INTO "usage" VALUES('EPSG','21326','grid_transformation','EPSG','10536','EPSG','4753','EPSG','1288'); +INSERT INTO "grid_transformation" VALUES('EPSG','10537','NAD83(CSRS)v4 to NAD83(CSRS)v6 (3)','Replaces NAD83(CSRS)v4 to NAD83(CSRS)v6 (2) (code 10536).','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8251',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21327','grid_transformation','EPSG','10537','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10538','NAD83(CSRS)v4 to NAD83(CSRS)v7 (2)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','8254',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21328','grid_transformation','EPSG','10538','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10539','NAD83(CSRS)v4 to NAD83(CSRS)v8 (2)','','EPSG','1114','Geographic3D Offset by velocity grid (NTv2_Vel)','EPSG','8244','EPSG','10413',0.02,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8246','NRCan-Can cvg70',0); +INSERT INTO "usage" VALUES('EPSG','21148','grid_transformation','EPSG','10539','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10540','CGVD2013a(1997) height to CGVD2013a(2002) height (2)','Although interpolation CRS is specified as NAD83(CSRS)v7, NAD83(CSRS)v2 or any later realization may be used without introducing significant error.','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20035','EPSG','20034',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can',0); +INSERT INTO "usage" VALUES('EPSG','21329','grid_transformation','EPSG','10540','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10541','CGVD2013a(1997) height to CGVD2013a(2010) height (2)','Although interpolation CRS is specified as NAD83(CSRS)v7, NAD83(CSRS)v2 or any later realization may be used without introducing significant error. ','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20035','EPSG','9245',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can',0); +INSERT INTO "usage" VALUES('EPSG','21330','grid_transformation','EPSG','10541','EPSG','4754','EPSG','1026'); +INSERT INTO "grid_transformation" VALUES('EPSG','10542','CGVD2013a(2002) height to CGVD2013a(2010) height (2)','Although interpolation CRS is specified as NAD83(CSRS)v7, NAD83(CSRS)v2 or any later realization may be used without introducing significant error. ','EPSG','1113','Vertical Offset by velocity grid (NRCan NTv2_Vel)','EPSG','20034','EPSG','9245',0.05,'EPSG','1050','Point motion velocity grid file','NAD83v70VG.gvb',NULL,NULL,NULL,NULL,'EPSG','8255','EPSG-Can',0); +INSERT INTO "usage" VALUES('EPSG','21331','grid_transformation','EPSG','10542','EPSG','4754','EPSG','1026'); INSERT INTO "grid_transformation" VALUES('EPSG','10544','ETRS89 to Cascais height (1)','Hybrid geoid model GeodPT08 adjusts ICAGM07 to fit Cascais at the Portuguese Mainland geodetic network. For reversible alternative to this transformation see ETRS89 to ETRS89 + Cascais height (1) (code 10546).','EPSG','1082','Geographic3D to GravityRelatedHeight (txt)','EPSG','4937','EPSG','5780',0.04,'EPSG','8666','Geoid (height correction) model file','GeodPT08.dat',NULL,NULL,NULL,NULL,NULL,NULL,'DGT-Prt 2008',0); INSERT INTO "usage" VALUES('EPSG','20911','grid_transformation','EPSG','10544','EPSG','1294','EPSG','1133'); INSERT INTO "grid_transformation" VALUES('EPSG','10546','ETRS89 to ETRS89 + Cascais height (1)','Reversible alternative to ETRS89 to Cascais height (1) (code 10544).','EPSG','1098','Geog3D to Geog2D+GravityRelatedHeight (txt)','EPSG','4937','EPSG','10545',0.04,'EPSG','8666','Geoid (height correction) model file','GeodPT08.dat',NULL,NULL,NULL,NULL,'EPSG','4258','DGT-Prt 2008',0); @@ -1634,6 +1678,8 @@ INSERT INTO "grid_transformation" VALUES('EPSG','10568','ETRS89 to ETRS89 + Balt INSERT INTO "usage" VALUES('EPSG','21066','grid_transformation','EPSG','10568','EPSG','1079','EPSG','1270'); INSERT INTO "grid_transformation" VALUES('EPSG','10614','SHGD2015 to SHGD2015 + SHVD2015 height (1)','Reversible alternative to SHGD2015 to SHVD2015 height (1) (code 7891).','EPSG','1092','Geog3D to Geog2D+GravityRelatedHeight (EGM2008)','EPSG','7885','EPSG','9517',0.0,'EPSG','8666','Geoid (height correction) model file','Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz',NULL,NULL,NULL,NULL,'EPSG','7886','ENRD-Shn Hel',0); INSERT INTO "usage" VALUES('EPSG','21285','grid_transformation','EPSG','10614','EPSG','3183','EPSG','1270'); +INSERT INTO "grid_transformation" VALUES('EPSG','10615','NAD83(CSRS)v2 to NAD83(CSRS)v4 (1)','','EPSG','9615','NTv2','EPSG','8237','EPSG','8246',0.1,'EPSG','8656','Latitude and longitude difference file','BC_98_05.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'GeoBC-Can BC mainland',0); +INSERT INTO "usage" VALUES('EPSG','21322','grid_transformation','EPSG','10615','EPSG','4535','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','15486','CH1903 to CH1903+ (1)','For improved accuracy (0.01m) use CHENyx06 interpolation programme FINELTRA. File CHENyx06 replaced by CHENyx06a; there is a small area at the border of the data where some more real data has been introduced. swisstopo consider the change insignificant.','EPSG','9615','NTv2','EPSG','4149','EPSG','4150',0.2,'EPSG','8656','Latitude and longitude difference file','CHENyx06a.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che',0); INSERT INTO "usage" VALUES('EPSG','11497','grid_transformation','EPSG','15486','EPSG','1286','EPSG','1085'); INSERT INTO "grid_transformation" VALUES('EPSG','15488','RRAF 1991 to IGN 1988 MG height (1)','May be used for transformations from WGS 84 to IGN 1988 MG. Accuracy at each 0.025 deg x 0.025 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4973','EPSG','5617',0.2,'EPSG','8666','Geoid (height correction) model file','ggg00_mg.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Glp MG',1); diff --git a/data/sql/helmert_transformation.sql b/data/sql/helmert_transformation.sql index 70dec9e14e..0cab238ce2 100644 --- a/data/sql/helmert_transformation.sql +++ b/data/sql/helmert_transformation.sql @@ -2642,13 +2642,13 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','10419','NAD83(CSRS)v8 to NAD INSERT INTO "usage" VALUES('EPSG','20195','helmert_transformation','EPSG','10419','EPSG','4544','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10478','BBT2000 to WGS 84 (1)','','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','10475','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BBT-Aut-Ita',0); INSERT INTO "usage" VALUES('EPSG','20343','helmert_transformation','EPSG','10478','EPSG','4744','EPSG','1252'); -INSERT INTO "helmert_transformation" VALUES('EPSG','10511','NAD83(CSRS)v2 to NAD83(CSRS)v3 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v2 and NAD83(CSRS)v3 are referenced to the same coordinate reference epoch (1997.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8233','EPSG','8238',0.0,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 1997',0); +INSERT INTO "helmert_transformation" VALUES('EPSG','10511','NAD83(CSRS)v2 to NAD83(CSRS)v3 (3)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v2 and NAD83(CSRS)v3 are referenced to the same coordinate reference epoch (1997.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8233','EPSG','8238',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 1997',0); INSERT INTO "usage" VALUES('EPSG','20612','helmert_transformation','EPSG','10511','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10512','NAD83(CSRS)v6 to NAD83(CSRS)v7 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v6 and NAD83(CSRS)v7 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8250','EPSG','8253',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); INSERT INTO "usage" VALUES('EPSG','20890','helmert_transformation','EPSG','10512','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10513','NAD83(CSRS)v6 to NAD83(CSRS)v8 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)v6 and NAD83(CSRS)v8 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the centimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8250','EPSG','10412',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); INSERT INTO "usage" VALUES('EPSG','20614','helmert_transformation','EPSG','10513','EPSG','1061','EPSG','1027'); -INSERT INTO "helmert_transformation" VALUES('EPSG','10514','NAD83(CSRS)v7 to NAD83(CSRS)v8 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)7 and NAD83(CSRS)v8 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the millimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8253','EPSG','10412',0.001,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); +INSERT INTO "helmert_transformation" VALUES('EPSG','10514','NAD83(CSRS)v7 to NAD83(CSRS)v8 (1)','Scale difference in ppb where 1/billion = 1E-9 or nm/m. NAD83(CSRS)7 and NAD83(CSRS)v8 are referenced to the same coordinate reference epoch (2010.00) and considered compatible with each other at the millimetre level.','EPSG','1033','Position Vector transformation (geocentric domain)','EPSG','8253','EPSG','10412',0.01,0.0,0.0,0.0,'EPSG','9001',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'NRCan-Can 2010',0); INSERT INTO "usage" VALUES('EPSG','20891','helmert_transformation','EPSG','10514','EPSG','1061','EPSG','1027'); INSERT INTO "helmert_transformation" VALUES('EPSG','10543','GDM2000 to WGS 84 (1)','Approximation at the +/- 1m level assuming that GDM2000 is equivalent to WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4742','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Mys 1m',0); INSERT INTO "usage" VALUES('EPSG','20831','helmert_transformation','EPSG','10543','EPSG','1151','EPSG','1252'); diff --git a/data/sql/metadata.sql b/data/sql/metadata.sql index 47dc602509..3188c228f2 100644 --- a/data/sql/metadata.sql +++ b/data/sql/metadata.sql @@ -9,8 +9,8 @@ INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1); INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 4); -INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v11.006'); -INSERT INTO "metadata" VALUES('EPSG.DATE', '2024-03-13'); +INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v11.007'); +INSERT INTO "metadata" VALUES('EPSG.DATE', '2024-03-19'); -- The value of ${PROJ_VERSION} is substituted at build time by the actual -- value. diff --git a/data/sql/scope.sql b/data/sql/scope.sql index f8ec8fba22..b880fb7382 100644 --- a/data/sql/scope.sql +++ b/data/sql/scope.sql @@ -34,7 +34,7 @@ INSERT INTO "scope" VALUES('EPSG','1054','Cadastre, engineering survey.',0); INSERT INTO "scope" VALUES('EPSG','1055','Cadastre, engineering survey, topographic mapping (large scale).',0); INSERT INTO "scope" VALUES('EPSG','1056','Cadastre, engineering survey, topographic mapping.',0); INSERT INTO "scope" VALUES('EPSG','1057','Cadastre, engineering survey, topographic mapping (medium scale).',0); -INSERT INTO "scope" VALUES('EPSG','1058','Change of coordinate epoch for points referenced to NAD83(CSRS)v6.',0); +INSERT INTO "scope" VALUES('EPSG','1058','Change of coordinate epoch in 3-dimensions (φλh).',0); INSERT INTO "scope" VALUES('EPSG','1059','Change of height to a different vertical reference surface.',0); INSERT INTO "scope" VALUES('EPSG','1060','Change of depth to a different vertical reference surface.',0); INSERT INTO "scope" VALUES('EPSG','1061','Cadastre, engineering survey, topographic mapping (1:5000 and larger scales).',0); @@ -264,4 +264,5 @@ INSERT INTO "scope" VALUES('EPSG','1284','Geodesy. Defines NAD83(CSRS)v8.',0); INSERT INTO "scope" VALUES('EPSG','1285','Engineering survey and mapping for the Brenner base tunnel (BBT) railway project.',0); INSERT INTO "scope" VALUES('EPSG','1286','Mapping and data analysis for Texas Water Development Board groundwater modeling.',0); INSERT INTO "scope" VALUES('EPSG','1287','Continental mapping of raster data.',0); +INSERT INTO "scope" VALUES('EPSG','1288','Change of coordinate epoch in 2-dimensions (φλ horizontal only).',0); INSERT INTO "scope" VALUES('EPSG','1289','Geodesy. Defines ETRF2020.',0); diff --git a/data/sql/supersession.sql b/data/sql/supersession.sql index 08c765ecf5..972890f2ad 100644 --- a/data/sql/supersession.sql +++ b/data/sql/supersession.sql @@ -293,11 +293,17 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10130','grid_tra INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10133','grid_transformation','EPSG','10505','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10504','grid_transformation','EPSG','10509','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10505','grid_transformation','EPSG','10510','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','8676','grid_transformation','EPSG','9483','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9925','grid_transformation','EPSG','10294','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9926','grid_transformation','EPSG','10295','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10558','grid_transformation','EPSG','10561','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10559','grid_transformation','EPSG','10563','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10557','grid_transformation','EPSG','10561','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10560','grid_transformation','EPSG','10564','EPSG',0); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10523','grid_transformation','EPSG','10524','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10527','grid_transformation','EPSG','10528','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10529','grid_transformation','EPSG','10530','EPSG',1); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1622','helmert_transformation','EPSG','5226','EPSG',0); INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','1838','helmert_transformation','EPSG','10589','EPSG',0); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10521','grid_transformation','EPSG','10522','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','10536','grid_transformation','EPSG','10537','EPSG',1); diff --git a/scripts/build_db.py b/scripts/build_db.py index 97b4713550..dd01ba8fab 100755 --- a/scripts/build_db.py +++ b/scripts/build_db.py @@ -692,7 +692,7 @@ def fill_helmert_transformation(proj_db_cursor): '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?, ?,?,?,?,?, ?,?)', arg) def fill_grid_transformation(proj_db_cursor): - 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_type IN ('transformation', 'point motion operation') AND (coord_op_method_name LIKE 'Geographic3D to%' OR coord_op_method_name LIKE 'Geog3D to%' OR coord_op_method_name LIKE 'Point motion by grid%' OR coord_op_method_name LIKE 'Vertical % by %grid%' OR coord_op_method_name IN ('NADCON', 'NADCON5 (2D)', 'NADCON5 (3D)', 'NTv1', 'NTv2', 'VERTCON', 'Geocentric translation by Grid Interpolation (IGN)', 'Geographic3D Offset by velocity grid (NRCan byn)'))") + 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_type IN ('transformation', 'point motion operation') AND (coord_op_method_name LIKE 'Geographic3D to%' OR coord_op_method_name LIKE 'Geog3D to%' OR coord_op_method_name LIKE 'Point motion by grid%' OR coord_op_method_name LIKE 'Vertical % by %grid%' OR coord_op_method_name IN ('NADCON', 'NADCON5 (2D)', 'NADCON5 (3D)', 'NTv1', 'NTv2', 'VERTCON', 'Geocentric translation by Grid Interpolation (IGN)', 'Geographic3D Offset by velocity grid (NTv2_Vel)'))") 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(): expected_order = 1 max_n_params = 3 if method_name == 'Geocentric translation by Grid Interpolation (IGN)' else 2 @@ -776,7 +776,7 @@ def fill_grid_transformation(proj_db_cursor): # 1110: Geog3D to Geog2D+Depth (Gravsoft) # 1112: Vertical Offset by Grid Interpolation (NRCan byn) # 1113: Vertical Offset by velocity grid (NRCan byn) - # 1114: Geographic3D Offset by velocity grid (NRCan byn) + # 1114: Geographic3D Offset by velocity grid (NTv2_Vel) # 1115: Geog3D to Geog2D+Depth (txt) # 1118: Geog3D to Geog2D+GravityRelatedHeight (ISG) # 1122: Geog3D to Geog2D+Depth (gtx) diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp index 83e8c562dd..e5487332d6 100644 --- a/src/iso19111/operation/singleoperation.cpp +++ b/src/iso19111/operation/singleoperation.cpp @@ -1971,12 +1971,12 @@ _getGeographic3DOffsetByVelocityGridFilename(const SingleOperation *op, const auto &l_method = op->method(); const auto &methodName = l_method->nameStr(); if (l_method->getEPSGCode() == - EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN || + EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL || (allowInverse && ci_equal( methodName, INVERSE_OF + - EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN))) { + EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); @@ -2004,7 +2004,7 @@ _getVerticalOffsetByVelocityGridFilename(const SingleOperation *op, ci_equal( methodName, INVERSE_OF + - EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN))) { + EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL))) { const auto &fileParameter = op->parameterValue( EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); @@ -4050,7 +4050,7 @@ bool SingleOperation::exportToPROJStringGeneric( throw io::FormattingException( "InterpolationCRS required " "for" - " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN); + " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL); } const bool interpIsSrc = interpCRS->_isEquivalentTo( sourceCRS()->demoteTo2D(std::string(), nullptr).get(), @@ -4061,7 +4061,7 @@ bool SingleOperation::exportToPROJStringGeneric( if (!interpIsSrc && !interpIsTarget) { throw io::FormattingException( "For" - " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN + " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL ", interpolation CRS should be the source or target CRS"); } @@ -4110,13 +4110,13 @@ bool SingleOperation::exportToPROJStringGeneric( if (sourceYear == 0.0) { throw io::FormattingException( "For" - " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN + " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL ", missing epoch for source CRS"); } if (targetYear == 0.0) { throw io::FormattingException( "For" - " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN + " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL ", missing epoch for target CRS"); } formatter->addParam("dt", targetYear - sourceYear); diff --git a/src/proj_constants.h b/src/proj_constants.h index f72d115907..2ebade50f1 100644 --- a/src/proj_constants.h +++ b/src/proj_constants.h @@ -600,10 +600,17 @@ "Point motion velocity grid file" /* ------------------------------------------------------------------------ */ + +/* Has been renamed to + * EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL */ #define EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN \ "Geographic3D Offset by velocity grid (NRCan byn)" #define EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN 1114 +#define EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL \ + "Geographic3D Offset by velocity grid (NTv2_Vel)" +#define EPSG_CODE_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL 1114 + /* ------------------------------------------------------------------------ */ #define EPSG_NAME_METHOD_VERTICAL_OFFSET_BY_VELOCITY_GRID_NRCAN \ diff --git a/test/cli/testprojinfo b/test/cli/testprojinfo index 77a33b2e62..370d422a67 100755 --- a/test/cli/testprojinfo +++ b/test/cli/testprojinfo @@ -390,8 +390,8 @@ echo 'Testing EPSG:9945 -o PROJ -q' >> ${OUT} $EXE EPSG:9945 -o PROJ -q >> ${OUT} echo "" >>${OUT} -echo 'Testing -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark' >> ${OUT} -$EXE -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark >> ${OUT} +echo 'Testing -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark --spatial-test intersects' >> ${OUT} +$EXE -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark --spatial-test intersects >> ${OUT} echo "" >>${OUT} # do 'diff' with distribution results diff --git a/test/cli/testprojinfo_out.dist b/test/cli/testprojinfo_out.dist index 78a484b234..cb3c38acc1 100644 --- a/test/cli/testprojinfo_out.dist +++ b/test/cli/testprojinfo_out.dist @@ -956,7 +956,7 @@ Several candidates area of use matching provided name : EPSG:4575 : Denmark - onshore Jutland, Funen, Zealand and Lolland. EPSG:4693 : Denmark - onshore - Copenhagen and surrounding area. EPSG:4694 : Denmark - onshore northern Schleswig and surrounding islands (i.e. Jutland south of the pre-1920 border near the Kongea river). - EPSG:4756 : 4756 - Denmark - offshore + EPSG:4756 : Denmark - offshore. Testing projinfo -s EPSG:4230 -t EPSG:4258 --area no_match --summary No area of use matching provided name @@ -1714,7 +1714,7 @@ EPSG:2154 "RGF93 v1 / Lambert-93" Testing EPSG:9945 -o PROJ -q +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=500000 +y_0=-4000000 +ellps=bessel +towgs84=521.748,229.489,590.921,4.029,4.488,-15.521,-9.78 +units=m +no_defs +type=crs -Testing -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark +Testing -s "NAD83(CSRS)v7" --s_epoch 1997 -t "NAD83(CSRS)v7" --t_epoch 2010 --summary --hide-ballpark --spatial-test intersects Candidate operations found: 1 -unknown id, Null geographic offset from NAD83(CSRS)v7 (geog2D) to NAD83(CSRS)v7 (geog3D) + Canada velocity grid v7 from epoch 1997 to epoch 2010 + Null geographic offset from NAD83(CSRS)v7 (geog3D) to NAD83(CSRS)v7 (geog2D), 0.01 m, Canada - onshore and offshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. +unknown id, Null geographic offset from NAD83(CSRS)v7 (geog2D) to NAD83(CSRS)v7 (geog3D) + Canada velocity grid v7 from epoch 1997 to epoch 2010 + Null geographic offset from NAD83(CSRS)v7 (geog3D) to NAD83(CSRS)v7 (geog2D), 0.01 m, Canada - onshore - Alberta; British Columbia (BC); Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward Island (PEI); Quebec; Saskatchewan; Yukon. diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp index 260d89cc88..c673c15d36 100644 --- a/test/unit/test_factory.cpp +++ b/test/unit/test_factory.cpp @@ -1407,7 +1407,8 @@ TEST(factory, " GEOGCRS[\"NAD83(CSRS)v7\",\n" " DATUM[\"North American Datum of 1983 (CSRS) version 7\",\n" " ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n" - " LENGTHUNIT[\"metre\",1]]],\n" + " LENGTHUNIT[\"metre\",1]],\n" + " ANCHOREPOCH[2010]],\n" " PRIMEM[\"Greenwich\",0,\n" " ANGLEUNIT[\"degree\",0.0174532925199433]],\n" " CS[ellipsoidal,3],\n" @@ -1421,7 +1422,7 @@ TEST(factory, " ORDER[3],\n" " LENGTHUNIT[\"metre\",1]],\n" " ID[\"EPSG\",8254]]],\n" - " METHOD[\"Point motion by grid (Canada NTv2_Vel)\",\n" + " METHOD[\"Point motion by grid (NTv2_Vel)\",\n" " ID[\"EPSG\",1070]],\n" " PARAMETERFILE[\"Point motion velocity grid " "file\",\"NAD83v70VG.gvb\"],\n" @@ -1429,14 +1430,15 @@ TEST(factory, " USAGE[\n" " SCOPE[\"Change of coordinate epoch for points referenced to " "NAD83(CSRS)v7.\"],\n" - " AREA[\"Canada - onshore and offshore - Alberta; British " - "Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; " - "Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward " - "Island; Quebec; Saskatchewan; Yukon.\"],\n" - " BBOX[38.21,-141.01,86.46,-40.73]],\n" + " AREA[\"Canada - onshore - Alberta; British Columbia (BC); " + "Manitoba; New Brunswick (NB); Newfoundland and Labrador; Northwest " + "Territories (NWT); Nova Scotia (NS); Nunavut; Ontario; Prince Edward " + "Island (PEI); Quebec; Saskatchewan; Yukon.\"],\n" + " BBOX[41.67,-141.01,83.17,-52.54]],\n" " ID[\"EPSG\",9483],\n" " REMARK[\"File initially published with name cvg70.cvb, later " - "renamed to NAD83v70VG.gvb with no change of content.\"]]"; + "renamed to NAD83v70VG.gvb with no change of content. Replaces v6 " + "velocity grid.\"]]"; EXPECT_EQ( pmo->exportToWKT( diff --git a/test/unit/test_operationfactory.cpp b/test/unit/test_operationfactory.cpp index 5d84407e83..d1f4a79e23 100644 --- a/test/unit/test_operationfactory.cpp +++ b/test/unit/test_operationfactory.cpp @@ -10392,7 +10392,7 @@ TEST( "+x_0=304800 +y_0=0 +ellps=GRS80 " "+step +proj=vgridshift +grids=ca_nrc_HT2_1997.tif +multiplier=1 " "+step +proj=cart +ellps=GRS80 " - "+step +inv +proj=deformation +dt=-13 " + "+step +proj=deformation +dt=13 " "+grids=ca_nrc_NAD83v70VG.tif " "+ellps=GRS80 " "+step +inv +proj=cart +ellps=GRS80 " @@ -10466,8 +10466,8 @@ TEST(operation, createOperation_Geographic3D_Offset_by_velocity_grid) { "+step +proj=axisswap +order=2,1 " "+step +proj=unitconvert +xy_in=deg +z_in=m +xy_out=rad +z_out=m " "+step +proj=cart +ellps=GRS80 " - "+step +proj=deformation +dt=-13 +grids=ca_nrc_NAD83v70VG.tif " - "+ellps=GRS80 " + "+step +inv +proj=deformation +dt=13 " + "+grids=ca_nrc_NAD83v70VG.tif +ellps=GRS80 " "+step +inv +proj=cart +ellps=GRS80 " "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m " "+step +proj=axisswap +order=2,1"); @@ -10499,7 +10499,7 @@ TEST(operation, createOperation_test_createOperationsWithDatumPivot_iter_1) { EXPECT_STREQ(list[0]->nameStr().c_str(), "Conversion from NAD83(CSRS)v2 (geog2D) to " "NAD83(CSRS)v2 (geocentric) + " - "NAD83(CSRS)v2 to NAD83(CSRS)v3 (1) + " + "NAD83(CSRS)v2 to NAD83(CSRS)v3 (3) + " "Conversion from NAD83(CSRS)v3 (geocentric) to " "NAD83(CSRS)v3 (geog2D)"); EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()), From 67f340230190c2cb8f49f5be577209767242fe25 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 19 Mar 2024 10:14:01 +0100 Subject: [PATCH 2/5] Operation Geographic3D Offset By Velocity Grid: use geodetic datum anchor epoch, now that NAD83(CSRS)vX datums have one since EPSG v11.007 --- src/iso19111/operation/singleoperation.cpp | 57 ++++++++++------------ 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp index e5487332d6..57c86a8c05 100644 --- a/src/iso19111/operation/singleoperation.cpp +++ b/src/iso19111/operation/singleoperation.cpp @@ -4038,6 +4038,16 @@ bool SingleOperation::exportToPROJStringGeneric( concat("Can apply ", methodName, " only to GeographicCRS")); } + const auto &srcEpoch = + sourceCRSGeog->datumNonNull(formatter->databaseContext()) + ->anchorEpoch(); + if (!srcEpoch.has_value()) { + throw io::FormattingException( + "For" + " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL + ", missing epoch for source CRS"); + } + auto targetCRSGeog = dynamic_cast(targetCRS().get()); if (!targetCRSGeog) { @@ -4045,6 +4055,16 @@ bool SingleOperation::exportToPROJStringGeneric( concat("Can apply ", methodName, " only to GeographicCRS")); } + const auto &dstEpoch = + targetCRSGeog->datumNonNull(formatter->databaseContext()) + ->anchorEpoch(); + if (!dstEpoch.has_value()) { + throw io::FormattingException( + "For" + " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL + ", missing epoch for target CRS"); + } + const auto &interpCRS = interpolationCRS(); if (!interpCRS) { throw io::FormattingException( @@ -4088,37 +4108,12 @@ bool SingleOperation::exportToPROJStringGeneric( sourceCRSGeog->ellipsoid()->_exportToPROJString(formatter); formatter->addStep("deformation"); - const std::string srcName(sourceCRS()->nameStr()); - const std::string dstName(targetCRS()->nameStr()); - const struct { - const char *name; - double epoch; - } realizationEpochs[] = { - {"NAD83(CSRS)v2", 1997.0}, {"NAD83(CSRS)v3", 1997.0}, - {"NAD83(CSRS)v4", 2002.0}, {"NAD83(CSRS)v5", 2006.0}, - {"NAD83(CSRS)v6", 2010.0}, {"NAD83(CSRS)v7", 2010.0}, - {"NAD83(CSRS)v8", 2010.0}, - }; - double sourceYear = 0.0; - double targetYear = 0.0; - for (const auto &iter : realizationEpochs) { - if (iter.name == srcName) - sourceYear = iter.epoch; - if (iter.name == dstName) - targetYear = iter.epoch; - } - if (sourceYear == 0.0) { - throw io::FormattingException( - "For" - " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL - ", missing epoch for source CRS"); - } - if (targetYear == 0.0) { - throw io::FormattingException( - "For" - " " EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL - ", missing epoch for target CRS"); - } + + const double sourceYear = + srcEpoch->convertToUnit(common::UnitOfMeasure::YEAR); + const double targetYear = + dstEpoch->convertToUnit(common::UnitOfMeasure::YEAR); + formatter->addParam("dt", targetYear - sourceYear); formatter->addParam("grids", geographic3DOffsetByVelocityGridFilename); (interpIsTarget ? targetCRSGeog : sourceCRSGeog) From 7eb1c3a57edb9a80915f01219c7e4528ef5c1072 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 19 Mar 2024 10:51:38 +0100 Subject: [PATCH 3/5] Recognize EPSG:1079 'New Zealand Deformation Model' and map it to +proj=defmodel, removing custom entries from other_transformation_custom.sql --- data/sql/concatenated_operation.sql | 24 +++++ data/sql/concatenated_operation_step.sql | 24 +++++ data/sql/grid_alternatives.sql | 7 ++ data/sql/grid_transformation.sql | 14 +++ data/sql/other_transformation_custom.sql | 101 -------------------- data/sql/proj_db_table_defs.sql | 2 +- data/sql/supersession.sql | 13 +++ scripts/build_db.py | 2 +- src/iso19111/operation/singleoperation.cpp | 103 +++++++++++++++++++++ src/proj_constants.h | 6 ++ test/cli/testprojinfo | 24 ++--- test/cli/testprojinfo_out.dist | 34 +++---- 12 files changed, 222 insertions(+), 132 deletions(-) diff --git a/data/sql/concatenated_operation.sql b/data/sql/concatenated_operation.sql index 2e0b54b515..ee621c82b2 100644 --- a/data/sql/concatenated_operation.sql +++ b/data/sql/concatenated_operation.sql @@ -419,6 +419,30 @@ INSERT INTO "concatenated_operation" VALUES('EPSG','8657','Egypt Gulf of Suez S- INSERT INTO "usage" VALUES('EPSG','10749','concatenated_operation','EPSG','8657','EPSG','2341','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','8659','Kertau (RSO) to WGS 84 (1)','Step 1 is necessary to rescale the grid units before using step 2.','EPSG','4751','EPSG','4326',15.0,'OGP-Mys',0); INSERT INTO "usage" VALUES('EPSG','10751','concatenated_operation','EPSG','8659','EPSG','1309','EPSG','1164'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9091','ITRF97 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4918','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10905','concatenated_operation','EPSG','9091','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9092','ITRF2000 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4919','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10906','concatenated_operation','EPSG','9092','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9093','ITRF2005 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. See CT 1565 for low accuracy applications.','EPSG','4896','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10907','concatenated_operation','EPSG','9093','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9094','ITRF2008 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. Replaced by concatenated operation ITRF2008 to NZGD2000 (2) (CT code 9095) which uses the 2013-08-01 model. See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2000-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10908','concatenated_operation','EPSG','9094','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9095','ITRF2008 to NZGD2000 (2)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (1) (CT code 9094). Replaced by concatenated op. ITRF2008 to NZGD2000 (3) (CT code 9096). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2013-08-01',0); +INSERT INTO "usage" VALUES('EPSG','10909','concatenated_operation','EPSG','9095','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9096','ITRF2008 to NZGD2000 (3)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (2) (CT code 9095). Replaced by concatenated op. ITRF2008 to NZGD2000 (4) (CT code 9097). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2014-02-01',0); +INSERT INTO "usage" VALUES('EPSG','10910','concatenated_operation','EPSG','9096','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9097','ITRF2008 to NZGD2000 (4)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (3) (CT code 9096). Replaced by concatenated op. ITRF2008 to NZGD2000 (5) (CT code 9098). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2015-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10911','concatenated_operation','EPSG','9097','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9098','ITRF2008 to NZGD2000 (5)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (4) (CT code 9097). Replaced by concatenated op. ITRF2008 to NZGD2000 (6) (CT code 9099). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2016-07-01',0); +INSERT INTO "usage" VALUES('EPSG','10912','concatenated_operation','EPSG','9098','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9099','ITRF2008 to NZGD2000 (6)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2008 to NZGD2000 (5) (CT code 9098). See CT 1565 for low accuracy applications.','EPSG','5332','EPSG','4959',0.03,'IOGP-Nzl 2017-12-01',0); +INSERT INTO "usage" VALUES('EPSG','10913','concatenated_operation','EPSG','9099','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9100','ITRF2014 to NZGD2000 (1)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D coordinate domain. Replaced by 2017-12-01 model (CT code 9101). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2016-07-01',0); +INSERT INTO "usage" VALUES('EPSG','10914','concatenated_operation','EPSG','9100','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9101','ITRF2014 to NZGD2000 (2)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2014 to NZGD2000 (1) (CT code 9100). Replaced by concatenated op. ITRF2014 to NZGD2000 (3) (CT code 9102). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2017-12-01',0); +INSERT INTO "usage" VALUES('EPSG','10915','concatenated_operation','EPSG','9101','EPSG','3285','EPSG','1027'); +INSERT INTO "concatenated_operation" VALUES('EPSG','9102','ITRF2014 to NZGD2000 (3)','Step 1 is in geocentric coordinate domain, step 2 in geographic 3D domain. Replaces concatenated op. ITRF2014 to NZGD2000 (2) (CT code 9101). See CT 1565 for low accuracy applications.','EPSG','7789','EPSG','4959',0.03,'IOGP-Nzl 2018-07-01',0); +INSERT INTO "usage" VALUES('EPSG','10916','concatenated_operation','EPSG','9102','EPSG','3285','EPSG','1027'); INSERT INTO "concatenated_operation" VALUES('EPSG','9103','NAD27 to ITRF2014 (1)','For use with legacy data - see CT code 9104 for alternative for new areas. Note that steps 1 and 2 are documented in the geog2D domain, steps 3 and 4 in the geocentric domain. Steps 3 and 4 may be implemented in one operation using CT code 8970.','EPSG','4267','EPSG','7789',1.5,'IOGP-Usa GoM legacy',0); INSERT INTO "usage" VALUES('EPSG','10917','concatenated_operation','EPSG','9103','EPSG','3357','EPSG','1136'); INSERT INTO "concatenated_operation" VALUES('EPSG','9104','NAD27 to ITRF2014 (2)','For use in new operations - see CT code 9103 for alternative for legacy data. Note that steps 1 to 5 are documented in the geog2D domain, steps 6 and 7 in the geocentric domain. Steps 6 and 7 may be implemented in one operation using CT code 8970.','EPSG','4267','EPSG','7789',0.2,'IOGP-Usa GoM non-legacy',0); diff --git a/data/sql/concatenated_operation_step.sql b/data/sql/concatenated_operation_step.sql index 2e80a8ceec..39b1f0a1c8 100644 --- a/data/sql/concatenated_operation_step.sql +++ b/data/sql/concatenated_operation_step.sql @@ -421,6 +421,30 @@ INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',1,'EPSG','15792') INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',2,'EPSG','1240'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',1,'EPSG','15896'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',2,'EPSG','1158'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',1,'EPSG','9079'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',2,'EPSG','9084'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',1,'EPSG','9080'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',2,'EPSG','9084'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',1,'EPSG','9081'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',2,'EPSG','9084'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',1,'EPSG','9082'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',2,'EPSG','9084'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',1,'EPSG','9082'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',2,'EPSG','9085'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',1,'EPSG','9082'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',2,'EPSG','9086'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',1,'EPSG','9082'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',2,'EPSG','9087'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',1,'EPSG','9082'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',2,'EPSG','9088'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',1,'EPSG','9082'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',2,'EPSG','9089'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',1,'EPSG','9083'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',2,'EPSG','9088'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',1,'EPSG','9083'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',2,'EPSG','9089'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',1,'EPSG','9083'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',2,'EPSG','9090'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',1,'EPSG','1241'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',2,'EPSG','8971'); INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',3,'EPSG','7807'); diff --git a/data/sql/grid_alternatives.sql b/data/sql/grid_alternatives.sql index 373986ab47..ef1d045f7f 100644 --- a/data/sql/grid_alternatives.sql +++ b/data/sql/grid_alternatives.sql @@ -260,6 +260,13 @@ VALUES -- nz_linz - New Zealand ('nzgd2kgrid0005.gsb','nz_linz_nzgd2kgrid0005.tif','nzgd2kgrid0005.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2kgrid0005.tif',1,1,NULL), ('nzgeoid2016.gtx','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), +('nzgd2000_deformation_20000101_full.zip','nz_linz_nzgd2000-20000101.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20000101.json',1,1,NULL), +('nzgd2000_deformation_20130801_full.zip','nz_linz_nzgd2000-20130801.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20130801.json',1,1,NULL), +('nzgd2000_deformation_20140201_full.zip','nz_linz_nzgd2000-20140201.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20140201.json',1,1,NULL), +('nzgd2000_deformation_20150101_full.zip','nz_linz_nzgd2000-20150101.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20150101.json',1,1,NULL), +('nzgd2000_deformation_20160701_full.zip','nz_linz_nzgd2000-20160701.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20160701.json',1,1,NULL), +('nzgd2000_deformation_20171201_full.zip','nz_linz_nzgd2000-20171201.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20171201.json',1,1,NULL), +('nzgd2000_deformation_20180701_full.zip','nz_linz_nzgd2000-20180701.json',NULL,'GTiff','defmodel',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2000-20180701.json',1,1,NULL), -- Superseded ('New_Zealand_Quasigeoid_2016.csv','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), ('nzgeoid2009.gtx','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), diff --git a/data/sql/grid_transformation.sql b/data/sql/grid_transformation.sql index 010e0f263f..977f2ebc92 100644 --- a/data/sql/grid_transformation.sql +++ b/data/sql/grid_transformation.sql @@ -597,6 +597,20 @@ INSERT INTO "grid_transformation" VALUES('EPSG','8868','NAD83(FBN) to NAD83(NSRS INSERT INTO "usage" VALUES('EPSG','10810','grid_transformation','EPSG','8868','EPSG','3634','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','8885','RGF93 v2 to NGF-IGN69 height (3)','Replaces RAF09 geoid model [RGF93 v2 to NGF-IGN69 height (2) (code 8371)]. Replaced by RAF18b model. May also be found with filename RAF18.tac. For reversible alternative see RGF93 v2 to RGF93 v2 + NGF-IGN69 height (3) (code 9638).','EPSG','1073','Geographic3D to GravityRelatedHeight (IGN2009)','EPSG','9776','EPSG','5720',0.01,'EPSG','8666','Geoid (height correction) model file','RAF18.mnt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra 18',0); INSERT INTO "usage" VALUES('EPSG','14492','grid_transformation','EPSG','8885','EPSG','1326','EPSG','1133'); +INSERT INTO "grid_transformation" VALUES('EPSG','9084','ITRF96 to NZGD2000 (1)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaced by 2013-08-01 model (CT code 9085).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20000101_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2000-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10898','grid_transformation','EPSG','9084','EPSG','3285','EPSG','1027'); +INSERT INTO "grid_transformation" VALUES('EPSG','9085','ITRF96 to NZGD2000 (2)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2000-01-01 model (CT code 9084). Replaced by 2013-08-01 model (CT code 9086).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20130801_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2013-08-01',0); +INSERT INTO "usage" VALUES('EPSG','10899','grid_transformation','EPSG','9085','EPSG','3285','EPSG','1027'); +INSERT INTO "grid_transformation" VALUES('EPSG','9086','ITRF96 to NZGD2000 (3)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2013-08-01 model (CT code 9085). Replaced by 2015-01-01 model (CT code 9087).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20140201_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2014-02-01',0); +INSERT INTO "usage" VALUES('EPSG','10900','grid_transformation','EPSG','9086','EPSG','3285','EPSG','1027'); +INSERT INTO "grid_transformation" VALUES('EPSG','9087','ITRF96 to NZGD2000 (4)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2014-02-01 model (CT code 9086). Replaced by 2016-07-01 model (CT code 9088).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20150101_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2015-01-01',0); +INSERT INTO "usage" VALUES('EPSG','10901','grid_transformation','EPSG','9087','EPSG','3285','EPSG','1027'); +INSERT INTO "grid_transformation" VALUES('EPSG','9088','ITRF96 to NZGD2000 (5)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2015-01-01 model (CT code 9087). Replaced by 2017-12-01 model (CT code 9089).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20160701_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2016-07-01',0); +INSERT INTO "usage" VALUES('EPSG','10902','grid_transformation','EPSG','9088','EPSG','3285','EPSG','1027'); +INSERT INTO "grid_transformation" VALUES('EPSG','9089','ITRF96 to NZGD2000 (6)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2016-07-01 model (CT code 9088). Replaced by 2018-07-01 model (CT code 9090).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20171201_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2017-12-01',0); +INSERT INTO "usage" VALUES('EPSG','10903','grid_transformation','EPSG','9089','EPSG','3285','EPSG','1027'); +INSERT INTO "grid_transformation" VALUES('EPSG','9090','ITRF96 to NZGD2000 (7)','Used as the second step in ITRF to NZGD2000 concatenated operations. Replaces 2017-12-01 model (CT code 9089).','EPSG','1079','New Zealand Deformation Model','EPSG','7907','EPSG','4959',0.02,'EPSG','1050','Point motion velocity grid file','nzgd2000_deformation_20180701_full.zip',NULL,NULL,NULL,NULL,NULL,NULL,'LINZ-Nzl 2018-07-01',0); +INSERT INTO "usage" VALUES('EPSG','14197','grid_transformation','EPSG','9090','EPSG','3285','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9105','ATS77 to NAD83 (1)','','EPSG','9615','NTv2','EPSG','4122','EPSG','4269',0.5,'EPSG','8656','Latitude and longitude difference file','GS7783.GSB',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS',0); INSERT INTO "usage" VALUES('EPSG','10919','grid_transformation','EPSG','9105','EPSG','2313','EPSG','1027'); INSERT INTO "grid_transformation" VALUES('EPSG','9106','ATS77 to NAD83(CSRS)v6 (4)','Derived through NAD83(CSRS)v6. Replaces ATS77 to NAD83(CSRS)v3 (3) (transformation code 9235).','EPSG','9615','NTv2','EPSG','4122','EPSG','8252',0.06,'EPSG','8656','Latitude and longitude difference file','NS778302.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NSGC-Can NS v2',0); diff --git a/data/sql/other_transformation_custom.sql b/data/sql/other_transformation_custom.sql index 311db23571..a337f66589 100644 --- a/data/sql/other_transformation_custom.sql +++ b/data/sql/other_transformation_custom.sql @@ -56,104 +56,3 @@ INSERT INTO other_transformation VALUES( 'EPSG','5717','EPSG','3900',0.01, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4123',NULL,0); INSERT INTO "usage" VALUES('PROJ','N60_TO_N2000_USAGE','other_transformation','PROJ','N60_TO_N2000','EPSG','3333','EPSG','1024'); - - --- Temporary entry for NZGD2000 deformation model -INSERT INTO other_transformation VALUES( - 'PROJ','NZGD2000-20180701','NZGD2000 to ITRF96', - 'New Zealand Deformation Model. Defines the secular model (National Deformation Model) and patches for significant deformation events since 2000', - 'PROJ', 'PROJString', - '+proj=pipeline ' || - '+step +proj=unitconvert +xy_in=deg +xy_out=rad ' || - '+step +proj=axisswap +order=2,1 ' || - '+step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json ' || - '+step +proj=axisswap +order=2,1 ' || - '+step +proj=unitconvert +xy_in=rad +xy_out=deg', - 'EPSG','4959', - 'EPSG','7907', - NULL, --accuracy - NULL,NULL,NULL,NULL,NULL,NULL, -- param1 - NULL,NULL,NULL,NULL,NULL,NULL, -- param2 - NULL,NULL,NULL,NULL,NULL,NULL, -- param3 - NULL,NULL,NULL,NULL,NULL,NULL, -- param4 - NULL,NULL,NULL,NULL,NULL,NULL, -- param5 - NULL,NULL,NULL,NULL,NULL,NULL, -- param6 - NULL,NULL,NULL,NULL,NULL,NULL, -- param7 - NULL,NULL, - '20180701', -- operation version - 0); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000-20180701_USAGE', - 'other_transformation', - 'PROJ', - 'NZGD2000-20180701', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF97','NZGD2000 to ITRF97','Concatenation of PROJ:NZGD2000-20180701 and 9079','EPSG','4959','EPSG','7908',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF97',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF97',2,'EPSG','9079'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF97_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF97', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2000','NZGD2000 to ITRF2000','Concatenation of PROJ:NZGD2000-20180701 and 9080','EPSG','4959','EPSG','7909',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2000',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2000',2,'EPSG','9080'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2000_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2000', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2005','NZGD2000 to ITRF2005','Concatenation of PROJ:NZGD2000-20180701 and 9081','EPSG','4959','EPSG','7910',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2005',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2005',2,'EPSG','9081'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2005_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2005', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2008','NZGD2000 to ITRF2008','Concatenation of PROJ:NZGD2000-20180701 and EPSG:9082','EPSG','4959','EPSG','7911',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2008',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2008',2,'EPSG','9082'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2008_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2008', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2014','NZGD2000 to ITRF2014','Concatenation of PROJ:NZGD2000-20180701 and EPSG:9083','EPSG','4959','EPSG','7912',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2014',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2014',2,'EPSG','9083'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2014_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2014', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); diff --git a/data/sql/proj_db_table_defs.sql b/data/sql/proj_db_table_defs.sql index ff33e96d87..108c888ae6 100644 --- a/data/sql/proj_db_table_defs.sql +++ b/data/sql/proj_db_table_defs.sql @@ -1187,7 +1187,7 @@ CREATE TABLE grid_alternatives( CONSTRAINT fk_grid_alternatives_grid_packages FOREIGN KEY (package_name) REFERENCES grid_packages(package_name) ON DELETE CASCADE, CONSTRAINT check_grid_alternatives_grid_fromat CHECK (proj_grid_format IN ('GTiff', 'GTX', 'NTv2', 'JSON')), - CONSTRAINT check_grid_alternatives_proj_method CHECK (proj_method IN ('gridshift', 'hgridshift', 'vgridshift', 'geoid_like', 'geocentricoffset', 'tinshift', 'velocity_grid')), + CONSTRAINT check_grid_alternatives_proj_method CHECK (proj_method IN ('gridshift', 'hgridshift', 'vgridshift', 'geoid_like', 'geocentricoffset', 'tinshift', 'velocity_grid', 'defmodel')), CONSTRAINT check_grid_alternatives_inverse_direction CHECK (NOT(proj_method = 'geoid_like' AND inverse_direction = 1)), CONSTRAINT check_grid_alternatives_package_name CHECK (package_name IS NULL), CONSTRAINT check_grid_alternatives_direct_download_url CHECK (NOT(direct_download IS NULL AND url IS NOT NULL)), diff --git a/data/sql/supersession.sql b/data/sql/supersession.sql index 972890f2ad..3bc8437fd1 100644 --- a/data/sql/supersession.sql +++ b/data/sql/supersession.sql @@ -194,8 +194,21 @@ INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3916','helmer INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','3914','helmert_transformation','EPSG','8689','EPSG',0); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5506','grid_transformation','EPSG','9134','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5503','grid_transformation','EPSG','9133','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9084','grid_transformation','EPSG','9085','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5505','grid_transformation','EPSG','9188','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','5508','grid_transformation','EPSG','9187','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9085','grid_transformation','EPSG','9086','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9086','grid_transformation','EPSG','9087','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9088','grid_transformation','EPSG','9089','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9094','concatenated_operation','EPSG','9095','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9096','concatenated_operation','EPSG','9097','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9098','concatenated_operation','EPSG','9099','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9100','concatenated_operation','EPSG','9101','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9087','grid_transformation','EPSG','9088','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9095','concatenated_operation','EPSG','9096','EPSG',1); +INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9089','grid_transformation','EPSG','9090','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9097','concatenated_operation','EPSG','9098','EPSG',1); +INSERT INTO "supersession" VALUES('concatenated_operation','EPSG','9101','concatenated_operation','EPSG','9102','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9137','grid_transformation','EPSG','9228','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','6326','grid_transformation','EPSG','9229','EPSG',1); INSERT INTO "supersession" VALUES('grid_transformation','EPSG','7646','grid_transformation','EPSG','9230','EPSG',1); diff --git a/scripts/build_db.py b/scripts/build_db.py index dd01ba8fab..710197d327 100755 --- a/scripts/build_db.py +++ b/scripts/build_db.py @@ -692,7 +692,7 @@ def fill_helmert_transformation(proj_db_cursor): '?,?,?, ?, ?,?,?, ?,?, ?,?, ?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?,?, ?,?,?, ?,?,?,?,?, ?,?)', arg) def fill_grid_transformation(proj_db_cursor): - 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_type IN ('transformation', 'point motion operation') AND (coord_op_method_name LIKE 'Geographic3D to%' OR coord_op_method_name LIKE 'Geog3D to%' OR coord_op_method_name LIKE 'Point motion by grid%' OR coord_op_method_name LIKE 'Vertical % by %grid%' OR coord_op_method_name IN ('NADCON', 'NADCON5 (2D)', 'NADCON5 (3D)', 'NTv1', 'NTv2', 'VERTCON', 'Geocentric translation by Grid Interpolation (IGN)', 'Geographic3D Offset by velocity grid (NTv2_Vel)'))") + 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_type IN ('transformation', 'point motion operation') AND (coord_op_method_name LIKE 'Geographic3D to%' OR coord_op_method_name LIKE 'Geog3D to%' OR coord_op_method_name LIKE 'Point motion by grid%' OR coord_op_method_name LIKE 'Vertical % by %grid%' OR coord_op_method_name IN ('NADCON', 'NADCON5 (2D)', 'NADCON5 (3D)', 'NTv1', 'NTv2', 'VERTCON', 'Geocentric translation by Grid Interpolation (IGN)', 'Geographic3D Offset by velocity grid (NTv2_Vel)', 'New Zealand Deformation Model'))") 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(): expected_order = 1 max_n_params = 3 if method_name == 'Geocentric translation by Grid Interpolation (IGN)' else 2 diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp index 57c86a8c05..6cc62a39ed 100644 --- a/src/iso19111/operation/singleoperation.cpp +++ b/src/iso19111/operation/singleoperation.cpp @@ -2622,6 +2622,63 @@ TransformationNNPtr SingleOperation::substitutePROJAlternativeGridNames( } } + if (methodEPSGCode == EPSG_CODE_METHOD_NEW_ZEALAND_DEFORMATION_MODEL) { + auto fileParameter = + parameterValue(EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, + EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); + if (fileParameter && + fileParameter->type() == ParameterValue::Type::FILENAME) { + + const auto &filename = fileParameter->valueFile(); + if (databaseContext->lookForGridAlternative( + filename, projFilename, projGridFormat, inverseDirection)) { + + if (filename == projFilename) { + if (inverseDirection) { + throw util::UnsupportedOperationException( + "Inverse direction for " + projFilename + + " not supported"); + } + return self; + } + + const auto l_sourceCRSNull = sourceCRS(); + const auto l_targetCRSNull = targetCRS(); + if (l_sourceCRSNull == nullptr) { + throw util::UnsupportedOperationException( + "Missing sourceCRS"); + } + if (l_targetCRSNull == nullptr) { + throw util::UnsupportedOperationException( + "Missing targetCRS"); + } + auto l_sourceCRS = NN_NO_CHECK(l_sourceCRSNull); + auto l_targetCRS = NN_NO_CHECK(l_targetCRSNull); + auto parameters = std::vector{ + createOpParamNameEPSGCode( + EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE)}; + if (inverseDirection) { + return Transformation::create( + createPropertiesForInverse( + self.as_nullable().get(), true, false), + l_targetCRS, l_sourceCRS, l_interpolationCRS, + createSimilarPropertiesMethod(method()), + parameters, + {ParameterValue::createFilename(projFilename)}, + coordinateOperationAccuracies()) + ->inverseAsTransformation(); + } else { + return Transformation::create( + createSimilarPropertiesOperation(self), l_sourceCRS, + l_targetCRS, l_interpolationCRS, + createSimilarPropertiesMethod(method()), parameters, + {ParameterValue::createFilename(projFilename)}, + coordinateOperationAccuracies()); + } + } + } + } + return self; } @@ -4440,6 +4497,52 @@ bool SingleOperation::exportToPROJStringGeneric( return true; } + if (methodEPSGCode == EPSG_CODE_METHOD_NEW_ZEALAND_DEFORMATION_MODEL) { + auto sourceCRSGeog = + dynamic_cast(sourceCRS().get()); + if (!sourceCRSGeog) { + throw io::FormattingException( + concat("Can apply ", methodName, " only to GeographicCRS")); + } + + auto targetCRSGeog = + dynamic_cast(targetCRS().get()); + if (!targetCRSGeog) { + throw io::FormattingException( + concat("Can apply ", methodName, " only to GeographicCRS")); + } + + auto fileParameter = + parameterValue(EPSG_NAME_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE, + EPSG_CODE_PARAMETER_POINT_MOTION_VELOCITY_GRID_FILE); + if (fileParameter && + fileParameter->type() == ParameterValue::Type::FILENAME) { + + formatter->startInversion(); + sourceCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); + formatter->stopInversion(); + + if (isMethodInverseOf) { + formatter->startInversion(); + } + + // Operations are registered in EPSG with inverse order as + // the +proj=defmodel implementation + formatter->startInversion(); + formatter->addStep("defmodel"); + formatter->addParam("model", fileParameter->valueFile()); + formatter->stopInversion(); + + if (isMethodInverseOf) { + formatter->stopInversion(); + } + + targetCRSGeog->addAngularUnitConvertAndAxisSwap(formatter); + + return true; + } + } + const char *prefix = "PROJ-based operation method: "; if (starts_with(method()->nameStr(), prefix)) { auto projString = method()->nameStr().substr(strlen(prefix)); diff --git a/src/proj_constants.h b/src/proj_constants.h index 2ebade50f1..6e5daf408b 100644 --- a/src/proj_constants.h +++ b/src/proj_constants.h @@ -601,6 +601,12 @@ /* ------------------------------------------------------------------------ */ +#define EPSG_NAME_METHOD_NEW_ZEALAND_DEFORMATION_MODEL \ + "New Zealand Deformation Model" +#define EPSG_CODE_METHOD_NEW_ZEALAND_DEFORMATION_MODEL 1079 + +/* ------------------------------------------------------------------------ */ + /* Has been renamed to * EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NTV2_VEL */ #define EPSG_NAME_METHOD_GEOGRAPHIC3D_OFFSET_BY_VELOCITY_GRID_NRCAN \ diff --git a/test/cli/testprojinfo b/test/cli/testprojinfo index 370d422a67..2188b19c34 100755 --- a/test/cli/testprojinfo +++ b/test/cli/testprojinfo @@ -241,28 +241,28 @@ echo "" >>${OUT} ###################### # NZGD2000 -> ITRFxx # ###################### -echo 'Testing -s NZGD2000 -t ITRF96 -o PROJ -q' >> ${OUT} -$EXE -s NZGD2000 -t ITRF96 -o PROJ -q >>${OUT} 2>&1 +echo 'Testing -s NZGD2000 -t ITRF96 -o PROJ -q --spatial-test intersects --hide-ballpark' >> ${OUT} +$EXE -s NZGD2000 -t ITRF96 -o PROJ -q --spatial-test intersects --hide-ballpark >>${OUT} 2>&1 echo "" >>${OUT} -echo 'Testing -s NZGD2000 -t ITRF97 -o PROJ -q' >> ${OUT} -$EXE -s NZGD2000 -t ITRF97 -o PROJ -q >>${OUT} 2>&1 +echo 'Testing -s NZGD2000 -t ITRF97 -o PROJ -q --spatial-test intersects --hide-ballpark' >> ${OUT} +$EXE -s NZGD2000 -t ITRF97 -o PROJ -q --spatial-test intersects --hide-ballpark >>${OUT} 2>&1 echo "" >>${OUT} -echo 'Testing -s NZGD2000 -t ITRF2000 -o PROJ -q' >> ${OUT} -$EXE -s NZGD2000 -t ITRF2000 -o PROJ -q >>${OUT} 2>&1 +echo 'Testing -s NZGD2000 -t ITRF2000 -o PROJ -q --spatial-test intersects --hide-ballpark' >> ${OUT} +$EXE -s NZGD2000 -t ITRF2000 -o PROJ -q --spatial-test intersects --hide-ballpark >>${OUT} 2>&1 echo "" >>${OUT} -echo 'Testing -s NZGD2000 -t ITRF2005 -o PROJ -q' >> ${OUT} -$EXE -s NZGD2000 -t ITRF2005 -o PROJ -q >>${OUT} 2>&1 +echo 'Testing -s NZGD2000 -t ITRF2005 -o PROJ -q --spatial-test intersects --hide-ballpark' >> ${OUT} +$EXE -s NZGD2000 -t ITRF2005 -o PROJ -q --spatial-test intersects --hide-ballpark >>${OUT} 2>&1 echo "" >>${OUT} -echo 'Testing -s NZGD2000 -t ITRF2008 -o PROJ -q' >> ${OUT} -$EXE -s NZGD2000 -t ITRF2008 -o PROJ -q >>${OUT} 2>&1 +echo 'Testing -s NZGD2000 -t ITRF2008 -o PROJ -q --spatial-test intersects --hide-ballpark' >> ${OUT} +$EXE -s NZGD2000 -t ITRF2008 -o PROJ -q --spatial-test intersects --hide-ballpark >>${OUT} 2>&1 echo "" >>${OUT} -echo 'Testing -s NZGD2000 -t ITRF2014 -o PROJ -q' >> ${OUT} -$EXE -s NZGD2000 -t ITRF2014 -o PROJ -q >>${OUT} 2>&1 +echo 'Testing -s NZGD2000 -t ITRF2014 -o PROJ -q --spatial-test intersects --hide-ballpark' >> ${OUT} +$EXE -s NZGD2000 -t ITRF2014 -o PROJ -q --spatial-test intersects --hide-ballpark >>${OUT} 2>&1 echo "" >>${OUT} ###################### diff --git a/test/cli/testprojinfo_out.dist b/test/cli/testprojinfo_out.dist index cb3c38acc1..30be752551 100644 --- a/test/cli/testprojinfo_out.dist +++ b/test/cli/testprojinfo_out.dist @@ -1457,19 +1457,19 @@ DATUM["World Geodetic System 1984", Testing --accuracy 0.05 -s EPSG:4326 -t EPSG:4258 Candidate operations found: 0 -Testing -s NZGD2000 -t ITRF96 -o PROJ -q +Testing -s NZGD2000 -t ITRF96 -o PROJ -q --spatial-test intersects --hide-ballpark +proj=pipeline - +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap +order=2,1 + +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json - +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=rad +xy_out=deg + +step +proj=axisswap +order=2,1 -Testing -s NZGD2000 -t ITRF97 -o PROJ -q +Testing -s NZGD2000 -t ITRF97 -o PROJ -q --spatial-test intersects --hide-ballpark +proj=pipeline - +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap +order=2,1 - +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json + +step +proj=unitconvert +xy_in=deg +xy_out=rad + +step +proj=defmodel +model=nz_linz_nzgd2000-20000101.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0 +y=-0.00051 +z=0.01553 +rx=-0.00016508 +ry=0.00026897 +rz=5.984e-05 +s=-0.00151099 +dx=0.00069 +dy=-0.0001 @@ -1479,11 +1479,11 @@ Testing -s NZGD2000 -t ITRF97 -o PROJ -q +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 -Testing -s NZGD2000 -t ITRF2000 -o PROJ -q +Testing -s NZGD2000 -t ITRF2000 -o PROJ -q --spatial-test intersects --hide-ballpark +proj=pipeline - +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap +order=2,1 - +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json + +step +proj=unitconvert +xy_in=deg +xy_out=rad + +step +proj=defmodel +model=nz_linz_nzgd2000-20000101.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0067 +y=0.00379 +z=-0.00717 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=6.901e-05 +dx=0.00069 +dy=-0.0007 @@ -1493,11 +1493,11 @@ Testing -s NZGD2000 -t ITRF2000 -o PROJ -q +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 -Testing -s NZGD2000 -t ITRF2005 -o PROJ -q +Testing -s NZGD2000 -t ITRF2005 -o PROJ -q --spatial-test intersects --hide-ballpark +proj=pipeline - +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap +order=2,1 - +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json + +step +proj=unitconvert +xy_in=deg +xy_out=rad + +step +proj=defmodel +model=nz_linz_nzgd2000-20000101.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0068 +y=0.00299 +z=-0.01297 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=0.00046901 +dx=0.00049 +dy=-0.0006 @@ -1507,11 +1507,11 @@ Testing -s NZGD2000 -t ITRF2005 -o PROJ -q +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 -Testing -s NZGD2000 -t ITRF2008 -o PROJ -q +Testing -s NZGD2000 -t ITRF2008 -o PROJ -q --spatial-test intersects --hide-ballpark +proj=pipeline - +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap +order=2,1 - +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json + +step +proj=unitconvert +xy_in=deg +xy_out=rad + +step +proj=defmodel +model=nz_linz_nzgd2000-20171201.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0048 +y=0.00209 +z=-0.01767 +rx=-0.00016508 +ry=0.00026897 +rz=0.00011984 +s=0.00140901 +dx=0.00079 +dy=-0.0006 @@ -1521,10 +1521,10 @@ Testing -s NZGD2000 -t ITRF2008 -o PROJ -q +step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1 -Testing -s NZGD2000 -t ITRF2014 -o PROJ -q +Testing -s NZGD2000 -t ITRF2014 -o PROJ -q --spatial-test intersects --hide-ballpark +proj=pipeline - +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=axisswap +order=2,1 + +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json +step +proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=0.0064 +y=0.00399 +z=-0.01427 +rx=-0.00016508 From 4d64a35d934697c58c0e3a63aba334687f1b6d08 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 19 Mar 2024 11:57:39 +0100 Subject: [PATCH 4/5] 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 | 18 +++ 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, 431 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..81c8e3cb6b 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), @@ -1075,6 +1076,8 @@ const struct ParamNameCode paramNameCodes[] = { PARAM_NAME_CODE(LATITUDE_OFFSET), PARAM_NAME_CODE(LONGITUDE_OFFSET), PARAM_NAME_CODE(VERTICAL_OFFSET), + PARAM_NAME_CODE(EASTING_OFFSET), + PARAM_NAME_CODE(NORTHING_OFFSET), PARAM_NAME_CODE(GEOID_UNDULATION), PARAM_NAME_CODE(A0), PARAM_NAME_CODE(A1), @@ -1336,6 +1339,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 +1583,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) { From c1957fddc76a0c84566ca71bcb0212a98ffa8724 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 19 Mar 2024 12:45:12 +0100 Subject: [PATCH 5/5] windows.yml: make sure to run tests under bash so that a failure causes an error --- .github/workflows/windows.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4830524459..2340f863f0 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -74,6 +74,18 @@ jobs: dir %PROJ_DIR%\bin - name: Run tests + shell: bash -l {0} + run: | + export VCPKG_ROOT=c:/vcpkg + export platform=${{ env.ARCH }} + export VCPKG_INSTALLED=${VCPKG_ROOT}/installed/${platform}-windows + export PATH=${VCPKG_INSTALLED}/bin:${PATH} + export PROJ_DIR=${GITHUB_WORKSPACE}/proj_dir + export PROJ_BUILD=${GITHUB_WORKSPACE}/build + cd ${PROJ_BUILD} + ctest --output-on-failure -C "${{ env.BUILD_TYPE }}" + + - name: Post install checks shell: cmd run: | set VCPKG_ROOT=c:\vcpkg @@ -83,7 +95,6 @@ jobs: set PROJ_DIR=%GITHUB_WORKSPACE%\proj_dir set PROJ_BUILD=%GITHUB_WORKSPACE%\build cd %PROJ_BUILD% - ctest --output-on-failure -C "${{ env.BUILD_TYPE }}" set PATH=%PROJ_DIR%\bin;%PATH% set BUILD_MODE=shared if "${{ env.BUILD_SHARED_LIBS }}"=="OFF" (set BUILD_MODE=static)