… | |
… | |
60 | {""",'"'}, |
60 | {""",'"'}, |
61 | {"'",'\''}, |
61 | {"'",'\''}, |
62 | {"&",'&'}, |
62 | {"&",'&'}, |
63 | {"<",'<'}, |
63 | {"<",'<'}, |
64 | {">",'>'}, |
64 | {">",'>'}, |
|
|
65 | {"{",'{'}, |
|
|
66 | {"}",'}'}, |
65 | }; |
67 | }; |
66 | |
68 | |
67 | void |
69 | void |
68 | osm_xml_decode_entities(char *buffer) |
70 | osm_xml_decode_entities(char *buffer) |
69 | { |
71 | { |
… | |
… | |
155 | else if (!strcmp(type_buffer,"way")) |
157 | else if (!strcmp(type_buffer,"way")) |
156 | type=2; |
158 | type=2; |
157 | else if (!strcmp(type_buffer,"relation")) |
159 | else if (!strcmp(type_buffer,"relation")) |
158 | type=3; |
160 | type=3; |
159 | else { |
161 | else { |
160 | fprintf(stderr,"Unknown type %s\n",type_buffer); |
162 | //fprintf(stderr,"Unknown type %s\n",type_buffer); |
161 | type=0; |
163 | type=0; |
162 | } |
164 | } |
163 | osm_add_member(type, atoll(ref_buffer), role_buffer); |
165 | osm_add_member(type, atoll(ref_buffer), role_buffer); |
164 | |
166 | |
165 | return 1; |
167 | return 1; |
… | |
… | |
174 | osm_add_nd(atoll(ref_buffer)); |
176 | osm_add_nd(atoll(ref_buffer)); |
175 | return 1; |
177 | return 1; |
176 | } |
178 | } |
177 | |
179 | |
178 | int |
180 | int |
179 | map_collect_data_osm(FILE *in, FILE *out_ways, FILE *out_nodes, FILE *out_turn_restrictions, FILE *out_boundaries) |
181 | map_collect_data_osm(FILE *in, struct maptool_osm *osm) |
180 | { |
182 | { |
181 | int size=BUFFER_SIZE; |
183 | int size=BUFFER_SIZE; |
182 | char buffer[size]; |
184 | char buffer[size]; |
183 | char *p; |
185 | char *p; |
184 | sig_alrm(0); |
186 | sig_alrm(0); |
185 | while (fgets(buffer, size, in)) { |
187 | while (fgets(buffer, size, in)) { |
186 | p=strchr(buffer,'<'); |
188 | p=strchr(buffer,'<'); |
187 | if (! p) { |
189 | if (! p) { |
188 | fprintf(stderr,"WARNING: wrong line %s\n", buffer); |
190 | //fprintf(stderr,"WARNING: wrong line %s\n", buffer); |
189 | continue; |
191 | continue; |
190 | } |
192 | } |
191 | if (!strncmp(p, "<?xml ",6)) { |
193 | if (!strncmp(p, "<?xml ",6)) { |
192 | } else if (!strncmp(p, "<osm ",5)) { |
194 | } else if (!strncmp(p, "<osm ",5)) { |
193 | } else if (!strncmp(p, "<bound ",7)) { |
195 | } else if (!strncmp(p, "<bound ",7)) { |
194 | } else if (!strncmp(p, "<node ",6)) { |
196 | } else if (!strncmp(p, "<node ",6)) { |
195 | if (!parse_node(p)) |
197 | if (!parse_node(p)) |
|
|
198 | { |
196 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
199 | //fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
|
|
200 | } |
197 | processed_nodes++; |
201 | processed_nodes++; |
198 | } else if (!strncmp(p, "<tag ",5)) { |
202 | } else if (!strncmp(p, "<tag ",5)) { |
199 | if (!parse_tag(p)) |
203 | if (!parse_tag(p)) |
|
|
204 | { |
200 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
205 | //fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
|
|
206 | } |
201 | } else if (!strncmp(p, "<way ",5)) { |
207 | } else if (!strncmp(p, "<way ",5)) { |
202 | if (!parse_way(p)) |
208 | if (!parse_way(p)) |
|
|
209 | { |
203 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
210 | //fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
|
|
211 | } |
204 | processed_ways++; |
212 | processed_ways++; |
205 | } else if (!strncmp(p, "<nd ",4)) { |
213 | } else if (!strncmp(p, "<nd ",4)) { |
206 | if (!parse_nd(p)) |
214 | if (!parse_nd(p)) |
|
|
215 | { |
207 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
216 | //fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
|
|
217 | } |
208 | } else if (!strncmp(p, "<relation ",10)) { |
218 | } else if (!strncmp(p, "<relation ",10)) { |
209 | if (!parse_relation(p)) |
219 | if (!parse_relation(p)) |
|
|
220 | { |
210 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
221 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
|
|
222 | } |
211 | processed_relations++; |
223 | processed_relations++; |
212 | } else if (!strncmp(p, "<member ",8)) { |
224 | } else if (!strncmp(p, "<member ",8)) { |
213 | if (!parse_member(p)) |
225 | if (!parse_member(p)) |
|
|
226 | { |
214 | fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
227 | //fprintf(stderr,"WARNING: failed to parse %s\n", buffer); |
|
|
228 | } |
215 | } else if (!strncmp(p, "</node>",7)) { |
229 | } else if (!strncmp(p, "</node>",7)) { |
216 | osm_end_node(out_nodes); |
230 | osm_end_node(osm); |
217 | } else if (!strncmp(p, "</way>",6)) { |
231 | } else if (!strncmp(p, "</way>",6)) { |
218 | osm_end_way(out_ways); |
232 | osm_end_way(osm); |
219 | } else if (!strncmp(p, "</relation>",11)) { |
233 | } else if (!strncmp(p, "</relation>",11)) { |
220 | osm_end_relation(out_turn_restrictions, out_boundaries); |
234 | osm_end_relation(osm); |
221 | } else if (!strncmp(p, "</osm>",6)) { |
235 | } else if (!strncmp(p, "</osm>",6)) { |
222 | } else { |
236 | } else { |
223 | fprintf(stderr,"WARNING: unknown tag in %s\n", buffer); |
237 | // fprintf(stderr,"WARNING: unknown tag in %s\n", buffer); |
224 | } |
238 | } |
225 | } |
239 | } |
226 | sig_alrm(0); |
240 | sig_alrm(0); |
227 | sig_alrm_end(); |
241 | sig_alrm_end(); |
228 | return 1; |
242 | return 1; |