summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--navit/maptool/maptool.c6
-rw-r--r--navit/maptool/maptool.h1
-rw-r--r--navit/maptool/osm.c10
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)
{