From 10781772e87a89678d57ae14b9a7c962be280a53 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 20 Dec 2024 00:57:19 +0100 Subject: [PATCH] Database: add an optional step_direction column to the concatenated_operation_step table and consequently bump database version structure to 1.5 Building a concatenated operation from its steps is a incredibly complex logic, which requires: - figuring out in which direction the step must be actually run - set source/target CRS on conversions, that natively lack it, by propagating. This is done by propagating CRS from the neighbouring steps... when this is possible. If you chain directly too many conversions, we'll lack the information at some point. Hopefully for records we have, this is mostly just a theoretical concern (I believe, not totally sure...) All that is to satisfy consistency checks, that check that target_crs[op[n]] == source_crs[op[n+1]]. Although in some cases we do need to access the CRS. Typically for a map projection to know the ellipsoid shape. So the alternative would be to attach the ellipsoid shape as a parameter of a map projection (the good old +ellps parameter of PROJ.4 strings) rather than relying on the one of the base geographic CRS. - sometimes insert an implicit Geographic<-->Geocentric conversion step - other things I might not even suspect. This change tries to slightly improve this by addressing the first issue mentioned - figuring out the direction - by adding a step_direction column to the concatenated_operation_step table. Obviously as currently the EPSG dataset doesn't include such information (CC @RogerLott with which I've recently discussed that issue), we must still allow a NULL value to mean unknown. For the few records we maintain under our PROJ authority, we can define it though. At least, this improves a bit the readability of our records. While writing all this, and recalling code I had to write in past years in the pipeline inference logic that need to synthetize intermediate CRS, I'm strongly thinking to what you mentionned @busstoptaktik about the limitations of the current model... Requiring that operation steps have a CRS is a major practical annoyance. --- data/CMakeLists.txt | 2 +- data/sql/concatenated_operation_step.sql | 1008 ++++++++--------- data/sql/ignf.sql | 40 +- data/sql/metadata.sql | 2 +- data/sql/nadcon5_concatenated_operations.sql | 234 ++-- data/sql/other_transformation_custom.sql | 12 +- data/sql/proj_db_table_defs.sql | 1 + data/sql/transformations_czechia_extra.sql | 12 +- include/proj/coordinateoperation.hpp | 18 +- scripts/build_db.py | 2 +- scripts/build_db_create_ignf_from_xml.py | 4 +- .../build_nadcon5_concatenated_operations.py | 2 +- src/iso19111/factory.cpp | 31 +- src/iso19111/io.cpp | 10 +- .../operation/concatenatedoperation.cpp | 79 +- .../operation/coordinateoperationfactory.cpp | 28 +- src/iso19111/operation/singleoperation.cpp | 36 + test/cli/test_projinfo.yaml | 2 +- test/unit/test_factory.cpp | 22 +- 19 files changed, 797 insertions(+), 748 deletions(-) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index e10103e178..2e284852d0 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -31,7 +31,7 @@ set(ALL_SQL_IN "${CMAKE_CURRENT_BINARY_DIR}/all.sql.in") set(PROJ_DB "${CMAKE_CURRENT_BINARY_DIR}/proj.db") include(sql_filelist.cmake) -set(PROJ_DB_SQL_EXPECTED_MD5 "5cae0af56a2189692c8e1cf83fe7929e") +set(PROJ_DB_SQL_EXPECTED_MD5 "dfcc6e3e854b4479ed738ccec2ccee0e") add_custom_command( OUTPUT ${PROJ_DB} diff --git a/data/sql/concatenated_operation_step.sql b/data/sql/concatenated_operation_step.sql index 39b1f0a1c8..f1b0dd5928 100644 --- a/data/sql/concatenated_operation_step.sql +++ b/data/sql/concatenated_operation_step.sql @@ -1,506 +1,506 @@ --- This file has been generated by scripts/build_db.py. DO NOT EDIT ! -INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',1,'EPSG','3895'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',2,'EPSG','1618'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',1,'EPSG','3913'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',2,'EPSG','3962'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',1,'EPSG','1461'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',2,'EPSG','1495'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',1,'EPSG','1672'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',2,'EPSG','1311'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',1,'EPSG','5134'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',2,'EPSG','5189'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',1,'EPSG','5134'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',2,'EPSG','5191'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',1,'EPSG','1884'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',2,'EPSG','4836'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',1,'EPSG','5238'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',2,'EPSG','5227'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',1,'EPSG','1884'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',2,'EPSG','5239'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',1,'EPSG','1756'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',2,'EPSG','1988'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',1,'EPSG','6712'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',2,'EPSG','6713'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',2,'EPSG','1496'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',1,'EPSG','1265'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',2,'EPSG','6873'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',1,'EPSG','1763'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',2,'EPSG','15958'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',1,'EPSG','7813'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',2,'EPSG','7964'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',1,'EPSG','7813'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',2,'EPSG','7966'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',1,'EPSG','7813'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',2,'EPSG','7969'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',1,'EPSG','7813'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',2,'EPSG','7970'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',1,'EPSG','7813'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',2,'EPSG','7971'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',2,'EPSG','7977'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',1,'EPSG','7980'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',2,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',1,'EPSG','7980'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',2,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',3,'EPSG','7813'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',1,'EPSG','1147'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',2,'EPSG','1146'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',1,'EPSG','1763'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',2,'EPSG','1193'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',1,'EPSG','1755'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',2,'EPSG','1125'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',1,'EPSG','1262'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',2,'EPSG','1169'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',1,'EPSG','1265'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',2,'EPSG','1227'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',1,'EPSG','1759'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',2,'EPSG','8452'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',1,'EPSG','1273'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',1,'EPSG','1763'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',2,'EPSG','1276'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',1,'EPSG','1763'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',2,'EPSG','1277'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',1,'EPSG','1278'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',1,'EPSG','1279'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',1,'EPSG','1280'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',1,'EPSG','1437'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',1,'EPSG','1274'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',2,'EPSG','1283'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',1,'EPSG','1266'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',2,'EPSG','1294'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',1,'EPSG','1297'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',2,'EPSG','1302'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',1,'EPSG','1298'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',2,'EPSG','1302'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',1,'EPSG','1299'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',2,'EPSG','1302'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',1,'EPSG','1300'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',2,'EPSG','1302'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',1,'EPSG','1301'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',2,'EPSG','1302'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',1,'EPSG','1309'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',1,'EPSG','1310'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',1,'EPSG','1312'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',1,'EPSG','1313'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',1,'EPSG','1757'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',2,'EPSG','1306'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',1,'EPSG','8361'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',2,'EPSG','8362'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',1,'EPSG','1454'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',1,'EPSG','1455'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',1,'EPSG','1456'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',1,'EPSG','1457'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',1,'EPSG','1451'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',1,'EPSG','1458'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',1,'EPSG','1459'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',1,'EPSG','1460'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',1,'EPSG','1461'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',1,'EPSG','1462'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',1,'EPSG','1463'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',1,'EPSG','1464'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',1,'EPSG','1472'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',2,'EPSG','1473'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',1,'EPSG','1599'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',2,'EPSG','1473'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',1,'EPSG','1600'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',2,'EPSG','1473'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',1,'EPSG','1601'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',2,'EPSG','1473'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',1,'EPSG','1602'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',2,'EPSG','1473'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',1,'EPSG','8365'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',2,'EPSG','8364'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',1,'EPSG','8364'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',2,'EPSG','8367'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',1,'EPSG','1506'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',1,'EPSG','1507'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',1,'EPSG','1509'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',2,'EPSG','1511'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',2,'EPSG','1474'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',2,'EPSG','1475'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',2,'EPSG','1476'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',2,'EPSG','1477'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',2,'EPSG','1478'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',2,'EPSG','1479'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',2,'EPSG','1480'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',2,'EPSG','1481'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',2,'EPSG','1482'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',2,'EPSG','1483'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',2,'EPSG','1484'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',2,'EPSG','1485'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',2,'EPSG','1486'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',2,'EPSG','1487'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',2,'EPSG','1488'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',2,'EPSG','1489'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',2,'EPSG','1490'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',2,'EPSG','1491'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',2,'EPSG','1492'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',2,'EPSG','1493'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',2,'EPSG','1494'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',2,'EPSG','1495'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',1,'EPSG','1747'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',2,'EPSG','1496'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',2,'EPSG','1497'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',2,'EPSG','1498'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',2,'EPSG','1499'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',2,'EPSG','1500'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',2,'EPSG','1501'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',2,'EPSG','1502'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',2,'EPSG','1503'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',2,'EPSG','1515'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',1,'EPSG','1243'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',2,'EPSG','1515'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',1,'EPSG','1454'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',2,'EPSG','1520'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',2,'EPSG','1521'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',2,'EPSG','1522'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',2,'EPSG','1523'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',2,'EPSG','1524'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',2,'EPSG','1525'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',2,'EPSG','1526'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',1,'EPSG','1528'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',2,'EPSG','1527'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',1,'EPSG','1539'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',2,'EPSG','1540'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',1,'EPSG','1541'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',1,'EPSG','1545'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',2,'EPSG','1237'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',2,'EPSG','1553'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',2,'EPSG','1554'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',1,'EPSG','1559'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',1,'EPSG','1560'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',1,'EPSG','1568'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',2,'EPSG','1565'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',1,'EPSG','1576'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',2,'EPSG','1473'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',1,'EPSG','1574'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',1,'EPSG','1572'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',2,'EPSG','1188'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',1,'EPSG','1584'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',1,'EPSG','1588'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',1,'EPSG','1570'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',1,'EPSG','1571'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',1,'EPSG','1591'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',1,'EPSG','1578'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',2,'EPSG','1580'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',1,'EPSG','1579'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',2,'EPSG','1580'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',1,'EPSG','1594'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',1,'EPSG','1595'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',1,'EPSG','1596'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',1,'EPSG','1593'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',2,'EPSG','1150'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',1,'EPSG','1611'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',2,'EPSG','1149'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',1,'EPSG','1616'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',2,'EPSG','1237'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',1,'EPSG','1454'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',2,'EPSG','1741'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',1,'EPSG','1461'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',2,'EPSG','1731'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',1,'EPSG','1313'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',2,'EPSG','1752'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',1,'EPSG','1313'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',2,'EPSG','1702'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',2,'EPSG','1704'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',2,'EPSG','1705'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',2,'EPSG','1706'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',2,'EPSG','1707'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',2,'EPSG','1717'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',2,'EPSG','1728'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',2,'EPSG','1708'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',2,'EPSG','1739'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',2,'EPSG','1750'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',2,'EPSG','1712'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',2,'EPSG','1714'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',2,'EPSG','1713'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',2,'EPSG','1748'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',2,'EPSG','1742'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',2,'EPSG','1709'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',2,'EPSG','1743'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',2,'EPSG','1718'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',2,'EPSG','1719'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',2,'EPSG','1721'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',2,'EPSG','1720'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',2,'EPSG','1725'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',2,'EPSG','1722'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',2,'EPSG','1710'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',2,'EPSG','1723'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',2,'EPSG','1711'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',2,'EPSG','1715'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',2,'EPSG','1716'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',2,'EPSG','1724'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',2,'EPSG','1744'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',2,'EPSG','1749'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',2,'EPSG','1726'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',2,'EPSG','1727'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',2,'EPSG','1729'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',2,'EPSG','1745'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',2,'EPSG','1730'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',2,'EPSG','1737'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',2,'EPSG','1732'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',2,'EPSG','1733'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',2,'EPSG','1734'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',2,'EPSG','1735'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',2,'EPSG','1746'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',2,'EPSG','1736'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',2,'EPSG','1747'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',2,'EPSG','1738'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',1,'EPSG','1241'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',2,'EPSG','1740'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',1,'EPSG','1805'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',1,'EPSG','1806'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',1,'EPSG','1828'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',2,'EPSG','1238'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',1,'EPSG','1839'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',1,'EPSG','1313'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',2,'EPSG','1849'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',1,'EPSG','1881'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',2,'EPSG','1130'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',1,'EPSG','1756'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',2,'EPSG','1944'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',1,'EPSG','1260'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',2,'EPSG','1837'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',1,'EPSG','1762'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',2,'EPSG','1654'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',1,'EPSG','1882'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',2,'EPSG','1253'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',1,'EPSG','1883'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',2,'EPSG','1897'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',1,'EPSG','1884'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',2,'EPSG','1623'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',1,'EPSG','1891'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',2,'EPSG','1272'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',1,'EPSG','1761'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',2,'EPSG','1891'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',3,'EPSG','1272'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',1,'EPSG','1757'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',2,'EPSG','1618'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',1,'EPSG','1902'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',1,'EPSG','1313'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',2,'EPSG','1950'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',3,'EPSG','1946'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',1,'EPSG','1991'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',2,'EPSG','1986'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',1,'EPSG','1991'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',2,'EPSG','1990'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',1,'EPSG','1071'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',2,'EPSG','1073'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',1,'EPSG','1063'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',2,'EPSG','1065'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',1,'EPSG','1064'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',2,'EPSG','1065'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',1,'EPSG','1902'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',2,'EPSG','1240'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',1,'EPSG','15790'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',2,'EPSG','1240'); -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'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',4,'EPSG','7790'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',1,'EPSG','8555'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',2,'EPSG','8556'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',3,'EPSG','8861'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',4,'EPSG','8862'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',5,'EPSG','8559'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',6,'EPSG','7807'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',7,'EPSG','7790'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',1,'EPSG','1313'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',2,'EPSG','9244'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',1,'EPSG','1763'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',2,'EPSG','9327'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',1,'EPSG','9276'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',2,'EPSG','9275'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',1,'EPSG','8049'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',2,'EPSG','8447'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',1,'EPSG','9459'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',2,'EPSG','8447'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',1,'EPSG','8447'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',2,'EPSG','8448'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',1,'EPSG','9729'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',2,'EPSG','9726'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',1,'EPSG','9727'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',2,'EPSG','9726'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',1,'EPSG','9629'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',2,'EPSG','10145'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',2,'EPSG','10380'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',2,'EPSG','10381'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',2,'EPSG','10382'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',2,'EPSG','10383'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',2,'EPSG','10384'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',2,'EPSG','10385'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',2,'EPSG','10386'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',2,'EPSG','10387'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',2,'EPSG','10388'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',2,'EPSG','10389'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',2,'EPSG','10390'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',1,'EPSG','7812'); -INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',2,'EPSG','10391'); -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'); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',1,'EPSG','3895',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','3896',2,'EPSG','1618',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',1,'EPSG','3913',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','3966',2,'EPSG','3962',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',1,'EPSG','1461',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','4435',2,'EPSG','1495',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',1,'EPSG','1672',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','4837',2,'EPSG','1311',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',1,'EPSG','5134',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5190',2,'EPSG','5189',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',1,'EPSG','5134',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5192',2,'EPSG','5191',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',1,'EPSG','1884',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5230',2,'EPSG','4836',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',1,'EPSG','5238',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5240',2,'EPSG','5227',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',1,'EPSG','1884',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5242',2,'EPSG','5239',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',1,'EPSG','1756',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','5838',2,'EPSG','1988',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',1,'EPSG','6712',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','6714',2,'EPSG','6713',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','6739',2,'EPSG','1496',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',1,'EPSG','1265',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','6874',2,'EPSG','6873',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',1,'EPSG','1763',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7811',2,'EPSG','15958',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',1,'EPSG','7813',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7965',2,'EPSG','7964',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',1,'EPSG','7813',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7967',2,'EPSG','7966',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',1,'EPSG','7813',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7973',2,'EPSG','7969',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',1,'EPSG','7813',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7974',2,'EPSG','7970',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',1,'EPSG','7813',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7975',2,'EPSG','7971',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7983',2,'EPSG','7977',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',1,'EPSG','7980',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7986',2,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',1,'EPSG','7980',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',2,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','7987',3,'EPSG','7813',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',1,'EPSG','1147',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8047',2,'EPSG','1146',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',1,'EPSG','1763',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8094',2,'EPSG','1193',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',1,'EPSG','1755',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8174',2,'EPSG','1125',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',1,'EPSG','1262',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8175',2,'EPSG','1169',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',1,'EPSG','1265',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8176',2,'EPSG','1227',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',1,'EPSG','1759',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8178',2,'EPSG','8452',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',1,'EPSG','1273',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8183',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',1,'EPSG','1763',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8186',2,'EPSG','1276',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',1,'EPSG','1763',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8188',2,'EPSG','1277',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',1,'EPSG','1278',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8190',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',1,'EPSG','1279',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8192',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',1,'EPSG','1280',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8194',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',1,'EPSG','1437',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8195',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',1,'EPSG','1274',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8199',2,'EPSG','1283',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',1,'EPSG','1266',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8211',2,'EPSG','1294',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',1,'EPSG','1297',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8215',2,'EPSG','1302',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',1,'EPSG','1298',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8217',2,'EPSG','1302',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',1,'EPSG','1299',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8219',2,'EPSG','1302',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',1,'EPSG','1300',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8221',2,'EPSG','1302',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',1,'EPSG','1301',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8223',2,'EPSG','1302',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',1,'EPSG','1309',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8234',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',1,'EPSG','1310',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8236',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',1,'EPSG','1312',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8243',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',1,'EPSG','1313',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8245',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',1,'EPSG','1757',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8263',2,'EPSG','1306',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',1,'EPSG','8361',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8363',2,'EPSG','8362',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',1,'EPSG','1454',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8386',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',1,'EPSG','1455',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8388',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',1,'EPSG','1456',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8390',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',1,'EPSG','1457',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8392',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',1,'EPSG','1451',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8394',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',1,'EPSG','1458',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8396',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',1,'EPSG','1459',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8398',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',1,'EPSG','1460',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8400',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',1,'EPSG','1461',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8402',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',1,'EPSG','1462',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8404',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',1,'EPSG','1463',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8406',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',1,'EPSG','1464',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8408',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',1,'EPSG','1472',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8418',2,'EPSG','1473',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',1,'EPSG','1599',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8419',2,'EPSG','1473',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',1,'EPSG','1600',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8420',2,'EPSG','1473',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',1,'EPSG','1601',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8421',2,'EPSG','1473',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',1,'EPSG','1602',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8422',2,'EPSG','1473',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',1,'EPSG','8365',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8442',2,'EPSG','8364',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',1,'EPSG','8364',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8443',2,'EPSG','8367',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',1,'EPSG','1506',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8453',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',1,'EPSG','1507',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8454',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',1,'EPSG','1509',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8457',2,'EPSG','1511',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8460',2,'EPSG','1474',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8461',2,'EPSG','1475',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8462',2,'EPSG','1476',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8463',2,'EPSG','1477',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8464',2,'EPSG','1478',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8465',2,'EPSG','1479',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8466',2,'EPSG','1480',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8467',2,'EPSG','1481',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8468',2,'EPSG','1482',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8469',2,'EPSG','1483',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8470',2,'EPSG','1484',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8471',2,'EPSG','1485',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8472',2,'EPSG','1486',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8473',2,'EPSG','1487',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8474',2,'EPSG','1488',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8475',2,'EPSG','1489',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8476',2,'EPSG','1490',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8477',2,'EPSG','1491',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8478',2,'EPSG','1492',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8479',2,'EPSG','1493',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8480',2,'EPSG','1494',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8481',2,'EPSG','1495',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',1,'EPSG','1747',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8482',2,'EPSG','1496',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8483',2,'EPSG','1497',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8484',2,'EPSG','1498',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8485',2,'EPSG','1499',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8486',2,'EPSG','1500',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8487',2,'EPSG','1501',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8488',2,'EPSG','1502',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8489',2,'EPSG','1503',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8496',2,'EPSG','1515',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',1,'EPSG','1243',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8497',2,'EPSG','1515',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',1,'EPSG','1454',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8508',2,'EPSG','1520',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8509',2,'EPSG','1521',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8510',2,'EPSG','1522',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8511',2,'EPSG','1523',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8512',2,'EPSG','1524',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8513',2,'EPSG','1525',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8514',2,'EPSG','1526',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',1,'EPSG','1528',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8517',2,'EPSG','1527',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',1,'EPSG','1539',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8530',2,'EPSG','1540',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',1,'EPSG','1541',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8532',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',1,'EPSG','1545',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8537',2,'EPSG','1237',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8553',2,'EPSG','1553',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8554',2,'EPSG','1554',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',1,'EPSG','1559',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8560',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',1,'EPSG','1560',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8562',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',1,'EPSG','1568',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8563',2,'EPSG','1565',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',1,'EPSG','1576',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8564',2,'EPSG','1473',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',1,'EPSG','1574',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8565',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',1,'EPSG','1572',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8566',2,'EPSG','1188',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',1,'EPSG','1584',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8568',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',1,'EPSG','1588',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8569',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',1,'EPSG','1570',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8571',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',1,'EPSG','1571',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8572',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',1,'EPSG','1591',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8573',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',1,'EPSG','1578',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8574',2,'EPSG','1580',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',1,'EPSG','1579',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8575',2,'EPSG','1580',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',1,'EPSG','1594',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8576',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',1,'EPSG','1595',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8577',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',1,'EPSG','1596',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8578',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',1,'EPSG','1593',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8579',2,'EPSG','1150',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',1,'EPSG','1611',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8580',2,'EPSG','1149',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',1,'EPSG','1616',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8581',2,'EPSG','1237',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',1,'EPSG','1454',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8582',2,'EPSG','1741',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',1,'EPSG','1461',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8583',2,'EPSG','1731',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',1,'EPSG','1313',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8584',2,'EPSG','1752',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',1,'EPSG','1313',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8585',2,'EPSG','1702',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8586',2,'EPSG','1704',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8587',2,'EPSG','1705',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8588',2,'EPSG','1706',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8589',2,'EPSG','1707',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8590',2,'EPSG','1717',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8591',2,'EPSG','1728',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8592',2,'EPSG','1708',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8593',2,'EPSG','1739',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8594',2,'EPSG','1750',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8595',2,'EPSG','1712',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8596',2,'EPSG','1714',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8597',2,'EPSG','1713',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8598',2,'EPSG','1748',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8599',2,'EPSG','1742',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8600',2,'EPSG','1709',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8601',2,'EPSG','1743',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8602',2,'EPSG','1718',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8603',2,'EPSG','1719',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8604',2,'EPSG','1721',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8605',2,'EPSG','1720',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8606',2,'EPSG','1725',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8607',2,'EPSG','1722',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8608',2,'EPSG','1710',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8609',2,'EPSG','1723',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8610',2,'EPSG','1711',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8611',2,'EPSG','1715',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8612',2,'EPSG','1716',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8613',2,'EPSG','1724',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8614',2,'EPSG','1744',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8615',2,'EPSG','1749',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8616',2,'EPSG','1726',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8617',2,'EPSG','1727',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8618',2,'EPSG','1729',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8619',2,'EPSG','1745',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8620',2,'EPSG','1730',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8621',2,'EPSG','1737',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8622',2,'EPSG','1732',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8623',2,'EPSG','1733',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8624',2,'EPSG','1734',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8625',2,'EPSG','1735',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8626',2,'EPSG','1746',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8627',2,'EPSG','1736',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8628',2,'EPSG','1747',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8629',2,'EPSG','1738',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8630',2,'EPSG','1740',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',1,'EPSG','1805',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8631',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',1,'EPSG','1806',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8632',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',1,'EPSG','1828',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8633',2,'EPSG','1238',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',1,'EPSG','1839',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8634',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',1,'EPSG','1313',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8635',2,'EPSG','1849',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',1,'EPSG','1881',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8636',2,'EPSG','1130',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',1,'EPSG','1756',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8637',2,'EPSG','1944',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',1,'EPSG','1260',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8638',2,'EPSG','1837',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',1,'EPSG','1762',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8639',2,'EPSG','1654',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',1,'EPSG','1882',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8640',2,'EPSG','1253',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',1,'EPSG','1883',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8641',2,'EPSG','1897',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',1,'EPSG','1884',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8642',2,'EPSG','1623',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',1,'EPSG','1891',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8643',2,'EPSG','1272',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',1,'EPSG','1761',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',2,'EPSG','1891',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8644',3,'EPSG','1272',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',1,'EPSG','1757',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8645',2,'EPSG','1618',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',1,'EPSG','1902',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8646',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',1,'EPSG','1313',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',2,'EPSG','1950',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8647',3,'EPSG','1946',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',1,'EPSG','1991',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8648',2,'EPSG','1986',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',1,'EPSG','1991',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8649',2,'EPSG','1990',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',1,'EPSG','1071',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8650',2,'EPSG','1073',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',1,'EPSG','1063',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8651',2,'EPSG','1065',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',1,'EPSG','1064',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8652',2,'EPSG','1065',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',1,'EPSG','1902',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8655',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',1,'EPSG','15790',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8656',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',1,'EPSG','15792',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8657',2,'EPSG','1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',1,'EPSG','15896',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','8659',2,'EPSG','1158',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',1,'EPSG','9079',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9091',2,'EPSG','9084',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',1,'EPSG','9080',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9092',2,'EPSG','9084',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',1,'EPSG','9081',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9093',2,'EPSG','9084',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',1,'EPSG','9082',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9094',2,'EPSG','9084',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',1,'EPSG','9082',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9095',2,'EPSG','9085',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',1,'EPSG','9082',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9096',2,'EPSG','9086',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',1,'EPSG','9082',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9097',2,'EPSG','9087',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',1,'EPSG','9082',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9098',2,'EPSG','9088',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',1,'EPSG','9082',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9099',2,'EPSG','9089',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',1,'EPSG','9083',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9100',2,'EPSG','9088',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',1,'EPSG','9083',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9101',2,'EPSG','9089',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',1,'EPSG','9083',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9102',2,'EPSG','9090',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',1,'EPSG','1241',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',2,'EPSG','8971',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',3,'EPSG','7807',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9103',4,'EPSG','7790',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',1,'EPSG','8555',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',2,'EPSG','8556',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',3,'EPSG','8861',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',4,'EPSG','8862',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',5,'EPSG','8559',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',6,'EPSG','7807',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9104',7,'EPSG','7790',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',1,'EPSG','1313',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9336',2,'EPSG','9244',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',1,'EPSG','1763',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9337',2,'EPSG','9327',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',1,'EPSG','9276',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9499',2,'EPSG','9275',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',1,'EPSG','8049',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9683',2,'EPSG','8447',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',1,'EPSG','9459',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9685',2,'EPSG','8447',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',1,'EPSG','8447',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9687',2,'EPSG','8448',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',1,'EPSG','9729',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9731',2,'EPSG','9726',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',1,'EPSG','9727',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','9750',2,'EPSG','9726',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',1,'EPSG','9629',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10146',2,'EPSG','10145',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10392',2,'EPSG','10380',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10393',2,'EPSG','10381',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10394',2,'EPSG','10382',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10395',2,'EPSG','10383',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10396',2,'EPSG','10384',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10397',2,'EPSG','10385',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10398',2,'EPSG','10386',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10399',2,'EPSG','10387',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10400',2,'EPSG','10388',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10409',2,'EPSG','10389',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10410',2,'EPSG','10390',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',1,'EPSG','7812',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10411',2,'EPSG','10391',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',1,'EPSG','10490',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10495',2,'EPSG','10492',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',1,'EPSG','10492',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10496',2,'EPSG','10494',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',1,'EPSG','9629',NULL); +INSERT INTO "concatenated_operation_step" VALUES('EPSG','10616',2,'EPSG','10145',NULL); diff --git a/data/sql/ignf.sql b/data/sql/ignf.sql index 126b1d52ce..460743b927 100644 --- a/data/sql/ignf.sql +++ b/data/sql/ignf.sql @@ -4345,41 +4345,41 @@ INSERT INTO "usage" VALUES('PROJ', 'IGNF_RGF93GDD_TO_EPSG_4326_USAGE','helmert_t INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G','Nouvelle Triangulation Francaise Paris grades to ED50G',NULL,'IGNF','NTFPGRAD','IGNF','ED50G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFPGRAD_TO_ED50G_USAGE','concatenated_operation','IGNF','TSG62_NTFPGRAD_TO_ED50G','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G',1,'IGNF','TSG1240'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G',2,'IGNF','TSG62_NTFG_TO_ED50G'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G',1,'IGNF','TSG1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50G',2,'IGNF','TSG62_NTFG_TO_ED50G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFP_TO_ED50G','Nouvelle Triangulation Francaise Paris grades to ED50G',NULL,'IGNF','NTFP','IGNF','ED50G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFP_TO_ED50G_USAGE','concatenated_operation','IGNF','TSG62_NTFP_TO_ED50G','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50G',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50G',2,'IGNF','TSG62_NTFG_TO_ED50G'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50G',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50G',2,'IGNF','TSG62_NTFG_TO_ED50G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO','Nouvelle Triangulation Francaise Paris grades to ED50GEO',NULL,'IGNF','NTFPGRAD','IGNF','ED50GEO',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFPGRAD_TO_ED50GEO_USAGE','concatenated_operation','IGNF','TSG62_NTFPGRAD_TO_ED50GEO','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO',1,'IGNF','TSG1240'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO',2,'IGNF','TSG62_NTFG_TO_ED50GEO'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO',1,'IGNF','TSG1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFPGRAD_TO_ED50GEO',2,'IGNF','TSG62_NTFG_TO_ED50GEO',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO','Nouvelle Triangulation Francaise Paris grades to ED50GEO',NULL,'IGNF','NTFP','IGNF','ED50GEO',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG62_NTFP_TO_ED50GEO_USAGE','concatenated_operation','IGNF','TSG62_NTFP_TO_ED50GEO','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO',2,'IGNF','TSG62_NTFG_TO_ED50GEO'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG62_NTFP_TO_ED50GEO',2,'IGNF','TSG62_NTFG_TO_ED50GEO',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD','Nouvelle Triangulation Francaise Paris grades to WGS84GDD',NULL,'IGNF','NTFPGRAD','IGNF','WGS84GDD',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFPGRAD_TO_WGS84GDD_USAGE','concatenated_operation','IGNF','TSG399_NTFPGRAD_TO_WGS84GDD','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD',1,'IGNF','TSG1240'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD',2,'IGNF','TSG399_NTFG_TO_WGS84GDD'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD',1,'IGNF','TSG1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84GDD',2,'IGNF','TSG399_NTFG_TO_WGS84GDD',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD','Nouvelle Triangulation Francaise Paris grades to WGS84GDD',NULL,'IGNF','NTFP','IGNF','WGS84GDD',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFP_TO_WGS84GDD_USAGE','concatenated_operation','IGNF','TSG399_NTFP_TO_WGS84GDD','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD',2,'IGNF','TSG399_NTFG_TO_WGS84GDD'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84GDD',2,'IGNF','TSG399_NTFG_TO_WGS84GDD',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G','Nouvelle Triangulation Francaise Paris grades to WGS84G',NULL,'IGNF','NTFPGRAD','IGNF','WGS84G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFPGRAD_TO_WGS84G_USAGE','concatenated_operation','IGNF','TSG399_NTFPGRAD_TO_WGS84G','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G',1,'IGNF','TSG1240'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G',2,'IGNF','TSG399_NTFG_TO_WGS84G'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G',1,'IGNF','TSG1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_WGS84G',2,'IGNF','TSG399_NTFG_TO_WGS84G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFP_TO_WGS84G','Nouvelle Triangulation Francaise Paris grades to WGS84G',NULL,'IGNF','NTFP','IGNF','WGS84G',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFP_TO_WGS84G_USAGE','concatenated_operation','IGNF','TSG399_NTFP_TO_WGS84G','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84G',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84G',2,'IGNF','TSG399_NTFG_TO_WGS84G'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84G',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_WGS84G',2,'IGNF','TSG399_NTFG_TO_WGS84G',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326','Nouvelle Triangulation Francaise Paris grades to 4326',NULL,'IGNF','NTFPGRAD','EPSG','4326',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFPGRAD_TO_4326_USAGE','concatenated_operation','IGNF','TSG399_NTFPGRAD_TO_4326','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326',1,'IGNF','TSG1240'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326',2,'IGNF','TSG399_NTFG_TO_4326'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326',1,'IGNF','TSG1240',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFPGRAD_TO_4326',2,'IGNF','TSG399_NTFG_TO_4326',NULL); INSERT INTO "concatenated_operation" VALUES('IGNF','TSG399_NTFP_TO_4326','Nouvelle Triangulation Francaise Paris grades to 4326',NULL,'IGNF','NTFP','EPSG','4326',NULL,'1.0.0',0); INSERT INTO "usage" VALUES('IGNF', 'TSG399_NTFP_TO_4326_USAGE','concatenated_operation','IGNF','TSG399_NTFP_TO_4326','IGNF','91','IGNF','6'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_4326',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG'); -INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_4326',2,'IGNF','TSG399_NTFG_TO_4326'); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_4326',1,'IGNF','TSG1240_IGNF_NTFP_TO_IGNF_NTFG',NULL); +INSERT INTO "concatenated_operation_step" VALUES('IGNF','TSG399_NTFP_TO_4326',2,'IGNF','TSG399_NTFG_TO_4326',NULL); diff --git a/data/sql/metadata.sql b/data/sql/metadata.sql index 02857d8d73..0804d3e734 100644 --- a/data/sql/metadata.sql +++ b/data/sql/metadata.sql @@ -7,7 +7,7 @@ -- DATABASE_LAYOUT_VERSION_MINOR constants in src/iso19111/factory.cpp must be -- updated as well. INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1); -INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 4); +INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 5); INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v11.025'); INSERT INTO "metadata" VALUES('EPSG.DATE', '2024-12-14'); diff --git a/data/sql/nadcon5_concatenated_operations.sql b/data/sql/nadcon5_concatenated_operations.sql index 11469c3fbd..5e6fce7847 100644 --- a/data/sql/nadcon5_concatenated_operations.sql +++ b/data/sql/nadcon5_concatenated_operations.sql @@ -3,357 +3,357 @@ -- Concatenated accuracy is sqrt(sum of squared accuracies) (confirmed by NGS to be a valid way) INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS','NAD27 to NAD83(HARN) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4152',0.16,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS',1,'EPSG','8555'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS',2,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_HARN_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_HARN_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS','NAD27 to NAD83(FBN) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','8860',0.17,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',1,'EPSG','8555'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',2,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',3,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS',3,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_FBN_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_FBN_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS','NAD27 to NAD83(NSRS2007) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4759',0.17,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8555'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',3,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',4,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',3,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS',4,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_NSRS2007_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS','NAD27 to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','6318',0.18,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',1,'EPSG','8555'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',2,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',3,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',4,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',5,'EPSG','8559'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',1,'EPSG','8555','forward'); -- NAD27 to NAD83 (EPSG:8555), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',2,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',3,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',4,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS',5,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS','NAD83 to NAD83(FBN) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','8860',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS',1,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS',2,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS',1,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS',2,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_FBN_CONUS_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_FBN_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS','NAD83 to NAD83(NSRS2007) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','4759',0.09,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',3,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS',3,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_CONUS_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_NSRS2007_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS','NAD83 to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6318',0.1,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',1,'EPSG','8556'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',2,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',3,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',4,'EPSG','8559'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',1,'EPSG','8556','forward'); -- NAD83 to NAD83(HARN) (EPSG:8556), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',2,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',3,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS',4,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS','NAD83(HARN) to NAD83(NSRS2007) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','4759',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS',1,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS',2,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_NSRS2007_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS','NAD83(HARN) to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6318',0.09,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',1,'EPSG','8861'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',2,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',3,'EPSG','8559'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',1,'EPSG','8861','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8861), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',2,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS',3,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS','NAD83(FBN) to NAD83(2011) (NADCON5, CONUS)','Transformation based on concatenation of NADCON5 transformations','EPSG','8860','EPSG','6318',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS',1,'EPSG','8862'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS',2,'EPSG','8559'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS',1,'EPSG','8862','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8862), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS',2,'EPSG','8559','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8559), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_CONUS_USAGE','concatenated_operation','PROJ','NAD83_FBN_TO_NAD83_2011_CONUS', 'EPSG','4516', -- extent: CONUS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA','NAD27 to NAD83(HARN) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4152',0.52,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA',1,'EPSG','8549'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA',2,'EPSG','8550'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA',1,'EPSG','8549','forward'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA',2,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_HARN_ALASKA_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_HARN_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA','NAD27 to NAD83(NSRS2007) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','4759',0.52,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',1,'EPSG','8549'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',2,'EPSG','8550'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',3,'EPSG','8551'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',1,'EPSG','8549','forward'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',2,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA',3,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_NSRS2007_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA','NAD27 to NAD83(2011) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4267','EPSG','6318',0.53,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',1,'EPSG','8549'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',2,'EPSG','8550'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',3,'EPSG','8551'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',4,'EPSG','8552'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',1,'EPSG','8549','forward'); -- NAD27 to NAD83 (EPSG:8549), 0.5 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',2,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',3,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA',4,'EPSG','8552','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m INSERT INTO usage VALUES('PROJ','NAD27_TO_NAD83_2011_ALASKA_USAGE','concatenated_operation','PROJ','NAD27_TO_NAD83_2011_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA','NAD83 to NAD83(NSRS2007) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','4759',0.16,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA',1,'EPSG','8550'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA',2,'EPSG','8551'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA',1,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA',2,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_NSRS2007_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA','NAD83 to NAD83(2011) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6318',0.17,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',1,'EPSG','8550'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',2,'EPSG','8551'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',3,'EPSG','8552'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',1,'EPSG','8550','forward'); -- NAD83 to NAD83(HARN) (EPSG:8550), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',2,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA',3,'EPSG','8552','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_2011_ALASKA_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_2011_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA','NAD83(HARN) to NAD83(2011) (NADCON5, Alaska)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6318',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA',1,'EPSG','8551'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA',2,'EPSG','8552'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA',1,'EPSG','8551','forward'); -- NAD83(HARN) to NAD83(NSRS2007) (EPSG:8551), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA',2,'EPSG','8552','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8552), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_2011_ALASKA', 'EPSG','1330', -- extent: Alaska 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII','Old Hawaiian to NAD83(HARN) (NADCON5, Hawaii)','Transformation based on concatenation of NADCON5 transformations','EPSG','4135','EPSG','4152',0.21,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII',1,'EPSG','8561'); -- Old Hawaiian to NAD83 (EPSG:8561), 0.2 m -INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII',2,'EPSG','8660'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII',1,'EPSG','8561','forward'); -- Old Hawaiian to NAD83 (EPSG:8561), 0.2 m +INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII',2,'EPSG','8660','forward'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m INSERT INTO usage VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII_USAGE','concatenated_operation','PROJ','OLD_HAWAIIAN_TO_NAD83_HARN_HAWAII', 'EPSG','1334', -- extent: Hawaii 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII','Old Hawaiian to NAD83(PA11) (NADCON5, Hawaii)','Transformation based on concatenation of NADCON5 transformations','EPSG','4135','EPSG','6322',0.21,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',1,'EPSG','8561'); -- Old Hawaiian to NAD83 (EPSG:8561), 0.2 m -INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',2,'EPSG','8660'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',3,'EPSG','8661'); -- NAD83(HARN) to NAD83(PA11) (EPSG:8661), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',1,'EPSG','8561','forward'); -- Old Hawaiian to NAD83 (EPSG:8561), 0.2 m +INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',2,'EPSG','8660','forward'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII',3,'EPSG','8661','forward'); -- NAD83(HARN) to NAD83(PA11) (EPSG:8661), 0.05 m INSERT INTO usage VALUES('PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII_USAGE','concatenated_operation','PROJ','OLD_HAWAIIAN_TO_NAD83_PA11_HAWAII', 'EPSG','1334', -- extent: Hawaii 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII','NAD83 to NAD83(PA11) (NADCON5, Hawaii)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6322',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII',1,'EPSG','8660'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII',2,'EPSG','8661'); -- NAD83(HARN) to NAD83(PA11) (EPSG:8661), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII',1,'EPSG','8660','forward'); -- NAD83 to NAD83(HARN) (EPSG:8660), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII',2,'EPSG','8661','forward'); -- NAD83(HARN) to NAD83(PA11) (EPSG:8661), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_PA11_HAWAII_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_PA11_HAWAII', 'EPSG','1334', -- extent: Hawaii 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI','Puerto Rico to NAD83(HARN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','4152',0.21,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI',1,'EPSG','8668'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI',2,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_HARN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI','Puerto Rico to NAD83(HARN Corrected) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','8545',0.22,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',1,'EPSG','8668'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',2,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',3,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_HARN_CORRECTED_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI','Puerto Rico to NAD83(FBN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','8860',0.22,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',1,'EPSG','8668'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',2,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',3,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',4,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI',4,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_FBN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI','Puerto Rico to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','4759',0.23,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8668'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',3,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',4,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',5,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',4,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI',5,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI','Puerto Rico to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4139','EPSG','6318',0.23,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',1,'EPSG','8668'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',2,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',3,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',4,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',5,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',6,'EPSG','8673'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',1,'EPSG','8668','forward'); -- Puerto Rico to NAD83 (EPSG:8668), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',2,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',3,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',4,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',5,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI',6,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','PUERTO_RICO_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI','NAD83 to NAD83(HARN Corrected) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','8545',0.16,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI',1,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI',2,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_HARN_CORRECTED_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI','NAD83 to NAD83(FBN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','8860',0.17,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',1,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',2,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',3,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI',3,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_FBN_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_FBN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI','NAD83 to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','4759',0.17,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',2,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',3,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',4,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',3,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI',4,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI','NAD83 to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4269','EPSG','6318',0.18,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',1,'EPSG','8669'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',2,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',3,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',4,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',5,'EPSG','8673'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',1,'EPSG','8669','forward'); -- NAD83 to NAD83(HARN) (EPSG:8669), 0.15 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',2,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',3,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',4,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI',5,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI','NAD83(HARN) to NAD83(FBN) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','8860',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI',1,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI',2,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI',1,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI',2,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_FBN_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI','NAD83(HARN) to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','4759',0.09,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',1,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',3,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',1,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI',3,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI','NAD83(HARN) to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6318',0.1,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',1,'EPSG','9181'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',2,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',3,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',4,'EPSG','8673'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',1,'EPSG','9181','forward'); -- NAD83(HARN) to NAD83(HARN Corrected) (EPSG:9181), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',2,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',3,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI',4,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI','NAD83(HARN Corrected) to NAD83(NSRS2007) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','8545','EPSG','4759',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI',1,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI',2,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_CORRECTED_TO_NAD83_NSRS2007_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI','NAD83(HARN Corrected) to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','8545','EPSG','6318',0.09,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',1,'EPSG','8867'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',2,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',3,'EPSG','8673'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',1,'EPSG','8867','forward'); -- NAD83(HARN Corrected) to NAD83(FBN) (EPSG:8867), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',2,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI',3,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_HARN_CORRECTED_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI','NAD83(FBN) to NAD83(2011) (NADCON5, PRVI)','Transformation based on concatenation of NADCON5 transformations','EPSG','8860','EPSG','6318',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI',1,'EPSG','8868'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI',2,'EPSG','8673'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI',1,'EPSG','8868','forward'); -- NAD83(FBN) to NAD83(NSRS2007) (EPSG:8868), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI',2,'EPSG','8673','forward'); -- NAD83(NSRS2007) to NAD83(2011) (EPSG:8673), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_FBN_TO_NAD83_2011_PRVI_USAGE','concatenated_operation','PROJ','NAD83_FBN_TO_NAD83_2011_PRVI', 'EPSG','3634', -- extent: PRVI 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS','American Samoa 1962 to NAD83(FBN) (NADCON5, AS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4169','EPSG','8860',5.0,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS',1,'EPSG','8662'); -- American Samoa 1962 to NAD83(HARN) (EPSG:8662), 5.0 m -INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS',2,'EPSG','8863'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS',1,'EPSG','8662','forward'); -- American Samoa 1962 to NAD83(HARN) (EPSG:8662), 5.0 m +INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS',2,'EPSG','8863','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m INSERT INTO usage VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS_USAGE','concatenated_operation','PROJ','AMERICAN_SAMOA_1962_TO_NAD83_FBN_AS', 'EPSG','3110', -- extent: AS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS','American Samoa 1962 to NAD83(PA11) (NADCON5, AS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4169','EPSG','6322',5.0,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',1,'EPSG','8662'); -- American Samoa 1962 to NAD83(HARN) (EPSG:8662), 5.0 m -INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',2,'EPSG','8863'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',3,'EPSG','8864'); -- NAD83(FBN) to NAD83(PA11) (EPSG:8864), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',1,'EPSG','8662','forward'); -- American Samoa 1962 to NAD83(HARN) (EPSG:8662), 5.0 m +INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',2,'EPSG','8863','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS',3,'EPSG','8864','forward'); -- NAD83(FBN) to NAD83(PA11) (EPSG:8864), 0.05 m INSERT INTO usage VALUES('PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS_USAGE','concatenated_operation','PROJ','AMERICAN_SAMOA_1962_TO_NAD83_PA11_AS', 'EPSG','3110', -- extent: AS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS','NAD83(HARN) to NAD83(PA11) (NADCON5, AS)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6322',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS',1,'EPSG','8863'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS',2,'EPSG','8864'); -- NAD83(FBN) to NAD83(PA11) (EPSG:8864), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS',1,'EPSG','8863','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8863), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS',2,'EPSG','8864','forward'); -- NAD83(FBN) to NAD83(PA11) (EPSG:8864), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_PA11_AS_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_PA11_AS', 'EPSG','3110', -- extent: AS 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM','Guam 1963 to NAD83(FBN) (NADCON5, GUAM)','Transformation based on concatenation of NADCON5 transformations','EPSG','4675','EPSG','8860',5.0,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM',1,'EPSG','8665'); -- Guam 1963 to NAD83(HARN) (EPSG:8665), 5.0 m -INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM',2,'EPSG','8865'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM',1,'EPSG','8665','forward'); -- Guam 1963 to NAD83(HARN) (EPSG:8665), 5.0 m +INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM',2,'EPSG','8865','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m INSERT INTO usage VALUES('PROJ','GUAM_1963_TO_NAD83_FBN_GUAM_USAGE','concatenated_operation','PROJ','GUAM_1963_TO_NAD83_FBN_GUAM', 'EPSG','4525', -- extent: GUAM 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM','Guam 1963 to NAD83(MA11) (NADCON5, GUAM)','Transformation based on concatenation of NADCON5 transformations','EPSG','4675','EPSG','6325',5.0,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',1,'EPSG','8665'); -- Guam 1963 to NAD83(HARN) (EPSG:8665), 5.0 m -INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',2,'EPSG','8865'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',3,'EPSG','8866'); -- NAD83(FBN) to NAD83(MA11) (EPSG:8866), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',1,'EPSG','8665','forward'); -- Guam 1963 to NAD83(HARN) (EPSG:8665), 5.0 m +INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',2,'EPSG','8865','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM',3,'EPSG','8866','forward'); -- NAD83(FBN) to NAD83(MA11) (EPSG:8866), 0.05 m INSERT INTO usage VALUES('PROJ','GUAM_1963_TO_NAD83_MA11_GUAM_USAGE','concatenated_operation','PROJ','GUAM_1963_TO_NAD83_MA11_GUAM', 'EPSG','4525', -- extent: GUAM 'EPSG','1027' -- scope: Geodesy ); INSERT INTO concatenated_operation VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM','NAD83(HARN) to NAD83(MA11) (NADCON5, GUAM)','Transformation based on concatenation of NADCON5 transformations','EPSG','4152','EPSG','6325',0.07,NULL,0); -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM',1,'EPSG','8865'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m -INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM',2,'EPSG','8866'); -- NAD83(FBN) to NAD83(MA11) (EPSG:8866), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM',1,'EPSG','8865','forward'); -- NAD83(HARN) to NAD83(FBN) (EPSG:8865), 0.05 m +INSERT INTO concatenated_operation_step VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM',2,'EPSG','8866','forward'); -- NAD83(FBN) to NAD83(MA11) (EPSG:8866), 0.05 m INSERT INTO usage VALUES('PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM_USAGE','concatenated_operation','PROJ','NAD83_HARN_TO_NAD83_MA11_GUAM', 'EPSG','4525', -- extent: GUAM 'EPSG','1027' -- scope: Geodesy diff --git a/data/sql/other_transformation_custom.sql b/data/sql/other_transformation_custom.sql index b52ec92f89..17a06cf9eb 100644 --- a/data/sql/other_transformation_custom.sql +++ b/data/sql/other_transformation_custom.sql @@ -19,9 +19,9 @@ INSERT INTO "usage" VALUES('PROJ','NGO48_TO_ETRS89NO_USAGE','other_transformatio -- Finland triangulated files INSERT INTO "concatenated_operation" VALUES('PROJ','KKJ_TO_ETRS89','KKJ to ETRS89 (using EPSG:10703)','Transformation based on a triangulated irregular network','EPSG','4123','EPSG','4258',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',1,'EPSG','18193'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',2,'EPSG','10703'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',3,'EPSG','16065'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',1,'EPSG','18193','forward'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',2,'EPSG','10703','forward'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_ETRS89',3,'EPSG','16065','inverse'); INSERT INTO "usage" VALUES( 'PROJ', 'KKJ_TO_ETRS89_USAGE', @@ -33,9 +33,9 @@ INSERT INTO "usage" VALUES( ); INSERT INTO "concatenated_operation" VALUES('PROJ','KKJ_TO_EUREF_FIN','KKJ to EUREF-FIN (using EPSG:10703)','Transformation based on a triangulated irregular network','EPSG','4123','EPSG','10690',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',1,'EPSG','18193'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',2,'EPSG','10703'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',3,'EPSG','16065'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',1,'EPSG','18193','forward'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',2,'EPSG','10703','forward'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','KKJ_TO_EUREF_FIN',3,'EPSG','16065','inverse'); INSERT INTO "usage" VALUES( 'PROJ', 'KKJ_TO_EUREF_FIN_USAGE', diff --git a/data/sql/proj_db_table_defs.sql b/data/sql/proj_db_table_defs.sql index 45393cacf9..0fd0d0bbae 100644 --- a/data/sql/proj_db_table_defs.sql +++ b/data/sql/proj_db_table_defs.sql @@ -1002,6 +1002,7 @@ CREATE TABLE concatenated_operation_step( step_number INTEGER NOT NULL CHECK (step_number >= 1), step_auth_name TEXT NOT NULL CHECK (length(step_auth_name) >= 1), step_code INTEGER_OR_TEXT NOT NULL CHECK (length(step_code) >= 1), + step_direction TEXT DEFAULT NULL CHECK (step_direction IS NULL OR step_direction IN ('forward', 'inverse')), -- much needed extension to OGC Topic 2 ! If setting the direction on one step, it must be set on all steps. CONSTRAINT pk_concatenated_operation_step PRIMARY KEY (operation_auth_name, operation_code, step_number) --CONSTRAINT fk_concatenated_operation_step_to_operation FOREIGN KEY (step_auth_name, step_code) REFERENCES coordinate_operation(auth_name, code) ON DELETE CASCADE diff --git a/data/sql/transformations_czechia_extra.sql b/data/sql/transformations_czechia_extra.sql index 5f8ab49f11..76610c2d62 100644 --- a/data/sql/transformations_czechia_extra.sql +++ b/data/sql/transformations_czechia_extra.sql @@ -61,9 +61,9 @@ UPDATE other_transformation SET accuracy = 0.1 WHERE name = 'S-JTSK to S-JTSK/05 INSERT INTO "concatenated_operation" VALUES( 'PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG','S-JTSK (EPSG:4156) to S-JTSK/05 (EPSG:5228)', 'Transformation based on grid table_yx_3_v1710.dat','EPSG','4156','EPSG','5228',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',1,'EPSG','5510'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',2,'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',3,'EPSG','5512'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',1,'EPSG','5510','inverse'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',2,'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N','forward'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG',3,'EPSG','5512','forward'); INSERT INTO "usage" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG_USAGE','concatenated_operation','PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG','EPSG','1079','EPSG','1189'); @@ -75,9 +75,9 @@ INSERT INTO "usage" VALUES('PROJ','S_JTSK_GEOG_TO_S_JTSK05_GEOG_USAGE','concaten INSERT INTO "concatenated_operation" VALUES( 'PROJ','ETRS89_TO_S_JTSK_E_N','ETRS89 to S-JTSK / Krovak East North (EPSG:5514)', 'Transformation based on grid table_yx_3_v1710.dat','EPSG','4258','EPSG','5514',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',1,'EPSG','5226'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',2,'EPSG','5512'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',3,'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N'); -- in reverse direction +INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',1,'EPSG','5226','inverse'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',2,'EPSG','5512','forward'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N',3,'PROJ','S_JTSK_E_N_TO_S_JTSK05_E_N','inverse'); INSERT INTO "usage" VALUES('PROJ','ETRS89_TO_S_JTSK_E_N_USAGE','concatenated_operation','PROJ','ETRS89_TO_S_JTSK_E_N','EPSG','1079','EPSG','1189'); diff --git a/include/proj/coordinateoperation.hpp b/include/proj/coordinateoperation.hpp index d51690ba72..af6802fca4 100644 --- a/include/proj/coordinateoperation.hpp +++ b/include/proj/coordinateoperation.hpp @@ -241,6 +241,10 @@ class PROJ_GCC_DLL CoordinateOperation : public common::ObjectUsage, const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn); PROJ_INTERNAL void + setCRSsUpdateInverse(const crs::CRSNNPtr &sourceCRSIn, + const crs::CRSNNPtr &targetCRSIn, + const crs::CRSPtr &interpolationCRSIn); + PROJ_INTERNAL void setInterpolationCRS(const crs::CRSPtr &interpolationCRSIn); PROJ_INTERNAL void setCRSs(const CoordinateOperation *in, bool inverseSourceTarget); @@ -1755,6 +1759,7 @@ class PROJ_GCC_DLL Transformation : public SingleOperation { PROJ_INTERNAL void _exportToPROJString(io::PROJStringFormatter *formatter) const override; // throw(FormattingException) + PROJ_FRIEND(CoordinateOperation); PROJ_FRIEND(CoordinateOperationFactory); PROJ_FRIEND(SingleOperation); PROJ_INTERNAL TransformationNNPtr inverseAsTransformation() const; @@ -1904,10 +1909,10 @@ class PROJ_GCC_DLL ConcatenatedOperation final : public CoordinateOperation { const override; // throw(FormattingException) PROJ_INTERNAL static void - fixStepsDirection(const crs::CRSNNPtr &concatOpSourceCRS, - const crs::CRSNNPtr &concatOpTargetCRS, - std::vector &operationsInOut, - const io::DatabaseContextPtr &dbContext); + fixSteps(const crs::CRSNNPtr &concatOpSourceCRS, + const crs::CRSNNPtr &concatOpTargetCRS, + std::vector &operationsInOut, + const io::DatabaseContextPtr &dbContext, bool fixDirectionAllowed); //! @endcond protected: @@ -1926,6 +1931,11 @@ class PROJ_GCC_DLL ConcatenatedOperation final : public CoordinateOperation { PROJ_OPAQUE_PRIVATE_DATA ConcatenatedOperation & operator=(const ConcatenatedOperation &other) = delete; + + PROJ_INTERNAL + static void setCRSsUpdateInverse(CoordinateOperation *co, + const crs::CRSNNPtr &sourceCRS, + const crs::CRSNNPtr &targetCRS); }; // --------------------------------------------------------------------------- diff --git a/scripts/build_db.py b/scripts/build_db.py index e099cbbcab..92b8e3e7bf 100755 --- a/scripts/build_db.py +++ b/scripts/build_db.py @@ -970,7 +970,7 @@ def fill_concatenated_operation(proj_db_cursor): '?,?,?, ?, ?,?, ?,?, ?, ?,?)', arg) for i in range(len(steps_code)): - proj_db_cursor.execute('INSERT INTO concatenated_operation_step VALUES (?,?,?,?,?)', (EPSG_AUTHORITY, code, i+1, EPSG_AUTHORITY,steps_code[i])) + proj_db_cursor.execute('INSERT INTO concatenated_operation_step VALUES (?,?,?,?,?,NULL)', (EPSG_AUTHORITY, code, i+1, EPSG_AUTHORITY,steps_code[i])) def fill_alias(proj_db_cursor): diff --git a/scripts/build_db_create_ignf_from_xml.py b/scripts/build_db_create_ignf_from_xml.py index 0e113a1f33..82877ffbcc 100755 --- a/scripts/build_db_create_ignf_from_xml.py +++ b/scripts/build_db_create_ignf_from_xml.py @@ -753,10 +753,10 @@ def get_alias_of(code): sql = """INSERT INTO "usage" VALUES('IGNF', '%s_USAGE','concatenated_operation','IGNF','%s','%s','%s','%s','%s');""" % (id_concat, id_concat, extent_auth_and_code[0], extent_auth_and_code[1], scope_auth_and_code[0], scope_auth_and_code[1]) all_sql_concat.append(sql) - sql = """INSERT INTO "concatenated_operation_step" VALUES('IGNF','%s',1,'IGNF','%s');""" % (id_concat, idFirstOp) + sql = """INSERT INTO "concatenated_operation_step" VALUES('IGNF','%s',1,'IGNF','%s',NULL);""" % (id_concat, idFirstOp) all_sql_concat.append(sql) - sql = """INSERT INTO "concatenated_operation_step" VALUES('IGNF','%s',2,'IGNF','%s');""" % (id_concat, id_geog) + sql = """INSERT INTO "concatenated_operation_step" VALUES('IGNF','%s',2,'IGNF','%s',NULL);""" % (id_concat, id_geog) all_sql_concat.append(sql) diff --git a/scripts/build_nadcon5_concatenated_operations.py b/scripts/build_nadcon5_concatenated_operations.py index fbc2ae433f..9872149f90 100755 --- a/scripts/build_nadcon5_concatenated_operations.py +++ b/scripts/build_nadcon5_concatenated_operations.py @@ -67,7 +67,7 @@ def gen_transformations(sql, transformations, crs_dict, short_area_of_use, exten target_crs_name = transformations[k][1] step_code = transformations[k][2] acc = transformations[k][3] - sql += f"INSERT INTO concatenated_operation_step VALUES('PROJ','{transfm_code}',{step},'EPSG','{step_code}'); -- {source_crs_name} to {target_crs_name} (EPSG:{step_code}), {acc} m\n" + sql += f"INSERT INTO concatenated_operation_step VALUES('PROJ','{transfm_code}',{step},'EPSG','{step_code}','forward'); -- {source_crs_name} to {target_crs_name} (EPSG:{step_code}), {acc} m\n" sql += f"INSERT INTO usage VALUES('PROJ','{transfm_code}_USAGE','concatenated_operation','PROJ','{transfm_code}',\n" sql += f" 'EPSG','{extent_code}', -- extent: {short_area_of_use}\n" diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index 50e93aa55a..9ba2a08ac6 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -130,7 +130,7 @@ constexpr const char *CS_TYPE_ORDINAL = cs::OrdinalCS::WKT2_TYPE; constexpr int DATABASE_LAYOUT_VERSION_MAJOR = 1; // If the code depends on the new additions, then DATABASE_LAYOUT_VERSION_MINOR // must be incremented. -constexpr int DATABASE_LAYOUT_VERSION_MINOR = 4; +constexpr int DATABASE_LAYOUT_VERSION_MINOR = 5; constexpr size_t N_MAX_PARAMS = 7; @@ -6600,7 +6600,7 @@ operation::CoordinateOperationNNPtr AuthorityFactory::createCoordinateOperation( } auto resSteps = d->runWithCodeParam( - "SELECT step_auth_name, step_code FROM " + "SELECT step_auth_name, step_code, step_direction FROM " "concatenated_operation_step WHERE operation_auth_name = ? " "AND operation_code = ? ORDER BY step_number", code); @@ -6620,22 +6620,41 @@ operation::CoordinateOperationNNPtr AuthorityFactory::createCoordinateOperation( const bool deprecated = deprecated_str == "1"; std::vector operations; + size_t countExplicitDirection = 0; for (const auto &rowStep : resSteps) { const auto &step_auth_name = rowStep[0]; const auto &step_code = rowStep[1]; - operations.push_back( + const auto &step_direction = rowStep[2]; + auto stepOp = d->createFactory(step_auth_name) ->createCoordinateOperation(step_code, false, usePROJAlternativeGridNames, - std::string())); + std::string()); + if (step_direction == "forward") { + ++countExplicitDirection; + operations.push_back(stepOp); + } else if (step_direction == "inverse") { + ++countExplicitDirection; + operations.push_back(stepOp->inverse()); + } else { + operations.push_back(stepOp); + } + } + + if (countExplicitDirection > 0 && + countExplicitDirection != resSteps.size()) { + throw FactoryException("not all steps have a defined direction " + "for concatenated operation " + + code); } - operation::ConcatenatedOperation::fixStepsDirection( + const bool fixDirectionAllowed = (countExplicitDirection == 0); + operation::ConcatenatedOperation::fixSteps( d->createFactory(source_crs_auth_name) ->createCoordinateReferenceSystem(source_crs_code), d->createFactory(target_crs_auth_name) ->createCoordinateReferenceSystem(target_crs_code), - operations, d->context()); + operations, d->context(), fixDirectionAllowed); auto props = d->createPropertiesSearchUsages( type, code, name, deprecated, description); diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index c83ff3a344..3695408442 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -3772,8 +3772,9 @@ WKTParser::Private::buildConcatenatedOperation(const WKTNodeNNPtr &node) { } } - ConcatenatedOperation::fixStepsDirection( - NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), operations, dbContext_); + ConcatenatedOperation::fixSteps( + NN_NO_CHECK(sourceCRS), NN_NO_CHECK(targetCRS), operations, dbContext_, + /* fixDirectionAllowed = */ true); std::vector accuracies; auto &accuracyNode = nodeP->lookForChild(WKTConstants::OPERATIONACCURACY); @@ -6848,8 +6849,9 @@ JSONParser::buildConcatenatedOperation(const json &j) { operations.emplace_back(NN_NO_CHECK(op)); } - ConcatenatedOperation::fixStepsDirection(sourceCRS, targetCRS, operations, - dbContext_); + ConcatenatedOperation::fixSteps(sourceCRS, targetCRS, operations, + dbContext_, + /* fixDirectionAllowed = */ true); std::vector accuracies; if (j.contains("accuracy")) { diff --git a/src/iso19111/operation/concatenatedoperation.cpp b/src/iso19111/operation/concatenatedoperation.cpp index 0c0a309e10..c003a0456c 100644 --- a/src/iso19111/operation/concatenatedoperation.cpp +++ b/src/iso19111/operation/concatenatedoperation.cpp @@ -269,11 +269,21 @@ ConcatenatedOperationNNPtr ConcatenatedOperation::create( // --------------------------------------------------------------------------- -void ConcatenatedOperation::fixStepsDirection( +/* static */ void +ConcatenatedOperation::setCRSsUpdateInverse(CoordinateOperation *co, + const crs::CRSNNPtr &sourceCRS, + const crs::CRSNNPtr &targetCRS) { + + co->setCRSsUpdateInverse(sourceCRS, targetCRS, co->interpolationCRS()); +} + +// --------------------------------------------------------------------------- + +void ConcatenatedOperation::fixSteps( const crs::CRSNNPtr &concatOpSourceCRS, const crs::CRSNNPtr &concatOpTargetCRS, std::vector &operationsInOut, - const io::DatabaseContextPtr & /*dbContext*/) { + const io::DatabaseContextPtr & /*dbContext*/, bool fixDirectionAllowed) { // Set of heuristics to assign CRS to steps, and possibly reverse them. @@ -297,7 +307,7 @@ void ConcatenatedOperation::fixStepsDirection( isAxisOrderReversal(conv->method()->getEPSGCode())) { auto reversedCRS = concatOpSourceCRS->applyAxisOrderReversal( NORMALIZED_AXIS_ORDER_SUFFIX_STR); - op->setCRSs(concatOpSourceCRS, reversedCRS, nullptr); + setCRSsUpdateInverse(op.get(), concatOpSourceCRS, reversedCRS); } } @@ -312,13 +322,13 @@ void ConcatenatedOperation::fixStepsDirection( isAxisOrderReversal(conv->method()->getEPSGCode())) { auto reversedCRS = concatOpTargetCRS->applyAxisOrderReversal( NORMALIZED_AXIS_ORDER_SUFFIX_STR); - op->setCRSs(reversedCRS, concatOpTargetCRS, nullptr); + setCRSsUpdateInverse(op.get(), reversedCRS, concatOpTargetCRS); } } // If the first operation is a transformation whose target CRS matches the // source CRS of the concatenated operation, then reverse it. - if (operationsInOut.size() >= 2) { + if (fixDirectionAllowed && operationsInOut.size() >= 2) { auto &op = operationsInOut.front(); auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); @@ -333,7 +343,7 @@ void ConcatenatedOperation::fixStepsDirection( // If the last operation is a transformation whose source CRS matches the // target CRS of the concatenated operation, then reverse it. - if (operationsInOut.size() >= 2) { + if (fixDirectionAllowed && operationsInOut.size() >= 2) { auto &op = operationsInOut.back(); auto l_sourceCRS = op->sourceCRS(); auto l_targetCRS = op->targetCRS(); @@ -390,10 +400,9 @@ void ConcatenatedOperation::fixStepsDirection( util::nn_dynamic_pointer_cast(op); auto nn_targetCRS = NN_NO_CHECK(l_targetCRS); if (invConv) { - invConv->inverse()->setCRSs(nn_targetCRS, concatOpSourceCRS, - nullptr); - op->setCRSs(concatOpSourceCRS, nn_targetCRS, nullptr); - } else { + setCRSsUpdateInverse(op.get(), concatOpSourceCRS, + nn_targetCRS); + } else if (fixDirectionAllowed) { op->setCRSs(nn_targetCRS, concatOpSourceCRS, nullptr); op = op->inverse(); } @@ -401,8 +410,8 @@ void ConcatenatedOperation::fixStepsDirection( /* coverity[copy_paste_error] */ l_targetCRS = operationsInOut[i + 1]->sourceCRS(); if (l_targetCRS) { - op->setCRSs(concatOpSourceCRS, NN_NO_CHECK(l_targetCRS), - nullptr); + setCRSsUpdateInverse(op.get(), concatOpSourceCRS, + NN_NO_CHECK(l_targetCRS)); } } } else if (conv && i + 1 == operationsInOut.size() && !l_sourceCRS && @@ -430,22 +439,20 @@ void ConcatenatedOperation::fixStepsDirection( if (!l_sourceCRS) { l_sourceCRS = derivedCRS->baseCRS().as_nullable(); } - op->setCRSs(NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS, - nullptr); + setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), + concatOpTargetCRS); } else if (i >= 1) { l_sourceCRS = operationsInOut[i - 1]->targetCRS(); if (l_sourceCRS) { derivedCRS = extractDerivedCRS(l_sourceCRS.get()); - if (derivedCRS && + if (fixDirectionAllowed && derivedCRS && conv->isEquivalentTo( derivedCRS->derivingConversion().get(), util::IComparable::Criterion::EQUIVALENT)) { - op->setCRSs(concatOpTargetCRS, NN_NO_CHECK(l_sourceCRS), - nullptr); op = op->inverse(); } - op->setCRSs(NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS, - nullptr); + setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), + concatOpTargetCRS); } } } else if (conv && i > 0 && i < operationsInOut.size() - 1) { @@ -458,16 +465,17 @@ void ConcatenatedOperation::fixStepsDirection( // If the sourceCRS is a projectedCRS and the target a // geographic one, then we must inverse the operation. See // https://github.com/OSGeo/PROJ/issues/2817 - if (dynamic_cast( + if (fixDirectionAllowed && + dynamic_cast( l_sourceCRS.get()) && dynamic_cast( l_targetCRS.get())) { - op->setCRSs(NN_NO_CHECK(l_targetCRS), - NN_NO_CHECK(l_sourceCRS), nullptr); op = op->inverse(); + setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), + NN_NO_CHECK(l_targetCRS)); } else { - op->setCRSs(NN_NO_CHECK(l_sourceCRS), - NN_NO_CHECK(l_targetCRS), nullptr); + setCRSsUpdateInverse(op.get(), NN_NO_CHECK(l_sourceCRS), + NN_NO_CHECK(l_targetCRS)); // Deal with special case of // https://github.com/OSGeo/PROJ/issues/4116 where EPSG:7989 @@ -477,7 +485,7 @@ void ConcatenatedOperation::fixStepsDirection( const auto nPosTo = conv->nameStr().find(" to "); const auto nPosToNextOp = operationsInOut[i + 1]->nameStr().find(" to "); - if (nPosTo != std::string::npos && + if (fixDirectionAllowed && nPosTo != std::string::npos && nPosToNextOp != std::string::npos) { const std::string convTo = conv->nameStr().substr(nPosTo + strlen(" to ")); @@ -493,11 +501,10 @@ void ConcatenatedOperation::fixStepsDirection( operationsInOut[i + 1] = operationsInOut[i + 1]->inverse(); - op->setCRSs( - NN_NO_CHECK(l_sourceCRS), + setCRSsUpdateInverse( + op.get(), NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK( - operationsInOut[i + 1]->sourceCRS()), - nullptr); + operationsInOut[i + 1]->sourceCRS())); } } } @@ -510,8 +517,8 @@ void ConcatenatedOperation::fixStepsDirection( if (vertCRS && ends_with(l_sourceCRS->nameStr(), " height") && &vertCRS->coordinateSystem()->axisList()[0]->direction() == &cs::AxisDirection::UP) { - op->setCRSs( - NN_NO_CHECK(l_sourceCRS), + setCRSsUpdateInverse( + op.get(), NN_NO_CHECK(l_sourceCRS), crs::VerticalCRS::create( util::PropertyMap().set( common::IdentifiedObject::NAME_KEY, @@ -529,8 +536,7 @@ void ConcatenatedOperation::fixStepsDirection( "D", cs::AxisDirection::DOWN, vertCRS->coordinateSystem() ->axisList()[0] - ->unit()))), - nullptr); + ->unit())))); } } } else if (!conv && l_sourceCRS && l_targetCRS) { @@ -547,7 +553,8 @@ void ConcatenatedOperation::fixStepsDirection( if (areCRSMoreOrLessEquivalent(l_sourceCRS.get(), prevOpTarget.get())) { // do nothing - } else if (areCRSMoreOrLessEquivalent(l_targetCRS.get(), + } else if (fixDirectionAllowed && + areCRSMoreOrLessEquivalent(l_targetCRS.get(), prevOpTarget.get())) { op = op->inverse(); } @@ -607,8 +614,8 @@ void ConcatenatedOperation::fixStepsDirection( transf->parameterValue( PROJ_WKT2_PARAMETER_LATITUDE_LONGITUDE_ELLIPOISDAL_HEIGHT_DIFFERENCE_FILE, 0))) { - op->setCRSs(NN_NO_CHECK(prevOpTarget), concatOpTargetCRS, - nullptr); + setCRSsUpdateInverse(op.get(), NN_NO_CHECK(prevOpTarget), + concatOpTargetCRS); } } } diff --git a/src/iso19111/operation/coordinateoperationfactory.cpp b/src/iso19111/operation/coordinateoperationfactory.cpp index b4f021fd5a..869470fb51 100644 --- a/src/iso19111/operation/coordinateoperationfactory.cpp +++ b/src/iso19111/operation/coordinateoperationfactory.cpp @@ -3023,34 +3023,8 @@ static bool hasIdentifiers(const CoordinateOperationNNPtr &op) { void CoordinateOperationFactory::Private::setCRSs( CoordinateOperation *co, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { - const auto &interpolationCRS = co->interpolationCRS(); - co->setCRSs(sourceCRS, targetCRS, interpolationCRS); - auto invCO = dynamic_cast(co); - if (invCO) { - invCO->forwardOperation()->setCRSs(targetCRS, sourceCRS, - interpolationCRS); - } - - auto transf = dynamic_cast(co); - if (transf) { - transf->inverseAsTransformation()->setCRSs(targetCRS, sourceCRS, - interpolationCRS); - } - - auto concat = dynamic_cast(co); - if (concat) { - auto first = concat->operations().front().get(); - auto &firstTarget(first->targetCRS()); - if (firstTarget) { - setCRSs(first, sourceCRS, NN_NO_CHECK(firstTarget)); - } - auto last = concat->operations().back().get(); - auto &lastSource(last->sourceCRS()); - if (lastSource) { - setCRSs(last, NN_NO_CHECK(lastSource), targetCRS); - } - } + co->setCRSsUpdateInverse(sourceCRS, targetCRS, co->interpolationCRS()); } // --------------------------------------------------------------------------- diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp index 60c280dcb4..22400f6fb0 100644 --- a/src/iso19111/operation/singleoperation.cpp +++ b/src/iso19111/operation/singleoperation.cpp @@ -236,6 +236,42 @@ void CoordinateOperation::setCRSs(const crs::CRSNNPtr &sourceCRSIn, // --------------------------------------------------------------------------- +void CoordinateOperation::setCRSsUpdateInverse( + const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, + const crs::CRSPtr &interpolationCRSIn) { + setCRSs(sourceCRSIn, targetCRSIn, interpolationCRSIn); + + auto invCO = dynamic_cast(this); + if (invCO) { + invCO->forwardOperation()->setCRSs(targetCRSIn, sourceCRSIn, + interpolationCRSIn); + } + + auto transf = dynamic_cast(this); + if (transf) { + transf->inverseAsTransformation()->setCRSs(targetCRSIn, sourceCRSIn, + interpolationCRSIn); + } + + auto concat = dynamic_cast(this); + if (concat) { + auto first = concat->operations().front().get(); + auto &firstTarget(first->targetCRS()); + if (firstTarget) { + first->setCRSsUpdateInverse(sourceCRSIn, NN_NO_CHECK(firstTarget), + first->interpolationCRS()); + } + auto last = concat->operations().back().get(); + auto &lastSource(last->sourceCRS()); + if (lastSource) { + last->setCRSsUpdateInverse(NN_NO_CHECK(lastSource), targetCRSIn, + last->interpolationCRS()); + } + } +} + +// --------------------------------------------------------------------------- + void CoordinateOperation::setInterpolationCRS( const crs::CRSPtr &interpolationCRSIn) { d->interpolationCRS_ = interpolationCRSIn; diff --git a/test/cli/test_projinfo.yaml b/test/cli/test_projinfo.yaml index fed3c34110..f9f4fadc76 100644 --- a/test/cli/test_projinfo.yaml +++ b/test/cli/test_projinfo.yaml @@ -1730,7 +1730,7 @@ tests: tail: 4 out: | INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MAJOR',1); - INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MINOR',4); + INSERT INTO metadata VALUES('DATABASE.LAYOUT.VERSION.MINOR',5); INSERT INTO geodetic_crs VALUES('HOBU','XXXX','WGS 84','','geographic 2D','EPSG','6422','EPSG','6326',NULL,0); INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_XXXX','geodetic_crs','HOBU','XXXX','EPSG','1262','EPSG','1183'); - args: -s EPSG:23030 -t EPSG:25830 --bbox -6,40,-5,41 --grid-check known_available --hide-ballpark --summary diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp index 7e8fe2b210..39a08d7cb9 100644 --- a/test/unit/test_factory.cpp +++ b/test/unit/test_factory.cpp @@ -1979,12 +1979,12 @@ class FactoryWithTmpDatabase : public ::testing::Test { ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED',1," - "'EPSG','DUMMY_OTHER_TRANSFORMATION');")) + "'EPSG','DUMMY_OTHER_TRANSFORMATION',NULL);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED',2," - "'EPSG','DUMMY_OTHER_TRANSFORMATION');")) + "'EPSG','DUMMY_OTHER_TRANSFORMATION',NULL);")) << last_error(); } @@ -2414,12 +2414,12 @@ TEST_F(FactoryWithTmpDatabase, << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED_2',1," - "'EPSG','OTHER_GEOG_CRS_TO_4326');")) + "'EPSG','OTHER_GEOG_CRS_TO_4326',NULL);")) << last_error(); ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','DUMMY_CONCATENATED_2',2," - "'EPSG','4326_TO_OTHER_GEOG_CRS');")) + "'EPSG','4326_TO_OTHER_GEOG_CRS',NULL);")) << last_error(); auto factoryEPSG = AuthorityFactory::create(DatabaseContext::create(m_ctxt), @@ -3549,43 +3549,43 @@ TEST_F(FactoryWithTmpDatabase, // Forward map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',1," - "'EPSG','16031');")) + "'EPSG','16031',NULL);")) << last_error(); // Noop projected ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',2," - "'EPSG','NOOP_TRANSFORMATION_32631');")) + "'EPSG','NOOP_TRANSFORMATION_32631',NULL);")) << last_error(); // Inverse map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',3," - "'EPSG','16031');")) + "'EPSG','16031',NULL);")) << last_error(); // Noop geographic ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',4," - "'EPSG','NOOP_TRANSFORMATION_4326');")) + "'EPSG','NOOP_TRANSFORMATION_4326',NULL);")) << last_error(); // Forward map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',5," - "'EPSG','16031');")) + "'EPSG','16031',NULL);")) << last_error(); // Noop projected ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',6," - "'EPSG','NOOP_TRANSFORMATION_32631');")) + "'EPSG','NOOP_TRANSFORMATION_32631',NULL);")) << last_error(); // Inverse map projection ASSERT_TRUE(execute("INSERT INTO concatenated_operation_step " "VALUES('EPSG','TEST_CONCATENATED',7," - "'EPSG','16031');")) + "'EPSG','16031',NULL);")) << last_error(); auto dbContext = DatabaseContext::create(m_ctxt);