Skip to content

Commit 1bb04db

Browse files
committed
Database: update ESRI to ArcGIS Pro 3.5
1 parent e3a27d2 commit 1bb04db

7 files changed

Lines changed: 2513 additions & 3502 deletions

File tree

data/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ set(ALL_SQL_IN "${CMAKE_CURRENT_BINARY_DIR}/all.sql.in")
3131
set(PROJ_DB "${CMAKE_CURRENT_BINARY_DIR}/proj.db")
3232
include(sql_filelist.cmake)
3333

34-
set(PROJ_DB_SQL_EXPECTED_MD5 "45d4834862779f491ea8c4b0f653e8b5")
34+
set(PROJ_DB_SQL_EXPECTED_MD5 "0e1b5c76ce035d9fbbf813e2bf6e2704")
3535

3636
add_custom_command(
3737
OUTPUT ${PROJ_DB}

data/sql/consistency_checks_triggers.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ CREATE TRIGGER geodetic_datum_insert_trigger
3636
BEFORE INSERT ON geodetic_datum
3737
FOR EACH ROW BEGIN
3838
SELECT RAISE(ABORT, 'insert on geodetic_datum violates constraint: ellipsoid must not be deprecated when geodetic_datum is not deprecated')
39-
WHERE EXISTS(SELECT 1 FROM ellipsoid WHERE ellipsoid.auth_name = NEW.ellipsoid_auth_name AND ellipsoid.code = NEW.ellipsoid_code AND ellipsoid.deprecated != 0) AND NEW.deprecated = 0;
39+
WHERE EXISTS(SELECT 1 FROM ellipsoid WHERE ellipsoid.auth_name = NEW.ellipsoid_auth_name AND ellipsoid.code = NEW.ellipsoid_code AND ellipsoid.deprecated != 0) AND NEW.deprecated = 0 AND NEW.auth_name != 'ESRI';
4040
SELECT RAISE(ABORT, 'insert on geodetic_datum violates constraint: prime_meridian must not be deprecated when geodetic_datum is not deprecated')
4141
WHERE EXISTS(SELECT 1 FROM prime_meridian WHERE prime_meridian.auth_name = NEW.prime_meridian_auth_name AND prime_meridian.code = NEW.prime_meridian_code AND prime_meridian.deprecated != 0) AND NEW.deprecated = 0;
4242
SELECT RAISE(ABORT, 'frame_reference_epoch and ensemble_accuracy are mutually exclusive')
@@ -204,7 +204,7 @@ FOR EACH ROW BEGIN
204204

205205
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: name (of a non-deprecated entry) must not already exist in (a non-deprecated entry of) crs_view')
206206
WHERE EXISTS (SELECT 1 FROM crs_view WHERE crs_view.name = NEW.name AND crs_view.deprecated = 0 AND NEW.deprecated = 0
207-
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name != 'IGNF')
207+
AND NEW.auth_name IN (SELECT auth_name FROM builtin_authorities WHERE auth_name NOT IN ('IGNF', 'ESRI'))
208208
);
209209

210210
SELECT RAISE(ABORT, 'insert on projected_crs violates constraint: geodetic_crs must not be deprecated when projected_crs is not deprecated')

data/sql/esri.sql

Lines changed: 2426 additions & 3488 deletions
Large diffs are not rendered by default.

scripts/build_db_from_esri.py

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,17 @@ def import_syn(filename):
101101
('portugal/DLX_ETRS89_geo','pt_dgt_DLx_ETRS89_geo.tif','DLX_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL),
102102
('portugal/D73_ETRS89_geo','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL),
103103
('netherlands/rdtrans2008','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL),
104-
('uk/OSTN15_NTv2','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',1 -- reverse direction
105-
,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL),
106104
('canada/GS7783','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL),
107105
('spain/100800401','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL),
108106
('australia/QLD_0900','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), -- From https://www.dnrme.qld.gov.au/__data/assets/pdf_file/0006/105765/gday-21-user-guide.pdf: "Note that the Queensland grid QLD_0900.gsb produces identical results to the National AGD84 grid for the equivalent coverage."
109107
('spain/PENR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL),
110108
('spain/BALR2009','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL),
111-
('spain/peninsula','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL);
109+
('spain/peninsula','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL),
110+
('spain/baleares','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL);
112111
-- 'france/RGNC1991_IGN72GrandeTerre' : we have a 3D geocentric corresponding one: no need for mapping
113112
-- 'france/RGNC1991_NEA74Noumea' : we have a 3D geocentric corresponding one: no need for mapping
114113
"""
115114

116-
117115
def escape_literal(x):
118116
return x.replace("'", "''")
119117

@@ -2109,6 +2107,8 @@ def import_geogtran():
21092107
idx_accuracy = header.index('accuracy')
21102108
assert idx_accuracy >= 0
21112109

2110+
set_names = set()
2111+
21122112
while True:
21132113
try:
21142114
row = next(reader)
@@ -2154,6 +2154,11 @@ def import_geogtran():
21542154
# print('Skipping deprecated GEOGTRAN %s' % esri_name)
21552155
continue
21562156

2157+
if esri_name in set_names:
2158+
print(f'Skipping ESRI:{wkid} since transformation with same name {esri_name} already found!')
2159+
continue
2160+
set_names.add(esri_name)
2161+
21572162
parsed_wkt2 = parse_wkt_array(wkt2)
21582163
assert 'COORDINATEOPERATION' in parsed_wkt2
21592164

@@ -2599,11 +2604,77 @@ def import_geogtran():
25992604
script_dir_name = os.path.dirname(os.path.realpath(__file__))
26002605
sql_dir_name = os.path.join(os.path.dirname(script_dir_name), 'data', 'sql')
26012606

2607+
2608+
old_aliases = """-------------------
2609+
-- ESRI old aliases
2610+
-------------------
2611+
-- Changed in ArcGIS Pro 3.0
2612+
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6181','D_Luxembourg_1930','ESRI_OLD');
2613+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4181','GCS_Luxembourg_1930','ESRI_OLD');
2614+
INSERT INTO alias_name VALUES('projected_crs','EPSG','2169','Luxembourg_1930_Gauss','ESRI_OLD');
2615+
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5774','NG_L','ESRI_OLD');
2616+
-- Changed in ArcGIS Pro 3.2
2617+
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1064','D_SIRGAS-Chile','ESRI_OLD');
2618+
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','1254','D_SIRGAS-Chile','ESRI_OLD');
2619+
INSERT INTO alias_name VALUES('geodetic_datum','EPSG','6737','D_Korea_2000','ESRI_OLD');
2620+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4737','GCS_Korea_2000','ESRI_OLD');
2621+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','4927','Korea_2000_3D','ESRI_OLD');
2622+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5342','POSGAR_3D','ESRI_OLD');
2623+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','5360','GCS_SIRGAS-Chile','ESRI_OLD');
2624+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9183','SIRGAS-Chile_3D','ESRI_OLD');
2625+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9184','GCS_SIRGAS-Chile','ESRI_OLD');
2626+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9308','ATRF2014_(3D)','ESRI_OLD');
2627+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9332','KSA-GRF17_(3D)','ESRI_OLD');
2628+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9379','IGb14_(3D)','ESRI_OLD');
2629+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9469','SRGI2013_(3D)','ESRI_OLD');
2630+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9546','LTF2004(G)_(3D)','ESRI_OLD');
2631+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9695','REDGEOMIN_(3D)','ESRI_OLD');
2632+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9701','ETRF2000-PL_(3D)','ESRI_OLD');
2633+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9754','WGS_84_(G2139)_(3D)','ESRI_OLD');
2634+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','9893','LUREF_(3D)','ESRI_OLD');
2635+
INSERT INTO alias_name VALUES('geodetic_crs','EPSG','20040','SIRGAS-Chile_2021_(3D)','ESRI_OLD');
2636+
INSERT INTO alias_name VALUES('projected_crs','EPSG','2176','ETRS_1989_Poland_CS2000_Zone_5','ESRI_OLD');
2637+
INSERT INTO alias_name VALUES('projected_crs','EPSG','2177','ETRS_1989_Poland_CS2000_Zone_6','ESRI_OLD');
2638+
INSERT INTO alias_name VALUES('projected_crs','EPSG','2178','ETRS_1989_Poland_CS2000_Zone_7','ESRI_OLD');
2639+
INSERT INTO alias_name VALUES('projected_crs','EPSG','2179','ETRS_1989_Poland_CS2000_Zone_8','ESRI_OLD');
2640+
INSERT INTO alias_name VALUES('projected_crs','EPSG','2180','ETRS_1989_Poland_CS92','ESRI_OLD');
2641+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5179','Korea_2000_Korea_Unified_Coordinate_System','ESRI_OLD');
2642+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5180','Korea_2000_Korea_West_Belt','ESRI_OLD');
2643+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5181','Korea_2000_Korea_Central_Belt','ESRI_OLD');
2644+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5182','Korea_2000_Korea_Central_Belt_Jeju','ESRI_OLD');
2645+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5183','Korea_2000_Korea_East_Belt','ESRI_OLD');
2646+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5184','Korea_2000_Korea_East_Sea_Belt','ESRI_OLD');
2647+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5185','Korea_2000_Korea_West_Belt_2010','ESRI_OLD');
2648+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5186','Korea_2000_Korea_Central_Belt_2010','ESRI_OLD');
2649+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5187','Korea_2000_Korea_East_Belt_2010','ESRI_OLD');
2650+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5188','Korea_2000_Korea_East_Sea_Belt_2010','ESRI_OLD');
2651+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5361','SIRGAS-Chile_UTM_Zone_19S','ESRI_OLD');
2652+
INSERT INTO alias_name VALUES('projected_crs','EPSG','5362','SIRGAS-Chile_UTM_Zone_18S','ESRI_OLD');
2653+
INSERT INTO alias_name VALUES('projected_crs','EPSG','6622','NAD_1983_CSRS_Quebec_Lambert','ESRI_OLD');
2654+
INSERT INTO alias_name VALUES('projected_crs','EPSG','6624','NAD_1983_CSRS_Quebec_Albers','ESRI_OLD');
2655+
INSERT INTO alias_name VALUES('projected_crs','EPSG','9377','MAGNA-SIRGAS_Origen-Nacional','ESRI_OLD');
2656+
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5193','Incheon_height','ESRI_OLD');
2657+
INSERT INTO alias_name VALUES('compound_crs','EPSG','9462','GDA2020_+_AVWS_height','ESRI_OLD');
2658+
INSERT INTO alias_name VALUES('compound_crs','EPSG','9463','GDA2020_+_AHD_height','ESRI_OLD');
2659+
INSERT INTO alias_name VALUES('compound_crs','EPSG','9464','GDA94_+_AHD_height','ESRI_OLD');
2660+
-- Changed in ArcGIS Pro 3.3
2661+
INSERT INTO alias_name VALUES('vertical_datum','EPSG','5181','Deutches_Haupthoehennetz_1992','ESRI_OLD');
2662+
INSERT INTO alias_name VALUES('vertical_datum','EPSG','5182','Deutches_Haupthoehennetz_1985','ESRI_OLD');
2663+
-- Changed in ArcGIS Pro 3.4
2664+
INSERT INTO alias_name VALUES('projected_crs','EPSG','9895','LUREF_Luxembourg_TM_(3D)','ESRI_OLD');
2665+
-- Changed in ArcGIS Pro 3.5
2666+
INSERT INTO alias_name VALUES('vertical_crs','EPSG','3855','EGM2008_Geoid','ESRI_OLD');
2667+
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5773','EGM96_Geoid','ESRI_OLD');
2668+
INSERT INTO alias_name VALUES('vertical_crs','EPSG','5798','EGM84_Geoid','ESRI_OLD');
2669+
"""
2670+
2671+
26022672
f = open(os.path.join(sql_dir_name, 'esri') + '.sql', 'wb')
26032673
f.write("--- This file has been generated by scripts/build_db_from_esri.py. DO NOT EDIT !\n\n".encode('UTF-8'))
26042674
for sql in all_sql:
26052675
f.write((sql + '\n').encode('UTF-8'))
26062676
f.write(manual_grids.encode('UTF-8'))
2677+
f.write(old_aliases.encode('UTF-8'))
26072678
f.close()
26082679

26092680
print('')

src/iso19111/factory.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9042,8 +9042,12 @@ std::string AuthorityFactory::getOfficialNameFromAlias(
90429042
params.push_back(tableName);
90439043
}
90449044
if (!source.empty()) {
9045-
sql += " AND source = ?";
9046-
params.push_back(source);
9045+
if (source == "ESRI") {
9046+
sql += " AND source IN ('ESRI', 'ESRI_OLD')";
9047+
} else {
9048+
sql += " AND source = ?";
9049+
params.push_back(source);
9050+
}
90479051
}
90489052
auto res = d->run(sql, params);
90499053
if (res.empty()) {

test/cli/test_projinfo.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1811,11 +1811,10 @@ tests:
18111811
- args: --list-crs geographic_2d,allow_deprecated --bbox -100,40,-90,41 --spatial-test intersects
18121812
grep:
18131813
- deprecated
1814-
- NAD83\(FBN\)|GCS_IGS08
1814+
- NAD83\(FBN\)
18151815
sort:
18161816
out: |
18171817
EPSG:8449 "NAD83(FBN)" [deprecated]
1818-
ESRI:104010 "GCS_IGS08" [deprecated]
18191818
- args: --list-crs projected --bbox -100,40,-90,41 --spatial-test intersects
18201819
grep: (2011).*Missouri East|York
18211820
sort:

test/unit/test_crs.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3147,8 +3147,7 @@ TEST(crs, projectedCRS_identify_db) {
31473147
"PARAMETER[\"Latitude_Of_Origin\",33],UNIT[\"Meter\",1.0]]");
31483148
auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
31493149
ASSERT_TRUE(crs != nullptr);
3150-
auto factoryAll = AuthorityFactory::create(dbContext, std::string());
3151-
auto res = crs->identify(factoryAll);
3150+
auto res = crs->identify(factoryEPSG);
31523151
ASSERT_EQ(res.size(), 1U);
31533152
EXPECT_EQ(res.front().first->getEPSGCode(), 6670);
31543153
EXPECT_EQ(res.front().second, 90);
@@ -3521,7 +3520,7 @@ TEST(crs, projectedCRS_identify_db) {
35213520
ASSERT_GE(res.size(), 1U);
35223521
EXPECT_EQ(res.front().first->identifiers()[0]->code(), "102082");
35233522
EXPECT_EQ(*(res.front().first->identifiers()[0]->codeSpace()), "ESRI");
3524-
EXPECT_EQ(res.front().second, 90);
3523+
EXPECT_EQ(res.front().second, 100);
35253524
}
35263525
}
35273526

0 commit comments

Comments
 (0)