aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/Makefile.am1
-rw-r--r--data/sql/deprecation.sql456
-rw-r--r--data/sql/proj_db_table_defs.sql24
-rw-r--r--data/sql_filelist.cmake1
-rw-r--r--include/proj/crs.hpp3
-rw-r--r--include/proj/io.hpp4
-rwxr-xr-xscripts/build_db.py19
-rw-r--r--src/c_api.cpp30
-rw-r--r--src/crs.cpp34
-rw-r--r--src/factory.cpp32
-rw-r--r--src/proj.h3
-rw-r--r--test/unit/test_c_api.cpp14
-rw-r--r--test/unit/test_crs.cpp55
13 files changed, 675 insertions, 1 deletions
diff --git a/data/Makefile.am b/data/Makefile.am
index a85047c6..fe5ad532 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -28,6 +28,7 @@ SQL_ORDERED_LIST = sql/begin.sql \
sql/concatenated_operation.sql \
sql/alias_name.sql \
sql/supersession.sql \
+ sql/deprecation.sql \
sql/esri.sql \
sql/ignf.sql \
sql/grid_alternatives.sql \
diff --git a/data/sql/deprecation.sql b/data/sql/deprecation.sql
new file mode 100644
index 00000000..4ea3e558
--- /dev/null
+++ b/data/sql/deprecation.sql
@@ -0,0 +1,456 @@
+--- This file has been generated by scripts/build_db.py. DO NOT EDIT !
+
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2156','EPSG','2195','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2291','EPSG','2292','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4035','EPSG','4047','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4226','EPSG','4142','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31462','EPSG','31466','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31463','EPSG','31467','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31464','EPSG','31468','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31465','EPSG','31469','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31265','EPSG','31275','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31266','EPSG','31276','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31267','EPSG','31277','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31268','EPSG','31278','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31278','EPSG','31279','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31291','EPSG','31281','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31292','EPSG','31282','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31293','EPSG','31283','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31294','EPSG','31284','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31295','EPSG','31285','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31296','EPSG','31286','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31297','EPSG','31287','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29900','EPSG','29902','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2155','EPSG','2194','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4226','EPSG','4143','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4172','EPSG','4190','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27581','EPSG','27571','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27582','EPSG','27572','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27583','EPSG','27573','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27584','EPSG','27574','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27591','EPSG','27561','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27592','EPSG','27562','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27593','EPSG','27563','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27594','EPSG','27564','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7401','EPSG','7411','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7402','EPSG','7412','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7403','EPSG','7413','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32036','EPSG','2204','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26979','EPSG','2205','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4228','EPSG','4192','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4260','EPSG','4193','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','22832','EPSG','2214','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4287','EPSG','4194','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32074','EPSG','32064','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32075','EPSG','32065','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32076','EPSG','32066','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32077','EPSG','32067','EPSG');
+INSERT INTO "deprecation" VALUES('vertical_crs','EPSG','5704','EPSG','5736','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21473','EPSG','21453','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21474','EPSG','21454','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21475','EPSG','21455','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21476','EPSG','21456','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21477','EPSG','21457','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21478','EPSG','21458','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21479','EPSG','21459','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21480','EPSG','21460','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21481','EPSG','21461','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21482','EPSG','21462','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21483','EPSG','21463','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2199','EPSG','2462','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2166','EPSG','2397','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2167','EPSG','2398','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2168','EPSG','2399','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2091','EPSG','2395','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2092','EPSG','2396','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20092','EPSG','2491','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20091','EPSG','2490','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20090','EPSG','2489','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20089','EPSG','2488','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20088','EPSG','2487','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20087','EPSG','2486','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20086','EPSG','2485','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20085','EPSG','2484','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20084','EPSG','2483','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20083','EPSG','2482','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20082','EPSG','2481','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20081','EPSG','2480','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20080','EPSG','2479','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20079','EPSG','2478','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20078','EPSG','2477','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20077','EPSG','2476','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20076','EPSG','2475','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20075','EPSG','2474','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20074','EPSG','2473','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20073','EPSG','2472','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20072','EPSG','2471','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20071','EPSG','2470','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20070','EPSG','2469','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20069','EPSG','2468','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20068','EPSG','2467','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20067','EPSG','2466','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20066','EPSG','2465','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20065','EPSG','2464','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','20064','EPSG','2463','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28462','EPSG','2492','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28463','EPSG','2493','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28464','EPSG','2494','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28465','EPSG','2495','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28466','EPSG','2496','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28467','EPSG','2497','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28468','EPSG','2498','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28469','EPSG','2499','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28470','EPSG','2500','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28471','EPSG','2501','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28472','EPSG','2502','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28473','EPSG','2503','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28474','EPSG','2504','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28475','EPSG','2505','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28476','EPSG','2506','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28477','EPSG','2507','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28478','EPSG','2508','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28479','EPSG','2509','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28480','EPSG','2510','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28481','EPSG','2511','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28482','EPSG','2512','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28483','EPSG','2513','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28484','EPSG','2514','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28485','EPSG','2515','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28486','EPSG','2516','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28487','EPSG','2517','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28488','EPSG','2518','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28489','EPSG','2519','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28490','EPSG','2520','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28491','EPSG','2521','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28492','EPSG','2522','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4294','EPSG','4613','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4125','EPSG','4613','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2550','EPSG','2933','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4185','EPSG','4615','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4185','EPSG','4616','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2191','EPSG','2942','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2191','EPSG','2943','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4140','EPSG','4617','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2147','EPSG','2952','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2140','EPSG','2945','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2141','EPSG','2946','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2142','EPSG','2947','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2143','EPSG','2948','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2144','EPSG','2949','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2145','EPSG','2950','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2146','EPSG','2951','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2036','EPSG','2953','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2292','EPSG','2954','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2139','EPSG','2944','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2153','EPSG','2955','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2152','EPSG','2956','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2151','EPSG','2957','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2150','EPSG','2958','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2149','EPSG','2959','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2037','EPSG','2960','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2038','EPSG','2961','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2148','EPSG','2962','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4234','EPSG','4197','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','23433','EPSG','2312','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4291','EPSG','4618','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29100','EPSG','29101','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29177','EPSG','29187','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29118','EPSG','29168','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29185','EPSG','29195','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29184','EPSG','29194','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29183','EPSG','29193','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29182','EPSG','29192','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29181','EPSG','29191','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29180','EPSG','29190','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29179','EPSG','29189','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29178','EPSG','29188','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29122','EPSG','29172','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29121','EPSG','29171','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29120','EPSG','29170','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29119','EPSG','29169','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26193','EPSG','26194','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2245','EPSG','2966','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2244','EPSG','2965','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2889','EPSG','2967','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2890','EPSG','2968','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4327','EPSG','4329','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4235','EPSG','4623','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21100','EPSG','3001','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','25700','EPSG','3002','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2934','EPSG','3000','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26591','EPSG','3003','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26592','EPSG','3004','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29635','EPSG','20135','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29636','EPSG','20136','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4296','EPSG','4201','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2400','EPSG','3021','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','30800','EPSG','3027','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4634','EPSG','4662','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2982','EPSG','3060','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4340','EPSG','4930','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4344','EPSG','4932','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4342','EPSG','4934','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4346','EPSG','4936','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4348','EPSG','4938','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4350','EPSG','4940','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4352','EPSG','4942','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4387','EPSG','4944','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4385','EPSG','4919','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4330','EPSG','4910','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4331','EPSG','4911','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4332','EPSG','4912','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4333','EPSG','4913','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4334','EPSG','4914','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4335','EPSG','4915','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4336','EPSG','4916','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4337','EPSG','4917','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4338','EPSG','4918','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4354','EPSG','4946','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4389','EPSG','4948','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4356','EPSG','4950','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4358','EPSG','4952','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4360','EPSG','4954','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4362','EPSG','4956','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4364','EPSG','4958','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4366','EPSG','4960','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4368','EPSG','4962','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4370','EPSG','4964','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4372','EPSG','4966','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4382','EPSG','4968','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4374','EPSG','4970','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4384','EPSG','4972','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4376','EPSG','4974','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4378','EPSG','4976','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4328','EPSG','4978','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4380','EPSG','4980','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4388','EPSG','4949','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4386','EPSG','4945','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4383','EPSG','4973','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4381','EPSG','4969','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4379','EPSG','4981','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4377','EPSG','4977','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4375','EPSG','4975','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4373','EPSG','4971','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4371','EPSG','4967','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4369','EPSG','4965','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4367','EPSG','4963','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4365','EPSG','4961','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4363','EPSG','4959','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4361','EPSG','4957','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4359','EPSG','4955','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4357','EPSG','4953','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4355','EPSG','4951','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4353','EPSG','4947','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4351','EPSG','4943','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4349','EPSG','4941','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4347','EPSG','4939','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4345','EPSG','4937','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4343','EPSG','4933','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4341','EPSG','4935','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4339','EPSG','4931','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4329','EPSG','4979','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4126','EPSG','4669','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4819','EPSG','4307','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31900','EPSG','31901','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2194','EPSG','3102','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4233','EPSG','4684','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4233','EPSG','4685','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21891','EPSG','21896','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21892','EPSG','21897','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21893','EPSG','21898','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','21894','EPSG','21899','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2214','EPSG','3119','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26747','EPSG','26799','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4172','EPSG','4694','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4685','EPSG','4696','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2171','EPSG','3120','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2979','EPSG','3336','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4631','EPSG','4698','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2600','EPSG','3346','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26432','EPSG','3353','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26432','EPSG','3354','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4264','EPSG','4704','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4264','EPSG','4705','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7408','EPSG','7415','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4681','EPSG','4700','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4681','EPSG','4702','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3103','EPSG','3343','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3103','EPSG','3367','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3104','EPSG','3344','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3104','EPSG','3368','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3105','EPSG','3345','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3105','EPSG','3369','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5532','EPSG','5858','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2577','EPSG','3389','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2694','EPSG','3390','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3785','EPSG','3857','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4968','EPSG','4906','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4645','EPSG','4749','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4969','EPSG','4907','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2984','EPSG','3163','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4635','EPSG','4750','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2983','EPSG','3164','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','24571','EPSG','3167','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','24571','EPSG','3168','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4731','EPSG','4752','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3359','EPSG','3404','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3366','EPSG','3407','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29700','EPSG','29701','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','29700','EPSG','29702','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3143','EPSG','3460','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2063','EPSG','3461','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2064','EPSG','3462','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3073','EPSG','3463','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3076','EPSG','3464','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2990','EPSG','3727','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4902','EPSG','4901','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7412','EPSG','7421','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','7413','EPSG','7422','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27492','EPSG','27493','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32662','EPSG','32663','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32662','EPSG','3786','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2086','EPSG','3796','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2085','EPSG','3795','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26814','EPSG','26847','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26815','EPSG','26848','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26825','EPSG','26855','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26826','EPSG','26856','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26836','EPSG','26863','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26837','EPSG','26864','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26819','EPSG','26849','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26820','EPSG','26850','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26821','EPSG','26851','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26830','EPSG','26857','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26831','EPSG','26858','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26832','EPSG','26859','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26841','EPSG','26865','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26842','EPSG','26866','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26843','EPSG','26867','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26822','EPSG','26852','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26833','EPSG','26860','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26844','EPSG','26868','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26823','EPSG','26853','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26824','EPSG','26854','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26834','EPSG','26861','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26835','EPSG','26862','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26845','EPSG','26869','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26846','EPSG','26870','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3774','EPSG','3800','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3778','EPSG','3801','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3782','EPSG','3802','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3349','EPSG','3832','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3752','EPSG','3994','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28403','EPSG','3333','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','28402','EPSG','3833','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31700','EPSG','3844','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4317','EPSG','4179','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31275','EPSG','3907','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31276','EPSG','3908','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31277','EPSG','3909','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','31279','EPSG','3910','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3787','EPSG','3912','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2170','EPSG','3911','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3314','EPSG','3985','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3989','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3988','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3987','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3315','EPSG','3986','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32663','EPSG','4087','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3786','EPSG','4088','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3985','EPSG','4415','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3842','EPSG','4417','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3843','EPSG','4434','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32029','EPSG','4455','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32018','EPSG','4456','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3454','EPSG','4457','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4972','EPSG','4556','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4973','EPSG','4557','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4640','EPSG','4558','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2989','EPSG','4559','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4868','EPSG','5118','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4869','EPSG','5119','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4870','EPSG','5120','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4861','EPSG','5111','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4860','EPSG','5110','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4871','EPSG','5121','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4872','EPSG','5122','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4873','EPSG','5123','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4855','EPSG','5105','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4856','EPSG','5106','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4857','EPSG','5107','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4858','EPSG','5108','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4859','EPSG','5109','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4862','EPSG','5112','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4863','EPSG','5113','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4864','EPSG','5114','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4865','EPSG','5115','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4866','EPSG','5116','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4867','EPSG','5117','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4874','EPSG','5124','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4875','EPSG','5125','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4876','EPSG','5126','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4877','EPSG','5127','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4878','EPSG','5128','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4879','EPSG','5129','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4880','EPSG','5130','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32061','EPSG','5458','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','32062','EPSG','5459','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5466','EPSG','5589','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5458','EPSG','5559','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26801','EPSG','5623','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26802','EPSG','5624','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26803','EPSG','5625','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','2192','EPSG','2154','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5388','EPSG','5839','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','4474','EPSG','5879','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3356','EPSG','6128','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3357','EPSG','6129','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26811','EPSG','6200','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26812','EPSG','6201','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','26813','EPSG','6202','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','4268','EPSG','4267','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5570','EPSG','6381','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5577','EPSG','6381','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5571','EPSG','6382','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5578','EPSG','6382','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5579','EPSG','6383','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5572','EPSG','6383','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5573','EPSG','6384','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5580','EPSG','6384','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5574','EPSG','6385','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5581','EPSG','6385','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5575','EPSG','6386','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5582','EPSG','6386','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5576','EPSG','6387','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','5583','EPSG','6387','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6141','EPSG','6391','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6604','EPSG','6879','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6517','EPSG','6880','EPSG');
+INSERT INTO "deprecation" VALUES('compound_crs','EPSG','6871','EPSG','6893','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3975','EPSG','6933','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3973','EPSG','6931','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3974','EPSG','6932','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6200','EPSG','6966','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','7088','EPSG','7133','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6996','EPSG','7131','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6997','EPSG','7132','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27037','EPSG','7005','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3907','EPSG','8677','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6978','EPSG','7134','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6980','EPSG','7136','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6979','EPSG','7135','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6985','EPSG','7137','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6986','EPSG','7138','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','6987','EPSG','7139','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3908','EPSG','8678','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3909','EPSG','6316','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','27038','EPSG','7006','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6956','EPSG','5896','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6957','EPSG','5897','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6958','EPSG','5898','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','6959','EPSG','5899','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3910','EPSG','8679','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7082','EPSG','8456','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','7082','EPSG','8455','EPSG');
+INSERT INTO "deprecation" VALUES('projected_crs','EPSG','3911','EPSG','8686','EPSG');
+INSERT INTO "deprecation" VALUES('geodetic_crs','EPSG','8449','EPSG','8860','EPSG');
diff --git a/data/sql/proj_db_table_defs.sql b/data/sql/proj_db_table_defs.sql
index c63637cf..d403f0eb 100644
--- a/data/sql/proj_db_table_defs.sql
+++ b/data/sql/proj_db_table_defs.sql
@@ -946,6 +946,30 @@ FOR EACH ROW BEGIN
END;
+CREATE TABLE deprecation(
+ table_name TEXT NOT NULL CHECK (table_name IN (
+ 'unit_of_measure', 'celestial_body', 'ellipsoid',
+ 'area', 'prime_meridian', 'geodetic_datum', 'vertical_datum', 'geodetic_crs',
+ 'projected_crs', 'vertical_crs', 'compound_crs', 'conversion', 'grid_transformation',
+ 'helmert_transformation', 'other_transformation', 'concatenated_operation')),
+ deprecated_auth_name TEXT NOT NULL,
+ deprecated_code TEXT NOT NULL,
+ replacement_auth_name TEXT NOT NULL,
+ replacement_code TEXT NOT NULL,
+ source TEXT
+);
+
+CREATE TRIGGER deprecation_insert_trigger
+BEFORE INSERT ON deprecation
+FOR EACH ROW BEGIN
+ SELECT RAISE(ABORT, 'insert on deprecation violates constraint: deprecated entry refers to unexisting code')
+ WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.deprecated_auth_name AND o.code = NEW.deprecated_code);
+
+ SELECT RAISE(ABORT, 'insert on deprecation violates constraint: replacement entry refers to unexisting code')
+ WHERE NOT EXISTS (SELECT 1 FROM object_view o WHERE o.table_name = NEW.table_name AND o.auth_name = NEW.replacement_auth_name AND o.code = NEW.replacement_code);
+END;
+
+
CREATE VIEW coordinate_operation_view AS
SELECT 'grid_transformation' AS table_name, auth_name, code, name,
diff --git a/data/sql_filelist.cmake b/data/sql_filelist.cmake
index 09e45716..b9054d23 100644
--- a/data/sql_filelist.cmake
+++ b/data/sql_filelist.cmake
@@ -23,6 +23,7 @@ set(SQL_FILES "${SQL_DIR}/begin.sql"
"${SQL_DIR}/concatenated_operation.sql"
"${SQL_DIR}/alias_name.sql"
"${SQL_DIR}/supersession.sql"
+ "${SQL_DIR}/deprecation.sql"
"${SQL_DIR}/esri.sql"
"${SQL_DIR}/ignf.sql"
"${SQL_DIR}/grid_alternatives.sql"
diff --git a/include/proj/crs.hpp b/include/proj/crs.hpp
index bdb36cd4..10d1f07e 100644
--- a/include/proj/crs.hpp
+++ b/include/proj/crs.hpp
@@ -101,6 +101,9 @@ class PROJ_GCC_DLL CRS : public common::ObjectUsage {
PROJ_DLL std::list<std::pair<CRSNNPtr, int>>
identify(const io::AuthorityFactoryPtr &authorityFactory) const;
+ PROJ_DLL std::list<CRSNNPtr>
+ getNonDeprecated(const io::DatabaseContextNNPtr &dbContext) const;
+
PROJ_PRIVATE :
//! @cond Doxygen_Suppress
PROJ_INTERNAL const GeodeticCRS *
diff --git a/include/proj/io.hpp b/include/proj/io.hpp
index f511bf5b..ee024a72 100644
--- a/include/proj/io.hpp
+++ b/include/proj/io.hpp
@@ -736,6 +736,10 @@ class PROJ_GCC_DLL DatabaseContext {
getAllowedAuthorities(const std::string &sourceAuthName,
const std::string &targetAuthName) const;
+ PROJ_INTERNAL std::list<std::pair<std::string, std::string>>
+ getNonDeprecated(const std::string &tableName, const std::string &authName,
+ const std::string &code) const;
+
//! @endcond
protected:
diff --git a/scripts/build_db.py b/scripts/build_db.py
index 46bef8c8..4f09a659 100755
--- a/scripts/build_db.py
+++ b/scripts/build_db.py
@@ -520,7 +520,7 @@ def fill_alias(proj_db_cursor):
def find_table(proj_db_cursor, code):
- for table_name in ('helmert_transformation', 'grid_transformation', 'concatenated_operation'):
+ for table_name in ('helmert_transformation', 'grid_transformation', 'concatenated_operation', 'geodetic_crs', 'projected_crs', 'vertical_crs', 'compound_crs'):
proj_db_cursor.execute('SELECT name FROM %s WHERE code = ?' % table_name, (code,))
row = proj_db_cursor.fetchone()
if row is not None:
@@ -545,6 +545,22 @@ def fill_supersession(proj_db_cursor):
continue
proj_db_cursor.execute("INSERT INTO supersession VALUES (?,'EPSG',?,?,'EPSG',?,'EPSG')", (superseded_table_name, code, replacement_table_name, superseded_by))
+def fill_deprecation(proj_db_cursor):
+ proj_db_cursor.execute("SELECT object_code, replaced_by FROM epsg.epsg_deprecation WHERE object_table_name = 'epsg_coordinatereferencesystem' AND object_code != replaced_by")
+ for row in proj_db_cursor.fetchall():
+ code, replaced_by = row
+ proj_db_cursor.execute('SELECT 1 FROM crs_view WHERE code = ?', (code,))
+ if proj_db_cursor.fetchone() is None:
+ print('Skipping deprecation of %d since it has not been imported' % code)
+ continue
+
+ src_name, deprecated_table_name = find_table(proj_db_cursor, code)
+ dst_name, replacement_table_name = find_table(proj_db_cursor, replaced_by)
+ assert deprecated_table_name, row
+ assert replacement_table_name, row
+ assert deprecated_table_name == replacement_table_name
+ proj_db_cursor.execute("INSERT INTO deprecation VALUES (?,'EPSG',?,'EPSG',?,'EPSG')", (deprecated_table_name, code, replaced_by))
+
def report_non_imported_operations(proj_db_cursor):
proj_db_cursor.execute("SELECT coord_op_code, coord_op_type, coord_op_name, coord_op_method_code, coord_op_method_name, source_crs_code, target_crs_code, area_of_use_code, coord_op_accuracy, epsg_coordoperation.deprecated FROM epsg.epsg_coordoperation LEFT JOIN epsg.epsg_coordoperationmethod USING (coord_op_method_code) WHERE coord_op_code NOT IN (SELECT code FROM coordinate_operation_with_conversion_view)")
rows = []
@@ -591,6 +607,7 @@ fill_other_transformation(proj_db_cursor)
fill_concatenated_operation(proj_db_cursor)
fill_alias(proj_db_cursor)
fill_supersession(proj_db_cursor)
+fill_deprecation(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 e1f34012..78ca1c24 100644
--- a/src/c_api.cpp
+++ b/src/c_api.cpp
@@ -791,6 +791,36 @@ int proj_obj_is_deprecated(const PJ_OBJ *obj) {
// ---------------------------------------------------------------------------
+/** \brief Return a list of non-deprecated objects related to the passed one
+ *
+ * @param ctx Context, or NULL for default context.
+ * @param obj Object (of type CRS for now) for which non-deprecated objects
+ * must be searched. Must not be NULL
+ * @return a result set that must be unreferenced with
+ * proj_obj_list_unref(), or NULL in case of error.
+ */
+PJ_OBJ_LIST *proj_obj_get_non_deprecated(PJ_CONTEXT *ctx, const PJ_OBJ *obj) {
+ assert(obj);
+ SANITIZE_CTX(ctx);
+ auto crs = dynamic_cast<const CRS *>(obj->obj.get());
+ if (!crs) {
+ return nullptr;
+ }
+ try {
+ std::vector<IdentifiedObjectNNPtr> objects;
+ auto res = crs->getNonDeprecated(getDBcontext(ctx));
+ for (const auto &resObj : res) {
+ objects.push_back(resObj);
+ }
+ return new PJ_OBJ_LIST(std::move(objects));
+ } catch (const std::exception &e) {
+ proj_log_error(ctx, __FUNCTION__, e.what());
+ }
+ return nullptr;
+}
+
+// ---------------------------------------------------------------------------
+
/** \brief Return whether two objects are equivalent.
*
* @param obj Object (must not be NULL)
diff --git a/src/crs.cpp b/src/crs.cpp
index 6212f561..81e9a300 100644
--- a/src/crs.cpp
+++ b/src/crs.cpp
@@ -603,6 +603,40 @@ CRS::identify(const io::AuthorityFactoryPtr &authorityFactory) const {
// ---------------------------------------------------------------------------
+/** \brief Return CRSs that are non-deprecated substitutes for the current CRS.
+ */
+std::list<CRSNNPtr>
+CRS::getNonDeprecated(const io::DatabaseContextNNPtr &dbContext) const {
+ std::list<CRSNNPtr> res;
+ const auto &l_identifiers = identifiers();
+ if (l_identifiers.empty()) {
+ return res;
+ }
+ const char *tableName = nullptr;
+ if (dynamic_cast<const GeodeticCRS *>(this)) {
+ tableName = "geodetic_crs";
+ } else if (dynamic_cast<const ProjectedCRS *>(this)) {
+ tableName = "projected_crs";
+ } else if (dynamic_cast<const VerticalCRS *>(this)) {
+ tableName = "vertical_crs";
+ } else if (dynamic_cast<const CompoundCRS *>(this)) {
+ tableName = "compound_crs";
+ }
+ if (!tableName) {
+ return res;
+ }
+ const auto &id = l_identifiers[0];
+ auto tmpRes =
+ dbContext->getNonDeprecated(tableName, *(id->codeSpace()), id->code());
+ for (const auto &pair : tmpRes) {
+ res.emplace_back(io::AuthorityFactory::create(dbContext, pair.first)
+ ->createCoordinateReferenceSystem(pair.second));
+ }
+ return res;
+}
+
+// ---------------------------------------------------------------------------
+
//! @cond Doxygen_Suppress
std::list<std::pair<CRSNNPtr, int>>
diff --git a/src/factory.cpp b/src/factory.cpp
index 20701def..d56fb7b6 100644
--- a/src/factory.cpp
+++ b/src/factory.cpp
@@ -918,6 +918,38 @@ std::vector<std::string> DatabaseContext::getAllowedAuthorities(
return split(res[0][0], ',');
}
+// ---------------------------------------------------------------------------
+
+std::list<std::pair<std::string, std::string>>
+DatabaseContext::getNonDeprecated(const std::string &tableName,
+ const std::string &authName,
+ const std::string &code) const {
+ auto sqlRes =
+ d->run("SELECT replacement_auth_name, replacement_code, source "
+ "FROM deprecation "
+ "WHERE table_name = ? AND deprecated_auth_name = ? "
+ "AND deprecated_code = ?",
+ {tableName, authName, code});
+ std::list<std::pair<std::string, std::string>> res;
+ for (const auto &row : sqlRes) {
+ const auto &source = row[2];
+ if (source == "PROJ") {
+ const auto &replacement_auth_name = row[0];
+ const auto &replacement_code = row[1];
+ res.emplace_back(replacement_auth_name, replacement_code);
+ }
+ }
+ if (!res.empty()) {
+ return res;
+ }
+ for (const auto &row : sqlRes) {
+ const auto &replacement_auth_name = row[0];
+ const auto &replacement_code = row[1];
+ res.emplace_back(replacement_auth_name, replacement_code);
+ }
+ return res;
+}
+
//! @endcond
// ---------------------------------------------------------------------------
diff --git a/src/proj.h b/src/proj.h
index c41a2770..cce371d4 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -572,6 +572,9 @@ PJ_OBJ_TYPE PROJ_DLL proj_obj_get_type(const PJ_OBJ *obj);
int PROJ_DLL proj_obj_is_deprecated(const PJ_OBJ *obj);
+PJ_OBJ_LIST PROJ_DLL *proj_obj_get_non_deprecated(PJ_CONTEXT *ctx,
+ const PJ_OBJ *obj);
+
/** Comparison criterion. */
typedef enum
{
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 20f4180b..b119d914 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -2552,4 +2552,18 @@ TEST_F(CApi, proj_obj_convert_conversion_to_other_method) {
}
}
+// ---------------------------------------------------------------------------
+
+TEST_F(CApi, proj_obj_get_non_deprecated) {
+ auto crs = proj_obj_create_from_database(
+ m_ctxt, "EPSG", "4226", PJ_OBJ_CATEGORY_CRS, false, nullptr);
+ ObjectKeeper keeper(crs);
+ ASSERT_NE(crs, nullptr);
+
+ auto list = proj_obj_get_non_deprecated(m_ctxt, crs);
+ ASSERT_NE(list, nullptr);
+ ObjListKeeper keeper_list(list);
+ EXPECT_EQ(proj_obj_list_get_count(list), 2);
+}
+
} // namespace
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp
index 15708606..7918ab0b 100644
--- a/test/unit/test_crs.cpp
+++ b/test/unit/test_crs.cpp
@@ -5082,3 +5082,58 @@ TEST(crs, alterParametersLinearUnit) {
<< wkt;
}
}
+
+// ---------------------------------------------------------------------------
+
+TEST(crs, getNonDeprecated) {
+ auto dbContext = DatabaseContext::create();
+ auto factory = AuthorityFactory::create(dbContext, "EPSG");
+
+ {
+ // No id
+ auto crs = ProjectedCRS::create(
+ PropertyMap(), GeographicCRS::EPSG_4326,
+ Conversion::createUTM(PropertyMap(), 31, true),
+ CartesianCS::createEastingNorthing(UnitOfMeasure::METRE));
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 0);
+ }
+
+ {
+ // Non-deprecated
+ auto crs = factory->createGeodeticCRS("4326");
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 0);
+ }
+
+ {
+ // Non supported CRS type
+ auto crs = BoundCRS::createFromTOWGS84(
+ createProjected(), std::vector<double>{1, 2, 3, 4, 5, 6, 7});
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 0);
+ }
+
+ {
+ auto crs = factory->createGeodeticCRS("4226");
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 2);
+ }
+
+ {
+ auto crs = factory->createProjectedCRS("26591");
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 1);
+ }
+
+ {
+ auto crs = factory->createVerticalCRS("5704");
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 1);
+ }
+ {
+ auto crs = factory->createCompoundCRS("7401");
+ auto list = crs->getNonDeprecated(dbContext);
+ ASSERT_EQ(list.size(), 1);
+ }
+}