… | |
… | |
183 | #endif |
183 | #endif |
184 | } |
184 | } |
185 | |
185 | |
186 | |
186 | |
187 | static void |
187 | static void |
188 | process_dense(OSMPBF__PrimitiveBlock *primitive_block, OSMPBF__DenseNodes *dense, FILE *out_nodes) |
188 | process_dense(OSMPBF__PrimitiveBlock *primitive_block, OSMPBF__DenseNodes *dense, struct maptool_osm *osm) |
189 | { |
189 | { |
190 | int i,j=0,has_tags; |
190 | int i,j=0,has_tags; |
191 | long long id=0,lat=0,lon=0,changeset=0,timestamp=0; |
191 | long long id=0,lat=0,lon=0,changeset=0,timestamp=0; |
192 | int version,user_sid=0,uid=0; |
192 | int version,user_sid=0,uid=0; |
193 | |
193 | |
… | |
… | |
223 | } else |
223 | } else |
224 | printf("/>\n"); |
224 | printf("/>\n"); |
225 | #else |
225 | #else |
226 | } |
226 | } |
227 | #endif |
227 | #endif |
228 | osm_end_node(out_nodes); |
228 | osm_end_node(osm); |
229 | j++; |
229 | j++; |
230 | } |
230 | } |
231 | } |
231 | } |
232 | |
232 | |
233 | #if 0 |
233 | #if 0 |
… | |
… | |
239 | process_timestamp(info->timestamp); |
239 | process_timestamp(info->timestamp); |
240 | } |
240 | } |
241 | #endif |
241 | #endif |
242 | |
242 | |
243 | static void |
243 | static void |
244 | process_way(OSMPBF__PrimitiveBlock *primitive_block, OSMPBF__Way *way, FILE *out_ways) |
244 | process_way(OSMPBF__PrimitiveBlock *primitive_block, OSMPBF__Way *way, struct maptool_osm *osm) |
245 | { |
245 | { |
246 | int i; |
246 | int i; |
247 | long long ref=0; |
247 | long long ref=0; |
248 | |
248 | |
249 | osm_add_way(way->id); |
249 | osm_add_way(way->id); |
… | |
… | |
264 | for (i = 0 ; i < way->n_keys ; i++) |
264 | for (i = 0 ; i < way->n_keys ; i++) |
265 | process_tag(primitive_block, way->keys[i], way->vals[i]); |
265 | process_tag(primitive_block, way->keys[i], way->vals[i]); |
266 | #if 0 |
266 | #if 0 |
267 | printf("\t</way>\n"); |
267 | printf("\t</way>\n"); |
268 | #endif |
268 | #endif |
269 | osm_end_way(out_ways); |
269 | osm_end_way(osm); |
270 | } |
270 | } |
271 | |
271 | |
272 | static void |
272 | static void |
273 | process_relation(OSMPBF__PrimitiveBlock *primitive_block, OSMPBF__Relation *relation, FILE *out_turn_restrictions, FILE *out_boundaries) |
273 | process_relation(OSMPBF__PrimitiveBlock *primitive_block, OSMPBF__Relation *relation, struct maptool_osm *osm) |
274 | { |
274 | { |
275 | int i; |
275 | int i; |
276 | long long ref=0; |
276 | long long ref=0; |
277 | char rolebuff[1024]; |
277 | char rolebuff[1024]; |
278 | |
278 | |
… | |
… | |
311 | for (i = 0 ; i < relation->n_keys ; i++) |
311 | for (i = 0 ; i < relation->n_keys ; i++) |
312 | process_tag(primitive_block, relation->keys[i], relation->vals[i]); |
312 | process_tag(primitive_block, relation->keys[i], relation->vals[i]); |
313 | #if 0 |
313 | #if 0 |
314 | printf("\t</relation>\n"); |
314 | printf("\t</relation>\n"); |
315 | #else |
315 | #else |
316 | osm_end_relation(out_turn_restrictions, out_boundaries); |
316 | osm_end_relation(osm); |
317 | #endif |
317 | #endif |
318 | } |
318 | } |
319 | |
319 | |
320 | static void |
320 | static void |
321 | process_osmdata(OSMPBF__Blob *blob, unsigned char *data, FILE *out_nodes, FILE *out_ways, FILE *out_turn_restrictions, FILE *out_boundaries) |
321 | process_osmdata(OSMPBF__Blob *blob, unsigned char *data, struct maptool_osm *osm) |
322 | { |
322 | { |
323 | int i,j; |
323 | int i,j; |
324 | OSMPBF__PrimitiveBlock *primitive_block; |
324 | OSMPBF__PrimitiveBlock *primitive_block; |
325 | primitive_block=osmpbf__primitive_block__unpack(&protobuf_c_system_allocator, blob->raw_size, data); |
325 | primitive_block=osmpbf__primitive_block__unpack(&protobuf_c_system_allocator, blob->raw_size, data); |
326 | for (i = 0 ; i < primitive_block->n_primitivegroup ; i++) { |
326 | for (i = 0 ; i < primitive_block->n_primitivegroup ; i++) { |
327 | OSMPBF__PrimitiveGroup *primitive_group=primitive_block->primitivegroup[i]; |
327 | OSMPBF__PrimitiveGroup *primitive_group=primitive_block->primitivegroup[i]; |
328 | process_dense(primitive_block, primitive_group->dense, out_nodes); |
328 | process_dense(primitive_block, primitive_group->dense, osm); |
329 | for (j = 0 ; j < primitive_group->n_ways ; j++) |
329 | for (j = 0 ; j < primitive_group->n_ways ; j++) |
330 | process_way(primitive_block, primitive_group->ways[j], out_ways); |
330 | process_way(primitive_block, primitive_group->ways[j], osm); |
331 | for (j = 0 ; j < primitive_group->n_relations ; j++) |
331 | for (j = 0 ; j < primitive_group->n_relations ; j++) |
332 | process_relation(primitive_block, primitive_group->relations[j], out_turn_restrictions, out_boundaries); |
332 | process_relation(primitive_block, primitive_group->relations[j], osm); |
333 | #if 0 |
333 | #if 0 |
334 | printf("Group %p %d %d %d %d\n",primitive_group->dense,primitive_group->n_nodes,primitive_group->n_ways,primitive_group->n_relations,primitive_group->n_changesets); |
334 | printf("Group %p %d %d %d %d\n",primitive_group->dense,primitive_group->n_nodes,primitive_group->n_ways,primitive_group->n_relations,primitive_group->n_changesets); |
335 | #endif |
335 | #endif |
336 | } |
336 | } |
337 | osmpbf__primitive_block__free_unpacked(primitive_block, &protobuf_c_system_allocator); |
337 | osmpbf__primitive_block__free_unpacked(primitive_block, &protobuf_c_system_allocator); |
338 | } |
338 | } |
339 | |
339 | |
340 | |
340 | |
341 | int |
341 | int |
342 | map_collect_data_osm_protobuf(FILE *in, FILE *out_ways, FILE *out_nodes, FILE *out_turn_restrictions, FILE *out_boundaries) |
342 | map_collect_data_osm_protobuf(FILE *in, struct maptool_osm *osm) |
343 | { |
343 | { |
344 | OSMPBF__BlobHeader *header; |
344 | OSMPBF__BlobHeader *header; |
345 | OSMPBF__Blob *blob; |
345 | OSMPBF__Blob *blob; |
346 | unsigned char *data; |
346 | unsigned char *data; |
347 | #if 0 |
347 | #if 0 |
… | |
… | |
352 | blob=read_blob(header, in); |
352 | blob=read_blob(header, in); |
353 | data=uncompress_blob(blob); |
353 | data=uncompress_blob(blob); |
354 | if (!strcmp(header->type,"OSMHeader")) { |
354 | if (!strcmp(header->type,"OSMHeader")) { |
355 | process_osmheader(blob, data); |
355 | process_osmheader(blob, data); |
356 | } else if (!strcmp(header->type,"OSMData")) { |
356 | } else if (!strcmp(header->type,"OSMData")) { |
357 | process_osmdata(blob, data, out_nodes, out_ways, out_turn_restrictions, out_boundaries); |
357 | process_osmdata(blob, data, osm); |
358 | } else { |
358 | } else { |
359 | printf("unknown\n"); |
359 | printf("unknown\n"); |
360 | return 0; |
360 | return 0; |
361 | } |
361 | } |
362 | free(data); |
362 | free(data); |