From 25fa18055f43d0881a1a2bf9990c99fecfcbdbb7 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Thu, 6 Dec 2018 13:45:24 +0100 Subject: Take into account supersession information to filter out irrelevant transformations --- scripts/build_db.py | 28 ++++++++++++++++++++++++++++ scripts/build_db_from_esri.py | 8 ++++---- 2 files changed, 32 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/build_db.py b/scripts/build_db.py index 77f53fd9..46bef8c8 100755 --- a/scripts/build_db.py +++ b/scripts/build_db.py @@ -518,6 +518,33 @@ def fill_alias(proj_db_cursor): else: print('Cannot find datum %s in geodetic_datum or vertical_datum' % (code)) + +def find_table(proj_db_cursor, code): + for table_name in ('helmert_transformation', 'grid_transformation', 'concatenated_operation'): + proj_db_cursor.execute('SELECT name FROM %s WHERE code = ?' % table_name, (code,)) + row = proj_db_cursor.fetchone() + if row is not None: + return row[0], table_name + return None + +def fill_supersession(proj_db_cursor): + proj_db_cursor.execute("SELECT object_code, superseded_by FROM epsg.epsg_supersession WHERE object_table_name = 'epsg_coordoperation' AND object_code != superseded_by") + for row in proj_db_cursor.fetchall(): + code, superseded_by = row + proj_db_cursor.execute('SELECT 1 FROM coordinate_operation_view WHERE code = ?', (code,)) + if proj_db_cursor.fetchone() is None: + print('Skipping supersession of %d since it has not been imported' % code) + continue + + src_name, superseded_table_name = find_table(proj_db_cursor, code) + dst_name, replacement_table_name = find_table(proj_db_cursor, superseded_by) + assert superseded_table_name, row + assert replacement_table_name, row + if superseded_table_name == 'grid_transformation' and replacement_table_name == 'grid_transformation' and src_name.startswith('NAD27 to NAD83'): + print('Skipping supersession of %d (%s) by %d (%s)' % (code, src_name, superseded_by, dst_name)) + continue + proj_db_cursor.execute("INSERT INTO supersession VALUES (?,'EPSG',?,?,'EPSG',?,'EPSG')", (superseded_table_name, code, replacement_table_name, superseded_by)) + def report_non_imported_operations(proj_db_cursor): proj_db_cursor.execute("SELECT coord_op_code, coord_op_type, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, area_of_use_code, coord_op_accuracy, epsg_coordoperation.deprecated FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_code NOT IN (SELECT code FROM coordinate_operation_with_conversion_view)") rows = [] @@ -563,6 +590,7 @@ fill_grid_transformation(proj_db_cursor) fill_other_transformation(proj_db_cursor) fill_concatenated_operation(proj_db_cursor) fill_alias(proj_db_cursor) +fill_supersession(proj_db_cursor) non_imported_operations = report_non_imported_operations(proj_db_cursor) proj_db_cursor.close() diff --git a/scripts/build_db_from_esri.py b/scripts/build_db_from_esri.py index 2bc4a528..4f89f59f 100755 --- a/scripts/build_db_from_esri.py +++ b/scripts/build_db_from_esri.py @@ -609,7 +609,7 @@ def import_geogcs(): src_row = cursor.fetchone() assert src_row - sql = """INSERT INTO "link_from_deprecated_to_non_deprecated" VALUES('geodetic_crs','ESRI','%s','EPSG','%s','ESRI');""" % ( + sql = """INSERT INTO "supersession" VALUES('geodetic_crs','ESRI','%s','geodetic_crs','EPSG','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) @@ -728,7 +728,7 @@ def import_projcs(): latestWkid = mapDeprecatedToNonDeprecated[deprecated] if latestWkid in wkid_set: - sql = """INSERT INTO "link_from_deprecated_to_non_deprecated" VALUES('projected_crs','ESRI','%s','ESRI','%s','ESRI');""" % ( + sql = """INSERT INTO "supersession" VALUES('projected_crs','ESRI','%s','projected_crs','ESRI','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) else: @@ -736,7 +736,7 @@ def import_projcs(): "SELECT name FROM projected_crs WHERE auth_name = 'EPSG' AND code = ?", (latestWkid,)) src_row = cursor.fetchone() assert src_row, row - sql = """INSERT INTO "link_from_deprecated_to_non_deprecated" VALUES('projected_crs','ESRI','%s','EPSG','%s','ESRI');""" % ( + sql = """INSERT INTO "supersession" VALUES('projected_crs','ESRI','%s','projected_crs','EPSG','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) @@ -962,7 +962,7 @@ def import_vertcs(): src_row = cursor.fetchone() assert src_row - sql = """INSERT INTO "link_from_deprecated_to_non_deprecated" VALUES('vertical_crs','ESRI','%s','EPSG','%s','ESRI');""" % ( + sql = """INSERT INTO "supersession" VALUES('vertical_crs','ESRI','%s','vertical_crs','EPSG','%s','ESRI');""" % ( code, latestWkid) all_sql.append(sql) -- cgit v1.2.3