source: subversion/applications/utils/import/gml2osm/gml2osm_egmtags.php @ 5763

Last change on this file since 5763 was 3721, checked in by isortega, 13 years ago

Added gml2osm import utility - use it when importing data from GML format.
It's able to reuse nodes/segments, and translates a subset of the EGM data dictionary into OSM map features.

File size: 7.2 KB
Line 
1<?php
2
3
4/// EGM metadata to OSM tags conversion
5/// This script supposes an already defined $tags array, containing elements of the form $tags["$tags_namespace:$key"] = $value.
6/// Those values will be mapped to OSM tags standards as best as it can be done.
7
8
9
10
11// Temp variable to improbe code readability
12$n = $tags_namespace;
13
14
15
16
17
18// Naming is common to all features...
19
20/**
21 * All naming attributes are optional!
22 * NAMN1 = Name of the feature, national primary language
23 * NAMN2 = Name of the feature, secondary primary language
24 * NAMA1, NAMA2 = NAMN1, NAMN2, but ascii-7 encoded (UTF-8 data already in NAMN1 and NAMN2, so this is pretty useless for OSM)
25 * NLN1 = ISO 639-2/B 3 character Language Code for NAMN1
26 * NLN2 = ISO 639-2/B 3 character Language Code for NAMN2
27 *
28 *
29 * Other common attrs:
30 * SCN = Map scale code - At what zoom level should this show up?
31 * NA4 = Data origin (two-character ISO 3166 nation code)
32 *
33 */
34
35if (isset($tags["$n:fcode"]))   // Is this EGM at all?
36{
37       
38        if (isset($tags["$n:namn1"]) &&
39            $tags["$n:namn1"] != 'N_A' &&
40            $tags["$n:namn1"] != 'N/A' &&
41            $tags["$n:namn1"] != 'N_P')
42        {
43                $tags['name'] = $tags["$n:namn1"];
44                $lang = $tags["$n:nln1"];
45                $tags["name:$lang"] = $tags["$n:namn1"];
46        }
47       
48        if (isset($tags["$n:namn1"]) &&
49            $tags["$n:namn2"] != 'N_A' &&
50            $tags["$n:namn2"] != 'N/A' &&
51            $tags["$n:namn2"] != 'N_P')
52        {
53                $lang = $tags["$n:nln2"];
54                $tags["name:$lang"] = $tags["$n:namn2"];
55        }
56       
57       
58       
59        switch($tags["$n:fcode"])
60        {
61                case "FA000":
62                        trigger_error("EGM FA000 (Administrative boundary) metadata conversion is not yet implemented",E_USER_WARNING); break;
63                case "FA001":
64                        trigger_error("EGM FA000 (Administrative area) metadata conversion is not yet implemented",E_USER_WARNING); break;
65                case "BA010":
66                        trigger_error("EGM BA010 (Coastline/shoreline) metadata conversion is not yet implemented",E_USER_WARNING); break;
67                case "BA020":
68                        trigger_error("EGM BA020 (Foreshore) metadata conversion is not yet implemented",E_USER_WARNING); break;
69                case "BA030":
70                        trigger_error("EGM BA030 (Island) metadata conversion is not yet implemented",E_USER_WARNING); break;
71                case "BA040":
72                        trigger_error("EGM BA040 (Water, not inland) metadata conversion is not yet implemented",E_USER_WARNING); break;
73                case "BH080":
74                        trigger_error("EGM BH080 (Lake) metadata conversion is not yet implemented",E_USER_WARNING); break;
75                case "BH130":
76                        trigger_error("EGM BH130 (Reservoir) metadata conversion is not yet implemented",E_USER_WARNING); break;
77                case "BH170":
78                        trigger_error("EGM BH170 (Spring/water hole) metadata conversion is not yet implemented",E_USER_WARNING); break;
79                case "BH502":
80                        trigger_error("EGM BH502 (Watercourse) metadata conversion is not yet implemented",E_USER_WARNING); break;
81                case "BI020":
82                        trigger_error("EGM BI020 (Dam/weir) metadata conversion is not yet implemented",E_USER_WARNING); break;
83                case "BJ030":
84                        trigger_error("EGM BJ030 (Glacier) metadata conversion is not yet implemented",E_USER_WARNING); break;
85                case "BJ100":
86                        trigger_error("EGM BJ100 (Snow field/ice field) metadata conversion is not yet implemented",E_USER_WARNING); break;
87                       
88                       
89                       
90                       
91                case "AN010":   // Railroads
92                        // RSU = Seasonal availability - no OSM tag yet
93                        // FCO = Feature Configuration (number of tracks) - no OSM tag yet
94                        // RRA = Railway power source (electrified or not) - no OSM tag yet
95                        // GAW = Gauge width - no OSM tag yet
96                        // RGC = Railroad Gauge category
97                        if ($tags["$n:rgc"] == 2)
98                                $tags['railway'] = 'narrow_gauge';
99                        else if ($tags["$n:rgc"] == 998)
100                                $tags['railway'] = 'monorail';
101                        else
102                                $tags['railway'] = 'rail';
103                       
104                        // EXS = existence category (OK/abandoned/under construction)
105                        if ($tags["$n:exs"] == 6)
106                                $tags['railway'] = 'abandoned';
107                       
108                        // LOC = Location (bridge/underground)
109                        if ($tags["$n:loc"] == 25)
110                        {
111                                $tags['bridge'] = true;
112                                $tags['layer'] = 1;
113                        }
114                        else if ($tags["$n:loc"] == 40)
115                        {
116                                $tags['tunnel'] = true;
117                                $tags['layer'] = -1;
118                        }
119                        break;
120                       
121                       
122                case "AP030":   // Roads
123                        // RSU = Seasonal availability - no OSM tag yet
124                        // EXS = Existence Category - no OSM tag yet
125                        // MED = Median category - no OSM tag yet
126                       
127                        // RST = Road/runway surface type
128                        if ($tags["$n:rst"] == 1)
129                                $tags['tracktype'] = 'grade1';
130                        else if ($tags["$n:rst"] == 2)
131                                $tags['tracktype'] = 'grade2';
132                       
133                        // RTT = Route Intended Use
134                       
135                        if ($tags["$n:rtt"] == 16)
136                                $tags['highway'] = 'motorway';
137                        else if ($tags["$n:rtt"] == 15)
138                                $tags['highway'] = 'trunk';
139                        else if ($tags["$n:rtt"] == 14)
140                                $tags['highway'] = 'primary';
141                        else if ($tags["$n:rtt"] == 984)
142                                $tags['highway'] = 'secondary';
143                        else
144                                $tags['highway'] = 'unclassified';
145                       
146                       
147                        // LOC = Location (bridge/underground)
148                        if ($tags["$n:loc"] == 25)
149                        {
150                                $tags['bridge'] = true;
151                                $tags['layer'] = 1;
152                        }
153                        else if ($tags["$n:loc"] == 40)
154                        {
155                                $tags['tunnel'] = true;
156                                $tags['layer'] = -1;
157                        }
158                       
159                        /// TODO !!!!
160                        // RTE# = Route number, european (international reference number). Up to 3 values.
161                        // RTN# = Route number, national (national reference number). Up to 3 values.
162                        // Route numbers *might* have the '#' symbol as a delimiter (EGM 3.0 only), or several tags (RTE1, RTE2, RTE3) can exist (EGM v2.5 only).
163                       
164                        break;
165                       
166                case "AQ070":   // Ferry routes
167                        /// TODO: implement EGM v3 specs. Right now, only EGM 2.5 specs are taken into consideration.
168                        // RSU = Seasonal availability - no OSM tag yet
169                        // NA4# = Ferry route nation code: two ISO 3166 2-character nation codes, that make up the origin country and destination country. - no OSM tag yet.
170                       
171                        $tags['route'] = 'ferry';
172                        break;
173                       
174                case "AQ090":
175                        trigger_error("EGM AQ090 (Entrance/exit) metadata conversion is not yet implemented",E_USER_WARNING); break;
176                case "AQ125":
177                        trigger_error("EGM AQ125 (Railway station) metadata conversion is not yet implemented",E_USER_WARNING); break;
178                case "GB005":
179                        trigger_error("EGM GB005 (Airport/airfield) metadata conversion is not yet implemented",E_USER_WARNING); break;
180               
181               
182               
183                case "AL020":
184                        // Built-up point or area
185                        // PPL Populated Place Category (Actual population)
186                        if ($tags["$n:ppl"] == -29997)  // PPL is unpopulated, PP1 and PP2 are.
187                        {
188                                $tags['population'] = ($tags["$n:pp1"] + $tags["$n:pp2"]) / 2;
189                        }
190                        else if ($tags["$n:ppl"] != -29999 && $tags["$n:ppl"] != -997)  // Field is not unpopulated
191                        {
192                                $tags['population'] = ($tags["$n:ppl"]);
193                        }
194                        // PP1 Population lower range - no OSM tag yet
195                        // PP2 Population higher range - no OSM tag yet
196                        // STS Status of built-up area.
197                        if ($tags["$n:sts"] == 1 ||     // Country capital
198                        $tags["$n:sts"] == 2 || // Regional administrative unit capital
199                        $tags["$n:sts"] == 3)   // Local administrative unit capital
200                                $tags['place'] = 'city';
201                        if ($tags["$n:sts"] == 4)       // Other cities
202                                $tags['place'] = 'town';
203                        if ($tags["$n:sts"] == 5)       // Other cities
204                                $tags['place'] = 'village';
205                        break;
206                       
207                       
208                       
209                       
210                case "CA030":
211                        trigger_error("EGM CA030 (Height point) metadata conversion is not yet implemented",E_USER_WARNING); break;
212                case "ZD040":
213                        trigger_error("EGM ZD040 (Named location) metadata conversion is not yet implemented",E_USER_WARNING); break;
214                default:
215                        trigger_error("Unknown EGM fcode " . $tags["$n:fcode"] . " !",E_USER_WARNING); break;
216        }
217       
218}
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
Note: See TracBrowser for help on using the repository browser.