summaryrefslogtreecommitdiff
path: root/navit/maptool
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-02-26 17:37:01 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2013-02-26 17:37:01 +0000
commit0ec6489a72d723344b0e62e31034aaaaaf780c28 (patch)
treea42d4d1739cbaad67caf6c2511ef81d9f8fa9cd4 /navit/maptool
parent5b25c491ea10dfa5eae4cbef8b68ba2113128677 (diff)
downloadnavit-svn-0ec6489a72d723344b0e62e31034aaaaaf780c28.tar.gz
Fix:maptool:Fixed broken coastline generator
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5394 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/maptool')
-rw-r--r--navit/maptool/coastline.c55
1 files changed, 41 insertions, 14 deletions
diff --git a/navit/maptool/coastline.c b/navit/maptool/coastline.c
index 9765d2f1..fe0d1616 100644
--- a/navit/maptool/coastline.c
+++ b/navit/maptool/coastline.c
@@ -145,6 +145,7 @@ struct coastline_tile_data {
struct item_bin_sink_func *sink;
GHashTable *tile_edges;
int level;
+ GList *k,*v;
};
static GList *
@@ -399,9 +400,6 @@ tile_collector_add_siblings(char *tile, struct coastline_tile *ct, struct coastl
struct item_bin_sink *out=data->sink->priv_data[1];
int edges=ct->edges;
int debug=0;
-
- if (len != data->level)
- return;
#if 0
if (!strncmp(tile,"bcacccaadbdcd",10))
debug=1;
@@ -493,8 +491,6 @@ tile_collector_add_siblings2(char *tile, struct coastline_tile *ct, struct coast
#endif
if (debug)
fprintf(stderr,"len of %s %d vs %d\n",tile,len,data->level);
- if (len != data->level)
- return;
if (debug)
@@ -528,6 +524,35 @@ tile_collector_add_siblings2(char *tile, struct coastline_tile *ct, struct coast
g_hash_table_insert(data->tile_edges, g_strdup(tile2), cn);
}
+static void
+foreach_tile_func(gpointer key, gpointer value, gpointer user_data)
+{
+ struct coastline_tile_data *data=user_data;
+ if (strlen((char *)key) == data->level) {
+ data->k=g_list_prepend(data->k, key);
+ data->v=g_list_prepend(data->v, value);
+ }
+}
+
+static void
+foreach_tile(struct coastline_tile_data *data, void(*func)(char *, struct coastline_tile *, struct coastline_tile_data *))
+{
+ GList *k,*v;
+ data->k=NULL;
+ data->v=NULL;
+
+ g_hash_table_foreach(data->tile_edges, foreach_tile_func, data);
+ k=data->k;
+ v=data->v;
+ while (k) {
+ func(k->data,v->data,data);
+ k=g_list_next(k);
+ v=g_list_next(v);
+ }
+ g_list_free(data->k);
+ g_list_free(data->v);
+}
+
static int
tile_collector_finish(struct item_bin_sink_func *tile_collector)
{
@@ -538,28 +563,30 @@ tile_collector_finish(struct item_bin_sink_func *tile_collector)
data.tile_edges=g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
hash=tile_collector->priv_data[0];
fprintf(stderr,"tile_collector_finish\n");
+#if 1
g_hash_table_foreach(hash, (GHFunc) tile_collector_process_tile, &data);
+#endif
fprintf(stderr,"tile_collector_finish foreach done\n");
g_hash_table_destroy(hash);
fprintf(stderr,"tile_collector_finish destroy done\n");
for (i = 14 ; i > 0 ; i--) {
fprintf(stderr,"Level=%d\n",i);
data.level=i;
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings, &data);
+ foreach_tile(&data, tile_collector_add_siblings);
fprintf(stderr,"*");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings, &data);
+ foreach_tile(&data, tile_collector_add_siblings);
fprintf(stderr,"*");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings, &data);
+ foreach_tile(&data, tile_collector_add_siblings);
fprintf(stderr,"*");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings, &data);
+ foreach_tile(&data, tile_collector_add_siblings);
fprintf(stderr,"*");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings2, &data);
+ foreach_tile(&data, tile_collector_add_siblings2);
fprintf(stderr,"*\n");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings2, &data);
+ foreach_tile(&data, tile_collector_add_siblings2);
fprintf(stderr,"*\n");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings2, &data);
+ foreach_tile(&data, tile_collector_add_siblings2);
fprintf(stderr,"*\n");
- g_hash_table_foreach(data.tile_edges, (GHFunc) tile_collector_add_siblings2, &data);
+ foreach_tile(&data, tile_collector_add_siblings2);
fprintf(stderr,"*\n");
}
#if 0
@@ -627,7 +654,7 @@ coastline_processor_finish(struct item_bin_sink_func *coastline_processor)
void
process_coastlines(FILE *in, FILE *out)
{
- struct item_bin_sink *reader=file_reader_new(in,1000000,0);
+ struct item_bin_sink *reader=file_reader_new(in,-1,0);
struct item_bin_sink_func *file_writer=file_writer_new(out);
struct item_bin_sink *result=item_bin_sink_new();
struct item_bin_sink_func *coastline_processor=coastline_processor_new(result);