aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-04 14:46:41 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-04 14:46:41 +0100
commitd06c1c55c1c3fc7209abdbdfbf2e3cf34f18cf98 (patch)
tree98fe336a41f1397280ee665d08040339967d711b
parentaddf30e4446fd39891fd5bdcb22413ed41e0913b (diff)
downloadPROJ-d06c1c55c1c3fc7209abdbdfbf2e3cf34f18cf98.tar.gz
PROJ-d06c1c55c1c3fc7209abdbdfbf2e3cf34f18cf98.zip
Improve recognition of WKT1 datum names
-rw-r--r--data/Makefile.am1
-rw-r--r--data/sql/alias_name.sql519
-rw-r--r--data/sql_filelist.cmake1
-rw-r--r--include/proj/io.hpp5
-rwxr-xr-xscripts/build_db.py14
-rw-r--r--src/c_api.cpp10
-rw-r--r--src/factory.cpp100
-rw-r--r--src/io.cpp38
-rw-r--r--src/metadata.cpp60
-rw-r--r--test/unit/test_c_api.cpp21
-rw-r--r--test/unit/test_factory.cpp20
-rw-r--r--test/unit/test_io.cpp53
-rw-r--r--test/unit/test_metadata.cpp6
13 files changed, 809 insertions, 39 deletions
diff --git a/data/Makefile.am b/data/Makefile.am
index d5c136ae..df635f7e 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -26,6 +26,7 @@ SQL_ORDERED_LIST = sql/begin.sql \
sql/grid_transformation_custom.sql \
sql/other_transformation.sql \
sql/concatenated_operation.sql \
+ sql/alias_name.sql \
sql/esri.sql \
sql/ignf.sql \
sql/grid_alternatives.sql \
diff --git a/data/sql/alias_name.sql b/data/sql/alias_name.sql
new file mode 100644
index 00000000..d0b7ef20
--- /dev/null
+++ b/data/sql/alias_name.sql
@@ -0,0 +1,519 @@
+--- This file has been generated by scripts/build_db.py. DO NOT EDIT !
+
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5104','Huang Hai 1956','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6125','Samboja P2 exc T9','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6160','Quini-Huao','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6174','Sierra Leone Peninsular 1924','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6211','Genuk','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6218','Bogota','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6222','South Africa','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6227','Levant','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83 (1986)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6272','GD49','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6308','Rikets koordinatsystem 1938','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5100','MSL','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5101','ODN','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5102','NGVD29','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5103','NAVD88','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5104','Yellow Sea','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5105','Baltic','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5106','Caspian','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5107','NGF','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5109','NAP','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5111','AHD','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5112','AHD (Tasmania)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5114','CVD28','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5115','Piraeus86','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5116','N60','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5117','RH70','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5118','NGF - Lallemand','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5119','NGF-IGN69','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5120','NGF-IGN78','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5122','JSLD69','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5123','PHD93','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5127','LN02','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5128','LHN95','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5129','EVRF2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6121','GGRS87','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6122','ATS77','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6123','KKJ','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6124','RT90','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6126','LKS94 (ETRS89)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6130','Moznet','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6132','FD58','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6133','EST92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6134','PSD93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6140','NAD83(CSRS)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6151','CHTRF95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83(HARN)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6154','ED50(ED77)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6156','S-JTSK','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6159','ELD79','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6163','YNGN96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6170','SIRGAS 1995','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6171','RGF93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6172','POSGAR','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6202','AGD66','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6203','AGD84','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6204','Ain el Abd','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6215','Belge 1950','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6230','ED50','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6231','ED87','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6237','HD72','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6238','ID74','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6242','JAD69','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6246','KOC','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6248','PSAD56','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6258','ETRS89','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6267','NAD27','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6269','NAD83','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6272','NZGD49','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6275','NTF','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6278','OSGB70','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6279','OS(SN)80','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6280','Padang','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6283','GDA94','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6291','SAD69','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6297','Tananarive','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6303','TC(1948)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6308','RT38','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6312','MGI','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6313','Belge 1972','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6314','DHDN','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6318','NGN','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6319','KUDAMS','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6322','WGS 72','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6324','WGS 72BE','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6326','WGS 84','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6608','NAD27(76)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6609','CGQ77','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6901','ATF (Paris)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6902','NDG (Paris)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1161','DHHN12','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1161','Deutsches Haupthöhennetz 1912','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1162','LAS-2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1159','GSK-2011','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1159','GRS-2011','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6181','LUREF','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6180','EST97','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6179','42/58','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6178','42/83','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1031','HR1901','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6818','Systém Jednotné trigonometrické sítě katastrální (Ferro)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6176','AAD98','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6167','NZGD2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5119','Nivellement general de la France','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5119','NGF','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5120','IGN78','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5118','NGF','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5120','Nivellement general de la France','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5118','Nivellement general de la France','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6143','Côte d''Ivoire (Ivory Coast)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6142','Côte d''Ivoire (Ivory Coast)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6189','SIRGAS-REGVEN','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6189','REGVEN','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6171','Réseau Géodésique Français 1993','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6172','Posiciones Geodésicas Argentinas','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6190','POSGAR 98','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6190','Posiciones Geodésicas Argentinas 1998','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Observatario Flores','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Azores Occidental 1939','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6183','Graciosa','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6183','Azores Central 1948','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6184','Sao Bras','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6184','Azores Oriental 1940','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6156','Systém Jednotné trigonometrické sítě katastrální','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6123','Kartastokoordinaattijärjestelmä (1966)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5133','AIOC95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6199','New Egyptian','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6229','Old Egyptian','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6612','JGD2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5137','Huang Hai 1985','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5135','HKPD','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6611','HK80','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5135','Ordnance Datum','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5136','Admiralty Chart Datum','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1164','ODN (Offshore)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6820','Segara (Jakarta)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','Segara','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','Samboja','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','P2 Exc','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6613','P2 Exc-T9','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6614','QND95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6620','12th Parallel traverse','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5131','Belfast','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5101','Newlyn','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6637','Perroud 1950','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6634','MHNC72','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6627','RGR92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6624','RGFG95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6623','CSG67','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6648','ITRF89','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6649','ITRF90','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6650','ITRF91','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6651','ITRF92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6652','ITRF93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6653','ITRF94','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6654','ITRF96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6655','ITRF97','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6656','ITRF2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6623','Guyane Francaise','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5151','NGNC69','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6638','St. Pierre et Miquelon 1950','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6647','ITRF88','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6645','RGNC91','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6640','RRAF91','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6659','ISN93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6300','TM75','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6300','1975 Mapping Adjustment','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5153','NGG1977','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5154','Martinique 1987','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5156','Reunion 1989','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5156','IGN89','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5155','IGN 1988','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5154','IGN87','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6661','LKS92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6615','Madeira SE Base','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6665','Graciosa','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6665','Azores Central 1995','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6665','Base SW','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6183','Base SW','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6664','Sao Bras','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6664','Azores Oriental 1995','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6615','Base SE','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6663','Base SE','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6663','Madeira SE Base 1995','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6615','Porto Santo','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6667','IKBD-92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6668','ED79','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6131','Indian (DMA Reduced)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1192','NAD83(CSRS)v1','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1192','NAD83(CSRS96)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1195','NAD83(CSRS)v4','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6265','Rome 1940','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6806','Rome 1940 (Rome)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6670','IGM95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6673','CI1979','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','NG-L','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5174','NN1954','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5173','TNVCN99','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6173','ETRS89','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6281','Old Israeli Datum','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6281','OID','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1146','Abu Dhabi Vertical Datum','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6674','SIRGAS 2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6678','Lao 1997','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5182','DHHN85','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5183','SNN76','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','NG95','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5176','GHA','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5177','NVN99','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5178','RNGAP','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5180','REDNAP','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5181','DHHN92','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5185','EOMA 1980','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5186','PWD','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5187','WD','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5188','CD','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83 (High Precision Geodetic Network)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83(HPGN)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6625','Fort Desaix','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6622','Sainte Anne','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6626','Piton des Neiges','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5189','NGC','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5192','IGN 1955','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5191','IGN 1950','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5114','Canadian Vertical Datum of 1928','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5114','CGVD28','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6683','PRS92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6683','Modified Luzon Datum','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6686','MAGNA-SIRGAS','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1133','NAD83(CORS96)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5105','Baltic Sea','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6687','RGPF','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6688','MHEFO 55','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6628','IGN 1952','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6692','MOP 1983','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6628','Tahiti','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6629','Tahaa','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5195','NGPF','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6694','POSGAR 94','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6694','POSGAR','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6190','POSGAR','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6694','Posiciones Geodésicas Argentinas 1994','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6701','IGCB 1955','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6701','Bas Congo 1955','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Observatorio Meteorologico 1939','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6182','Observatorio 1966','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6616','Selvagem Grande 1938','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6616','Marco Astro','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6703','Mhast 1951','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6705','Mhast','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6704','Mhast','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6259','Mhast','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6699','Le Pouce (Mauritius 94)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6699','Le Pouce (Mauritius PN 94)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6725','Johnston Atoll 1961','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6737','Korea 2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6740','PZ-90','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6739','HK63(67)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6738','HK63','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6690','IGN79 Tahiti','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6639','Uvea SHOM 1978','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6706','S-650 TL','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6741','FD54','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6742','GDM2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6745','RD/83','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6746','PD/83','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6747','GR96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6720','FGD 1986','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6720','Fiji 1986','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6752','Viti Levu 1916','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6748','Vanua Levu 1917','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6749','RGNC91-93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6749','RGNC','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6298','Timbalai 1968','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6298','Borneo Triangulation of 1968','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6298','BT68','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6245','Malaysia Revised Triangulation 1968','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6245','MRT68','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6714','Bellevue (IGN)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6730','Santo (DOS)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6753','FD54a','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6754','LGD2006','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6755','DGN95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6755','Indonesian Geodetic Datum 1995','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6755','IGD95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6697','IGC 1962 6th Parallel South','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6756','VN-2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6896','ITRF2005','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6647','IERS Terrestrial Reference Frame 1988','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6648','IERS Terrestrial Reference Frame 1989','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6649','IERS Terrestrial Reference Frame 1990','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6650','IERS Terrestrial Reference Frame 1991','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6651','IERS Terrestrial Reference Frame 1992','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6652','IERS Terrestrial Reference Frame 1993','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6653','IERS Terrestrial Reference Frame 1994','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5204','IGLD 1955','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5205','IGLD 1985','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5206','DVR90','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1140','SHD','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6758','JAD2001','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6760','WGS 66','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1034','SREF98','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5207','HVRS71','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6762','BDA2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5208','RH2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5209','RH00','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6764','RSRGD2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5157','Auckland','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5158','Bluff','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5169','Chatham Island 1959','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5159','Dunedin','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5160','Gisborne','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5161','Lyttelton','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5162','Moturiki','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5163','Napier','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5164','Nelson','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5165','One Tree Point','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5170','Stewart Island','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5167','Taranaki','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5166','Tararu','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5168','Wellington','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6765','D96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6765','Slovenia 1996','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1024','HD1909','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1025','TWD67','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1026','TWD97','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6236','Hu Tzu Shan','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6316','Dealul Piscului 1933','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1107','Cais da Figueirinha - Angra do Heroísmo','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1141','ITRF2008 (2005.0)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5202','Bora Bora 2001','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5124','Fahud HD','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5132','DNN','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5138','ODN Orkney','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5215','EVRF2007','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6743','Karbala 1979 (Polservice)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5149','British Vertical Datum','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1029','IGRS','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6191','ALB86','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6127','Tete 1960','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6201','Blue Nile 1958','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1112','CGRS93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1113','RGTAAF07','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1113','Reseau Geodesique des TAAF 2007','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1147','ONGD14','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1031','D48','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6805','MGI (Ferro)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1033','RGRDC 2005','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6728','Pico de las Nieves','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6728','PN84','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1027','EGM2008','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1152','WGS 84 (G730)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1153','WGS 84 (G873)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5203','EGM84','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1154','WGS 84 (G1150)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5171','EGM96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1155','WGS 84 (G1674)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1156','WGS 84 (G1762)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1157','PZ-90.02','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1158','PZ-90.11','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1160','Kyrg-06','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1165','ITRF2014','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6818','Systém Jednotnej trigonometrickej siete katastrálnej (Ferro)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1167','BGS2005','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1166','WGS 84 (Transit)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6710','ASTRO DOS 71/4','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1168','GDA2020','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1169','NZVD2016','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6710','St. Helena 1971','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1170','DHHN2016','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1170','Deutsches Haupthöhennetz 2016','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1171','POM96','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1172','POM08','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1174','SHGD2015','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1173','WGS 84 Tritan St. Helena','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1177','SHVD2015','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1180','ETRF91','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1178','ETRF89','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1178','EUREF89','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1179','ETRF90','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1181','ETRF92','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1182','ETRF93','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1183','ETRF94','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1184','ETRF96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1185','ETRF97','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1186','ETRF2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1176','MSL Tritan','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1175','MSL 1971','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1176','St. Helena Tritan 2011','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1193','NAD83(CSRS)v2','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1187','ISN2016','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1191','ITRF2014 (2010.0)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1190','ISH2004','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1190','Landshæðarkerfi Islands 2004','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6156','Systém Jednotnej trigonometrickej siete katastrálnej','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1196','NAD83(CSRS)v5','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1194','NAD83(CSRS)v3','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1197','NAD83(CSRS)v6','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1198','NAD83(CSRS)v7','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1193','NAD83(CSRS98)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1199','GVR2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1200','GVR2016','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','Guam Geodetic Network 1993','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1201','S-JTSK [JTSK03]','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1201','Systém Jednotnej trigonometrickej siete katastrálnej [JTSK03]','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5111','AHD71','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1208','Macao 2008','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1204','ETRF2005','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1206','ETRF2014','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5111','AHD-TAS83','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1211','NAD83(FBN)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1212','NAD83(HARN Corrected)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1213','N43','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1214','STRS00','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1214','SRB_ETRS89','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5177','National Vertical Network 1999','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1215','SVS2010','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1036','RGM04','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1038','RGSPM06','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1216','SRB_VRS12','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1219','MVGC','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1218','MGD-2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1218','MTRF-2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1039','NZVD2009','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1035','REGCAN95','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6761','HTRS96','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1047','RRAF91','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1042','Red Geodesica Nacional 1992','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1046','Morro do Papagaio','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1046','Island of Principe datum','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1044','Fortaleza','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1044','Island of Sao Tome datum','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1041','PTRA08','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6301','Tokyo 1918','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1048','Tokyo 1898','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1054','SLVD','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1053','SLD99','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1057','TUREF','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1058','DRUKREF 03','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1056','GDBD2009','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6674','Sistema de Referencia Geocentrico para America del Sur 2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6818','S-JTSK (Ferro)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1059','FVR09','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1052','S-JTSK/05','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1052','Systém Jednotné trigonometrické sítě katastrální/05','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1055','S-JTSK/05 (Ferro)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1055','Systém Jednotné trigonometrické sítě katastrální/05 (Ferro)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1060','ISN2004','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1061','ITRF2008','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6152','NAD83 (High Accuracy Regional Network)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1069','Red Geodésica Básica Nacional de El Salvador','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1067','Sistema Geodésico Nacional','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6309','ROU-USAMS','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1065','CR05','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1063','MARGEN','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1066','MACARIO SOLIS','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1073','RGAF09','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1062','POSGAR 2007','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1062','POSGAR','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1062','Posiciones Geodésicas Argentinas 2007','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1072','Balboa','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1072','Panamá-Colón 1911','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6225','Corrego Alegre','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1076','PNG94','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6674','SIRGAS2000','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5182','Deutsches Haupthöhennetz 1985','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5181','Deutsches Haupthöhennetz 1992','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1078','FEH10','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1079','FCSVR10','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1081','DB_REF','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5113','Sea Level','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1084','HHWLT','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1082','HAT','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1085','ISLW','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1085','Indian Tidal Plane','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1083','LLWLT','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1080','LAT','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1090','MHHW','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1092','MHW','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1088','MHWS','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1088','Spring High Water','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1089','MLLW','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1086','MLLWS','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1091','MLW','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1087','MLWS','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1087','Spring Low Water','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1093','Low tide','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1094','High Tide','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1095','TGD2005','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1098','LCVD61','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1099','CBVD61','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1097','GCVD54','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6723','GCGD59','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6726','SIGD61','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6726','Little Cayman Geodetic Datum 1961','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1100','CIGD11','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1096','NN2000','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6723','Grand Cayman 1959','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5110','Oostende','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1116','NAD83(2011)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1117','NAD83(PA11)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1118','NAD83(MA11)','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1042','Mexican Datum of 1993','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1120','Red Geodesica Nacional 2008','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1119','NMVD03','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1122','GUVD63','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1126','GUVD04','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1125','ASVD02','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1121','Tutuila62','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1124','VIVD09','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1123','PRVD02','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1127','CGVD2013','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1128','JGD2011','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1131','JGD2011 (vertical)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1130','JGD2000 (vertical)','EPSG');
+INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1129','JSLD72','EPSG');
+INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1132','RDN2008','EPSG');
diff --git a/data/sql_filelist.cmake b/data/sql_filelist.cmake
index 1d235329..6353949f 100644
--- a/data/sql_filelist.cmake
+++ b/data/sql_filelist.cmake
@@ -21,6 +21,7 @@ set(SQL_FILES "${SQL_DIR}/begin.sql"
"${SQL_DIR}/grid_transformation_custom.sql"
"${SQL_DIR}/other_transformation.sql"
"${SQL_DIR}/concatenated_operation.sql"
+ "${SQL_DIR}/alias_name.sql"
"${SQL_DIR}/esri.sql"
"${SQL_DIR}/ignf.sql"
"${SQL_DIR}/grid_alternatives.sql"
diff --git a/include/proj/io.hpp b/include/proj/io.hpp
index 41038e2d..77ca1d2d 100644
--- a/include/proj/io.hpp
+++ b/include/proj/io.hpp
@@ -899,8 +899,9 @@ class PROJ_GCC_DLL AuthorityFactory {
PROJ_DLL std::string getOfficialNameFromAlias(
const std::string &aliasedName, const std::string &tableName,
- const std::string &source, std::string &outTableName,
- std::string &outAuthName, std::string &outCode) const;
+ const std::string &source, bool tryEquivalentNameSpelling,
+ std::string &outTableName, std::string &outAuthName,
+ std::string &outCode) const;
PROJ_DLL std::list<common::IdentifiedObjectNNPtr>
createObjectsFromName(const std::string &name,
diff --git a/scripts/build_db.py b/scripts/build_db.py
index 2626f286..77f53fd9 100755
--- a/scripts/build_db.py
+++ b/scripts/build_db.py
@@ -504,6 +504,19 @@ def fill_concatenated_operation(proj_db_cursor):
proj_db_cursor.execute('INSERT INTO concatenated_operation VALUES (' +
'?,?,?, ?,?, ?,?, ?,?, ?,?, ?, ?,?, ?,?, ?,?, ?)', arg)
+def fill_alias(proj_db_cursor):
+ proj_db_cursor.execute("SELECT object_code, alias FROM epsg.epsg_alias WHERE object_table_name = 'epsg_datum'")
+ for row in proj_db_cursor.fetchall():
+ code, alt_name = row
+ proj_db_cursor.execute('SELECT 1 FROM geodetic_datum WHERE code = ?', (code,))
+ if proj_db_cursor.fetchone() is not None:
+ proj_db_cursor.execute("INSERT INTO alias_name VALUES ('geodetic_datum','EPSG',?,?,'EPSG')", (code, alt_name))
+ else:
+ proj_db_cursor.execute('SELECT 1 FROM vertical_datum WHERE code = ?', (code,))
+ if proj_db_cursor.fetchone() is not None:
+ proj_db_cursor.execute("INSERT INTO alias_name VALUES ('vertical_datum','EPSG',?,?,'EPSG')", (code, alt_name))
+ else:
+ print('Cannot find datum %s in geodetic_datum or vertical_datum' % (code))
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)")
@@ -549,6 +562,7 @@ fill_helmert_transformation(proj_db_cursor)
fill_grid_transformation(proj_db_cursor)
fill_other_transformation(proj_db_cursor)
fill_concatenated_operation(proj_db_cursor)
+fill_alias(proj_db_cursor)
non_imported_operations = report_non_imported_operations(proj_db_cursor)
proj_db_cursor.close()
diff --git a/src/c_api.cpp b/src/c_api.cpp
index 7a991765..5c873dcf 100644
--- a/src/c_api.cpp
+++ b/src/c_api.cpp
@@ -1878,6 +1878,16 @@ static GeodeticReferenceFrameNNPtr createGeodeticReferenceFrame(
datumName.c_str(), refDatum->nameStr().c_str())) {
datumName = refDatum->nameStr();
}
+ } else {
+ std::string outTableName;
+ std::string authNameFromAlias;
+ std::string codeFromAlias;
+ auto officialName = authFactory->getOfficialNameFromAlias(
+ datumName, "geodetic_datum", std::string(), true,
+ outTableName, authNameFromAlias, codeFromAlias);
+ if (!officialName.empty()) {
+ datumName = officialName;
+ }
}
}
}
diff --git a/src/factory.cpp b/src/factory.cpp
index 7bc9c4d2..802b50aa 100644
--- a/src/factory.cpp
+++ b/src/factory.cpp
@@ -3567,6 +3567,10 @@ AuthorityFactory::getDescriptionText(const std::string &code) const {
* Or empty otherwise.
* @param source Source of the alias. Can help in case of ambiguities.
* Or empty otherwise.
+ * @param tryEquivalentNameSpelling whether the comparison of aliasedName with
+ * the alt_name column of the alis_name table should be done with using
+ * metadata::Identifier::isEquivalentName() rather than strict string
+ * comparison;
* @param outTableName Table name in which the official name has been found.
* @param outAuthName Authority name of the official name that has been found.
* @param outCode Code of the official name that has been found.
@@ -3575,34 +3579,78 @@ AuthorityFactory::getDescriptionText(const std::string &code) const {
*/
std::string AuthorityFactory::getOfficialNameFromAlias(
const std::string &aliasedName, const std::string &tableName,
- const std::string &source, std::string &outTableName,
- std::string &outAuthName, std::string &outCode) const {
- std::string sql("SELECT table_name, auth_name, code FROM alias_name WHERE "
- "alt_name = ?");
- std::vector<SQLValues> params{aliasedName};
- if (!tableName.empty()) {
- sql += " AND table_name = ?";
- params.push_back(tableName);
- }
- if (!source.empty()) {
- sql += " AND source = ?";
- params.push_back(source);
- }
- auto res = d->run(sql, params);
- if (res.empty()) {
- return std::string();
- }
- outTableName = res[0][0];
- outAuthName = res[0][1];
- outCode = res[0][2];
- sql = "SELECT name FROM \"";
- sql += replaceAll(outTableName, "\"", "\"\"");
- sql += "\" WHERE auth_name = ? AND code = ?";
- res = d->run(sql, {outAuthName, outCode});
- if (res.empty()) { // shouldn't happen normally
+ const std::string &source, bool tryEquivalentNameSpelling,
+ std::string &outTableName, std::string &outAuthName,
+ std::string &outCode) const {
+
+ if (tryEquivalentNameSpelling) {
+ std::string sql(
+ "SELECT table_name, auth_name, code, alt_name FROM alias_name");
+ std::vector<SQLValues> params;
+ if (!tableName.empty()) {
+ sql += " WHERE table_name = ?";
+ params.push_back(tableName);
+ }
+ if (!source.empty()) {
+ if (!tableName.empty()) {
+ sql += " AND ";
+ } else {
+ sql += " WHERE ";
+ }
+ sql += "source = ?";
+ params.push_back(source);
+ }
+ auto res = d->run(sql, params);
+ if (res.empty()) {
+ return std::string();
+ }
+ for (const auto &row : res) {
+ const auto &alt_name = row[3];
+ if (metadata::Identifier::isEquivalentName(alt_name.c_str(),
+ aliasedName.c_str())) {
+ outTableName = row[0];
+ outAuthName = row[1];
+ outCode = row[2];
+ sql = "SELECT name FROM \"";
+ sql += replaceAll(outTableName, "\"", "\"\"");
+ sql += "\" WHERE auth_name = ? AND code = ?";
+ res = d->run(sql, {outAuthName, outCode});
+ if (res.empty()) { // shouldn't happen normally
+ return std::string();
+ }
+ return res[0][0];
+ }
+ }
return std::string();
+ } else {
+ std::string sql(
+ "SELECT table_name, auth_name, code FROM alias_name WHERE "
+ "alt_name = ?");
+ std::vector<SQLValues> params{aliasedName};
+ if (!tableName.empty()) {
+ sql += " AND table_name = ?";
+ params.push_back(tableName);
+ }
+ if (!source.empty()) {
+ sql += " AND source = ?";
+ params.push_back(source);
+ }
+ auto res = d->run(sql, params);
+ if (res.empty()) {
+ return std::string();
+ }
+ outTableName = res[0][0];
+ outAuthName = res[0][1];
+ outCode = res[0][2];
+ sql = "SELECT name FROM \"";
+ sql += replaceAll(outTableName, "\"", "\"\"");
+ sql += "\" WHERE auth_name = ? AND code = ?";
+ res = d->run(sql, {outAuthName, outCode});
+ if (res.empty()) { // shouldn't happen normally
+ return std::string();
+ }
+ return res[0][0];
}
- return res[0][0];
}
// ---------------------------------------------------------------------------
diff --git a/src/io.cpp b/src/io.cpp
index 11e4748e..e0f74f10 100644
--- a/src/io.cpp
+++ b/src/io.cpp
@@ -1475,7 +1475,7 @@ PropertyMap &WKTParser::Private::buildProperties(const WKTNodeNNPtr &node) {
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto officialName = authFactory->getOfficialNameFromAlias(
- name, tableNameForAlias, "ESRI", outTableName,
+ name, tableNameForAlias, "ESRI", false, outTableName,
authNameFromAlias, codeFromAlias);
if (!officialName.empty()) {
name = officialName;
@@ -1708,7 +1708,7 @@ UnitOfMeasure WKTParser::Private::buildUnit(const WKTNodeNNPtr &node,
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto officialName = authFactory->getOfficialNameFromAlias(
- unitName, "unit_of_measure", "ESRI", outTableName,
+ unitName, "unit_of_measure", "ESRI", false, outTableName,
authNameFromAlias, codeFromAlias);
if (!officialName.empty()) {
unitName = officialName;
@@ -1918,7 +1918,7 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto officialName = authFactory->getOfficialNameFromAlias(
- name, tableNameForAlias, "ESRI", outTableName,
+ name, tableNameForAlias, "ESRI", false, outTableName,
authNameFromAlias, codeFromAlias);
if (!officialName.empty()) {
if (primeMeridian->nameStr() !=
@@ -1951,10 +1951,12 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
auto res = authFactory->createObjectsFromName(
name, {AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME},
true, 1);
+ bool foundDatumName = false;
if (!res.empty()) {
const auto &refDatum = res.front();
if (metadata::Identifier::isEquivalentName(
name.c_str(), refDatum->nameStr().c_str())) {
+ foundDatumName = true;
properties.set(IdentifiedObject::NAME_KEY,
refDatum->nameStr());
if (properties.find(Identifier::CODESPACE_KEY) ==
@@ -1972,6 +1974,34 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
identifiers);
}
}
+ } else {
+ // Get official name from database if AUTHORITY is present
+ auto &idNode = nodeP->lookForChild(WKTConstants::AUTHORITY);
+ if (!isNull(idNode)) {
+ try {
+ auto id = buildId(idNode);
+ auto authFactory2 = AuthorityFactory::create(
+ NN_NO_CHECK(dbContext_), *id->codeSpace());
+ auto dbDatum =
+ authFactory2->createGeodeticDatum(id->code());
+ foundDatumName = true;
+ properties.set(IdentifiedObject::NAME_KEY,
+ dbDatum->nameStr());
+ } catch (const std::exception &) {
+ }
+ }
+ }
+
+ if (!foundDatumName) {
+ std::string outTableName;
+ std::string authNameFromAlias;
+ std::string codeFromAlias;
+ auto officialName = authFactory->getOfficialNameFromAlias(
+ name, "geodetic_datum", std::string(), true, outTableName,
+ authNameFromAlias, codeFromAlias);
+ if (!officialName.empty()) {
+ properties.set(IdentifiedObject::NAME_KEY, officialName);
+ }
}
}
}
@@ -3371,7 +3401,7 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
std::string());
auto officialName = authFactory->getOfficialNameFromAlias(
- projCRSName, "projected_crs", "ESRI", outTableName,
+ projCRSName, "projected_crs", "ESRI", false, outTableName,
authNameFromAlias, codeFromAlias);
if (!officialName.empty()) {
props.set(IdentifiedObject::NAME_KEY, officialName);
diff --git a/src/metadata.cpp b/src/metadata.cpp
index 033782c9..af8dc1fe 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -1106,6 +1106,40 @@ static bool isIgnoredChar(char ch) {
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
+static const struct utf8_to_lower {
+ const char *utf8;
+ char ascii;
+} map_utf8_to_lower[] = {
+ {"\xc3\xa1", 'a'}, // a acute
+ {"\xc3\xa4", 'a'}, // a tremma
+
+ {"\xc4\x9b", 'e'}, // e reverse circumflex
+ {"\xc3\xa8", 'e'}, // e grave
+ {"\xc3\xa9", 'e'}, // e acute
+ {"\xc3\xab", 'e'}, // e tremma
+
+ {"\xc3\xad", 'i'}, // i grave
+
+ {"\xc3\xb4", 'o'}, // o circumflex
+ {"\xc3\xb6", 'o'}, // o tremma
+
+ {"\xc3\xa7", 'c'}, // c cedilla
+};
+
+static const struct utf8_to_lower *get_ascii_replacement(const char *c_str) {
+ for (const auto &pair : map_utf8_to_lower) {
+ if (*c_str == pair.utf8[0] &&
+ strncmp(c_str, pair.utf8, strlen(pair.utf8)) == 0) {
+ return &pair;
+ }
+ }
+ return nullptr;
+}
+//! @endcond
+
+// ---------------------------------------------------------------------------
+
+//! @cond Doxygen_Suppress
std::string Identifier::canonicalizeName(const std::string &str) {
std::string res;
const char *c_str = str.c_str();
@@ -1121,6 +1155,14 @@ std::string Identifier::canonicalizeName(const std::string &str) {
++i;
continue;
}
+ if (static_cast<unsigned char>(ch) > 127) {
+ const auto *replacement = get_ascii_replacement(c_str + i);
+ if (replacement) {
+ res.push_back(replacement->ascii);
+ i += strlen(replacement->utf8) - 1;
+ continue;
+ }
+ }
if (!isIgnoredChar(ch)) {
res.push_back(static_cast<char>(::tolower(ch)));
}
@@ -1142,8 +1184,8 @@ bool Identifier::isEquivalentName(const char *a, const char *b) noexcept {
char lastValidA = 0;
char lastValidB = 0;
while (a[i] != 0 && b[j] != 0) {
- const char aCh = a[i];
- const char bCh = b[j];
+ char aCh = a[i];
+ char bCh = b[j];
if (aCh == ' ' && a[i + 1] == '+' && a[i + 2] == ' ') {
i += 3;
continue;
@@ -1172,6 +1214,20 @@ bool Identifier::isEquivalentName(const char *a, const char *b) noexcept {
lastValidB = '9';
continue;
}
+ if (static_cast<unsigned char>(aCh) > 127) {
+ const auto *replacement = get_ascii_replacement(a + i);
+ if (replacement) {
+ aCh = replacement->ascii;
+ i += strlen(replacement->utf8) - 1;
+ }
+ }
+ if (static_cast<unsigned char>(bCh) > 127) {
+ const auto *replacement = get_ascii_replacement(b + j);
+ if (replacement) {
+ bCh = replacement->ascii;
+ j += strlen(replacement->utf8) - 1;
+ }
+ }
if (::tolower(aCh) != ::tolower(bCh)) {
return false;
}
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 7db38601..f0480ebe 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -1604,6 +1604,27 @@ TEST_F(CApi, proj_obj_create_geographic_crs) {
EXPECT_TRUE(proj_obj_is_equivalent_to(obj, objRef, PJ_COMP_EQUIVALENT));
}
+
+ // Datum with GDAL_WKT1 spelling: database query in alias_name table
+ {
+ auto crs = proj_obj_create_geographic_crs(
+ m_ctxt, "S-JTSK (Ferro)",
+ "System_Jednotne_Trigonometricke_Site_Katastralni_Ferro",
+ "Bessel 1841", 6377397.155, 299.1528128, "Ferro",
+ -17.66666666666667, "Degree", 0.0174532925199433, cs);
+ ObjectKeeper keeper(crs);
+ ASSERT_NE(crs, nullptr);
+
+ auto datum = proj_obj_crs_get_datum(m_ctxt, crs);
+ ASSERT_NE(datum, nullptr);
+ ObjectKeeper keeper_datum(datum);
+
+ auto datum_name = proj_obj_get_name(datum);
+ ASSERT_TRUE(datum_name != nullptr);
+ EXPECT_EQ(datum_name,
+ std::string("System of the Unified Trigonometrical Cadastral "
+ "Network (Ferro)"));
+ }
}
// ---------------------------------------------------------------------------
diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp
index c30111ce..d3976688 100644
--- a/test/unit/test_factory.cpp
+++ b/test/unit/test_factory.cpp
@@ -2522,7 +2522,7 @@ TEST(factory, getOfficialNameFromAlias) {
{
auto officialName = factory->getOfficialNameFromAlias(
- "GCS_WGS_1984", std::string(), std::string(), outTableName,
+ "GCS_WGS_1984", std::string(), std::string(), false, outTableName,
outAuthName, outCode);
EXPECT_EQ(officialName, "WGS 84");
EXPECT_EQ(outTableName, "geodetic_crs");
@@ -2532,8 +2532,8 @@ TEST(factory, getOfficialNameFromAlias) {
{
auto officialName = factory->getOfficialNameFromAlias(
- "GCS_WGS_1984", "geodetic_crs", "ESRI", outTableName, outAuthName,
- outCode);
+ "GCS_WGS_1984", "geodetic_crs", "ESRI", false, outTableName,
+ outAuthName, outCode);
EXPECT_EQ(officialName, "WGS 84");
EXPECT_EQ(outTableName, "geodetic_crs");
EXPECT_EQ(outAuthName, "EPSG");
@@ -2542,10 +2542,20 @@ TEST(factory, getOfficialNameFromAlias) {
{
auto officialName = factory->getOfficialNameFromAlias(
- "no match", std::string(), std::string(), outTableName, outAuthName,
- outCode);
+ "no match", std::string(), std::string(), false, outTableName,
+ outAuthName, outCode);
EXPECT_EQ(officialName, "");
}
+
+ {
+ auto officialName = factory->getOfficialNameFromAlias(
+ "System_Jednotne_Trigonometricke_Site_Katastralni_Ferro",
+ "geodetic_datum", std::string(), true, outTableName, outAuthName,
+ outCode);
+ EXPECT_EQ(
+ officialName,
+ "System of the Unified Trigonometrical Cadastral Network (Ferro)");
+ }
}
// ---------------------------------------------------------------------------
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index 606d57a3..243add6f 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -460,6 +460,59 @@ TEST(wkt_parse, wkt1_EPSG_4807_grad_mess) {
// ---------------------------------------------------------------------------
+TEST(wkt_parse, wkt1_geographic_old_datum_name_from_EPSG_code) {
+ auto wkt =
+ "GEOGCS[\"S-JTSK (Ferro)\",\n"
+ " "
+ "DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro\",\n"
+ " SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,\n"
+ " AUTHORITY[\"EPSG\",\"7004\"]],\n"
+ " AUTHORITY[\"EPSG\",\"6818\"]],\n"
+ " PRIMEM[\"Ferro\",-17.66666666666667,\n"
+ " AUTHORITY[\"EPSG\",\"8909\"]],\n"
+ " UNIT[\"degree\",0.0174532925199433,\n"
+ " AUTHORITY[\"EPSG\",\"9122\"]],\n"
+ " AUTHORITY[\"EPSG\",\"4818\"]]";
+ auto obj = WKTParser()
+ .attachDatabaseContext(DatabaseContext::create())
+ .createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ auto datum = crs->datum();
+ EXPECT_EQ(
+ datum->nameStr(),
+ "System of the Unified Trigonometrical Cadastral Network (Ferro)");
+}
+
+// ---------------------------------------------------------------------------
+
+TEST(wkt_parse, wkt1_geographic_old_datum_name_witout_EPSG_code) {
+ auto wkt =
+ "GEOGCS[\"S-JTSK (Ferro)\",\n"
+ " "
+ "DATUM[\"System_Jednotne_Trigonometricke_Site_Katastralni_Ferro\",\n"
+ " SPHEROID[\"Bessel 1841\",6377397.155,299.1528128,\n"
+ " AUTHORITY[\"EPSG\",\"7004\"]]],\n"
+ " PRIMEM[\"Ferro\",-17.66666666666667,\n"
+ " AUTHORITY[\"EPSG\",\"8909\"]],\n"
+ " UNIT[\"degree\",0.0174532925199433,\n"
+ " AUTHORITY[\"EPSG\",\"9122\"]],\n"
+ " AUTHORITY[\"EPSG\",\"4818\"]]";
+ auto obj = WKTParser()
+ .attachDatabaseContext(DatabaseContext::create())
+ .createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ auto datum = crs->datum();
+ EXPECT_EQ(
+ datum->nameStr(),
+ "System of the Unified Trigonometrical Cadastral Network (Ferro)");
+}
+
+// ---------------------------------------------------------------------------
+
static std::string contentWKT2_EPSG_4326(
"[\"WGS 84\",\n"
" DATUM[\"World Geodetic System 1984\",\n"
diff --git a/test/unit/test_metadata.cpp b/test/unit/test_metadata.cpp
index 96b8cbff..137e8e42 100644
--- a/test/unit/test_metadata.cpp
+++ b/test/unit/test_metadata.cpp
@@ -385,4 +385,10 @@ TEST(metadata, id) {
TEST(metadata, Identifier_isEquivalentName) {
EXPECT_TRUE(Identifier::isEquivalentName("Central_Meridian",
"Central_- ()/Meridian"));
+
+ EXPECT_TRUE(Identifier::isEquivalentName("\xc3\xa1", "a"));
+
+ EXPECT_TRUE(Identifier::isEquivalentName("a", "\xc3\xa1"));
+
+ EXPECT_TRUE(Identifier::isEquivalentName("\xc3\xa4", "\xc3\xa1"));
}