diff options
| author | Nyall Dawson <nyall.dawson@gmail.com> | 2021-11-23 09:06:16 +1000 |
|---|---|---|
| committer | Nyall Dawson <nyall.dawson@gmail.com> | 2022-01-24 11:41:33 +1000 |
| commit | 2586c949c03475bfaab1174781e4ee2e5a7238d4 (patch) | |
| tree | fe9dfa7dd542f5d0167d5c6975ee3612a57a7d1d /scripts | |
| parent | a048c9e09e3bae5d75b122ca8dc8b54a479d01ba (diff) | |
| download | PROJ-2586c949c03475bfaab1174781e4ee2e5a7238d4.tar.gz PROJ-2586c949c03475bfaab1174781e4ee2e5a7238d4.zip | |
Map ESRI Cassini method to EPSG:9806 during ESRI projection engine db ingestion
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/build_db_from_esri.py | 60 |
1 files changed, 57 insertions, 3 deletions
diff --git a/scripts/build_db_from_esri.py b/scripts/build_db_from_esri.py index c8a7c503..d8d97a90 100755 --- a/scripts/build_db_from_esri.py +++ b/scripts/build_db_from_esri.py @@ -826,8 +826,8 @@ def get_wkt_unit(UNIT_NAME, UNIT_VALUE, is_rate=False) -> Unit: uom_auth_name = 'EPSG' assert not is_rate uom_code = '9097' - cs_auth_name = 'EPSG' - cs_code = None + cs_auth_name = 'ESRI' + cs_code = UNIT_NAME assert UNIT_VALUE == '20.1168', UNIT_VALUE elif UNIT_NAME == 'Degree': assert not is_rate @@ -1463,6 +1463,59 @@ def import_projcs(): code, code, extent_auth_name, extent_code, 'EPSG', '1024') all_sql.append(sql) + elif method == 'Cassini': + params = get_parameter_values(parsed_conv_wkt2['CONVERSION'][1]) + + assert params['False_Easting'].unit.cs_auth_name == params[ + 'False_Northing'].unit.cs_auth_name, 'Cannot handle False_Easting CS auth {} != False_Northing CS auth {}'.format( + params['False_Easting'].unit.cs_auth_name, params['False_Northing'].unit.cs_auth_name) + cs_auth_name = params['False_Easting'].unit.cs_auth_name + + assert params['False_Easting'].unit.cs_code == params[ + 'False_Northing'].unit.cs_code, 'Cannot handle False_Easting CS code {} != False_Northing CS code {}'.format( + params['False_Easting'].unit.cs_code, params['False_Northing'].unit.cs_code) + cs_code = params['False_Easting'].unit.cs_code + + assert params['Scale_Factor'].unit.uom_code == '9201', 'Unhandled scale unit {}'.format(params['Scale_Factor'].unit.uom_code) + assert params['Scale_Factor'].value == '1.0' + + conv_name = 'unnamed' + conv_auth_name = 'ESRI' + conv_code = code + + sql = insert_conversion_sql(esri_code=code, esri_name=conv_name, + epsg_code='9806', epsg_name='Cassini-Soldner', + params=params, + param_mapping={ + 8801: 'Latitude_Of_Origin', + 8802: 'Central_Meridian', + 8806: 'False_Easting', + 8807: 'False_Northing', + }, + deprecated=bool(deprecated) + ) + + sql_extract = sql[sql.find('NULL'):] + if conv_name != 'unnamed' or sql_extract not in map_conversion_sql_to_code: + all_sql.append(sql) + + sql = """INSERT INTO "usage" VALUES('ESRI', 'CONV_%s_USAGE','conversion','ESRI','%s','%s','%s','%s','%s');""" % ( + code, code, extent_auth_name, extent_code, 'EPSG', '1024') + all_sql.append(sql) + + map_conversion_sql_to_code[sql_extract] = conv_code + else: + conv_code = map_conversion_sql_to_code[sql_extract] + + sql = """INSERT INTO "projected_crs" VALUES('ESRI','%s','%s',NULL,'%s','%s','%s','%s','%s','%s',NULL,%d);""" % ( + code, esri_name, cs_auth_name, cs_code, geogcs_auth_name, geogcs_code, conv_auth_name, + conv_code, deprecated) + all_sql.append(sql) + + sql = """INSERT INTO "usage" VALUES('ESRI', 'PCRS_%s_USAGE','projected_crs','ESRI','%s','%s','%s','%s','%s');""" % ( + code, code, extent_auth_name, extent_code, 'EPSG', '1024') + all_sql.append(sql) + elif method == 'IGAC_Plano_Cartesiano': params = get_parameter_values(parsed_conv_wkt2['CONVERSION'][1]) @@ -1565,8 +1618,9 @@ def import_projcs(): all_sql.append(sql) else: - # TODO -- add more method mapping! + print('Direct mapping for {} not yet implemented, falling back to default handling'.format(method)) + sql = """INSERT INTO "projected_crs" VALUES('ESRI','%s','%s',NULL,NULL,NULL,'%s','%s',NULL,NULL,'%s',%d);""" % ( code, esri_name, geogcs_auth_name, geogcs_code, escape_literal(wkt), deprecated) all_sql.append(sql) |
