diff options
| -rw-r--r-- | data/Makefile.am | 1 | ||||
| -rw-r--r-- | data/sql/alias_name.sql | 519 | ||||
| -rw-r--r-- | data/sql_filelist.cmake | 1 | ||||
| -rw-r--r-- | include/proj/io.hpp | 5 | ||||
| -rwxr-xr-x | scripts/build_db.py | 14 | ||||
| -rw-r--r-- | src/c_api.cpp | 10 | ||||
| -rw-r--r-- | src/factory.cpp | 100 | ||||
| -rw-r--r-- | src/io.cpp | 38 | ||||
| -rw-r--r-- | src/metadata.cpp | 60 | ||||
| -rw-r--r-- | test/unit/test_c_api.cpp | 21 | ||||
| -rw-r--r-- | test/unit/test_factory.cpp | 20 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 53 | ||||
| -rw-r--r-- | test/unit/test_metadata.cpp | 6 |
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]; } // --------------------------------------------------------------------------- @@ -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")); } |
