diff options
-rw-r--r-- | navit/maptool/maptool.c | 6 | ||||
-rw-r--r-- | navit/maptool/maptool.h | 1 | ||||
-rw-r--r-- | navit/maptool/osm.c | 10 |
3 files changed, 15 insertions, 2 deletions
diff --git a/navit/maptool/maptool.c b/navit/maptool/maptool.c index da9684a2d..a8ff840a4 100644 --- a/navit/maptool/maptool.c +++ b/navit/maptool/maptool.c @@ -412,7 +412,7 @@ osm_collect_data(struct maptool_params *p, char *suffix) int debug_ref=0; static void -osm_count_references(struct maptool_params *p, char *suffix) +osm_count_references(struct maptool_params *p, char *suffix, int clear) { int i,first=1; fprintf(stderr,"%d slices\n",slices); @@ -421,6 +421,8 @@ osm_count_references(struct maptool_params *p, char *suffix) if (!first) { FILE *ways=tempfile(suffix,"ways",0); load_buffer("coords.tmp",&node_buffer, i*slice_size, slice_size); + if (clear) + clear_node_item_buffer(); ref_ways(ways); save_buffer("coords.tmp",&node_buffer, i*slice_size); fclose(ways); @@ -768,7 +770,7 @@ int main(int argc, char **argv) if (p.start <= phase && p.end >= phase) { maptool_load_node_table(&p,1); fprintf(stderr,"PROGRESS: Phase %d: counting references and resolving ways\n",phase); - osm_count_references(&p, suffix); + osm_count_references(&p, suffix, p.start == phase); } phase++; if (p.start <= phase && p.end >= phase) { diff --git a/navit/maptool/maptool.h b/navit/maptool/maptool.h index 4a2c2316d..7c498e954 100644 --- a/navit/maptool/maptool.h +++ b/navit/maptool/maptool.h @@ -256,6 +256,7 @@ long long item_bin_get_id(struct item_bin *ib); void flush_nodes(int final); void sort_countries(int keep_tmpfiles); void process_turn_restrictions(FILE *in, FILE *coords, FILE *ways, FILE *ways_index, FILE *out); +void clear_node_item_buffer(void); void ref_ways(FILE *in); void resolve_ways(FILE *in, FILE *out); FILE *resolve_ways_file(FILE *in, char *suffix, char *filename); diff --git a/navit/maptool/osm.c b/navit/maptool/osm.c index e8713d074..1b4a628db 100644 --- a/navit/maptool/osm.c +++ b/navit/maptool/osm.c @@ -1253,6 +1253,16 @@ osm_add_node(osmid id, double lat, double lon) } +void +clear_node_item_buffer(void) +{ + int j,count=node_buffer.size/sizeof(struct node_item); + struct node_item *ni=(struct node_item *)(node_buffer.base); + for (j = 0 ; j < count ; j++) { + ni[j].ref_way=0; + } +} + static struct node_item * node_item_get(int id) { |