diff options
author | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2008-12-10 13:40:55 +0000 |
---|---|---|
committer | martin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2008-12-10 13:40:55 +0000 |
commit | 554177f4192b0fb8f8d4f02c3bda7a99e4836534 (patch) | |
tree | f8b8d3050fe80e6fe2dec991a3c7585fc31876f9 /navit | |
parent | 35b604b153d93b8c6457fb057e137bde7505085f (diff) | |
download | navit-554177f4192b0fb8f8d4f02c3bda7a99e4836534.tar.gz |
Add:Core:Initial support for house numbers
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@1779 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit')
-rw-r--r-- | navit/attr_def.h | 1 | ||||
-rw-r--r-- | navit/data/binfile/binfile.c | 10 | ||||
-rw-r--r-- | navit/item_def.h | 5 | ||||
-rw-r--r-- | navit/navit.xml | 3 | ||||
-rw-r--r-- | navit/osm2navit.c | 49 |
5 files changed, 63 insertions, 5 deletions
diff --git a/navit/attr_def.h b/navit/attr_def.h index 5aca623bd..42f48d281 100644 --- a/navit/attr_def.h +++ b/navit/attr_def.h @@ -169,6 +169,7 @@ ATTR(gc_difficulty) ATTR(gc_terrain) ATTR(icon_src) ATTR(position_time_iso8601) +ATTR(house_number) ATTR2(0x0003ffff,type_string_end) ATTR2(0x00040000,type_special_begin) ATTR(order) diff --git a/navit/data/binfile/binfile.c b/navit/data/binfile/binfile.c index c2d871e74..d37dbd377 100644 --- a/navit/data/binfile/binfile.c +++ b/navit/data/binfile/binfile.c @@ -77,7 +77,7 @@ struct map_rect_priv { int *end; enum attr_type attr_last; int label; - int *label_attr[2]; + int *label_attr[4]; struct map_selection *sel; struct map_priv *m; struct item item; @@ -367,12 +367,14 @@ binfile_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr) type=le32_to_cpu(t->pos_attr[0]); if (type == attr_label) mr->label=1; - if (type == attr_town_name) + if (type == attr_house_number) mr->label_attr[0]=t->pos_attr; if (type == attr_street_name) - mr->label_attr[0]=t->pos_attr; - if (type == attr_street_name_systematic) mr->label_attr[1]=t->pos_attr; + if (type == attr_street_name_systematic) + mr->label_attr[2]=t->pos_attr; + if (type == attr_town_name) + mr->label_attr[3]=t->pos_attr; if (type == attr_type || attr_type == attr_any) { if (attr_type == attr_any) { dbg(1,"pos %p attr %s size %d\n", t->pos_attr-1, attr_to_name(type), size); diff --git a/navit/item_def.h b/navit/item_def.h index 35b652a69..cd323122a 100644 --- a/navit/item_def.h +++ b/navit/item_def.h @@ -298,6 +298,7 @@ ITEM(poi_baseball) ITEM(poi_climbing) ITEM(poi_motor_sport) ITEM(poi_tennis) +ITEM(house_number) /* Line */ ITEM2(0x80000000,line) ITEM2(0x80000001,line_unspecified) @@ -402,6 +403,10 @@ ITEM(tracking_80) ITEM(tracking_90) ITEM(tracking_100) ITEM(track_tracked) +ITEM(house_number_interpolation_even) +ITEM(house_number_interpolation_odd) +ITEM(house_number_interpolation_all) +ITEM(house_number_interpolation_alphabetic) /* Area */ ITEM2(0xc0000000,area) ITEM2(0xc0000001,area_unspecified) diff --git a/navit/navit.xml b/navit/navit.xml index dbb25ece7..0e4edfe17 100644 --- a/navit/navit.xml +++ b/navit/navit.xml @@ -1036,6 +1036,9 @@ </itemgra> </layer> <layer name="labels"> + <itemgra item_types="house_number" order="15-"> + <circle color="#000000" radius="3" text_size="7"/> + </itemgra> <itemgra item_types="town_label,district_label,town_label_0e0,town_label_1e0,town_label_2e0,town_label_5e0,town_label_1e1,town_label_2e1,town_label_5e1,town_label_1e2,town_label_2e2,town_label_5e2,district_label_0e0,district_label_1e0,district_label_2e0,district_label_5e0,district_label_1e1,district_label_2e1,district_label_5e1,district_label_1e2,district_label_2e2,district_label_5e2" order="12-"> <circle color="#000000" radius="3" text_size="7"/> </itemgra> diff --git a/navit/osm2navit.c b/navit/osm2navit.c index df436c0c5..2c485dcbe 100644 --- a/navit/osm2navit.c +++ b/navit/osm2navit.c @@ -61,6 +61,9 @@ static int ignore_unkown = 0, coverage=0; static char *attrmap={ "n *=* point_unkn\n" "n Annehmlichkeit=Hochsitz poi_hunting_stand\n" +#ifdef HOUSE_NUMBERS + "n addr:housenumber=* house_number\n" +#endif "n aeroway=aerodrome poi_airport\n" "n aeroway=airport poi_airport\n" "n aeroway=helipad poi_heliport\n" @@ -172,6 +175,12 @@ static char *attrmap={ "n tourism=viewpoint poi_viewpoint\n" "n tourism=zoo poi_zoo\n" "w *=* street_unkn\n" +#ifdef HOUSE_NUMBERS + "w addr:interpolation=even house_number_interpolation_even\n" + "w addr:interpolation=odd house_number_interpolation_odd\n" + "w addr:interpolation=all house_number_interpolation_all\n" + "w addr:interpolation=alphabetic house_number_interpolation_alphabetic\n" +#endif "w aerialway=cable_car lift_cable_car\n" "w aerialway=chair_lift lift_chair\n" "w aerialway=drag_lift lift_drag\n" @@ -537,6 +546,14 @@ struct attr_bin label_attr = { }; char label_attr_buffer[BUFFER_SIZE]; +#ifdef HOUSE_NUMBERS +struct attr_bin house_number_attr = { + 0, attr_house_number +}; +char house_number_attr_buffer[BUFFER_SIZE]; +#endif + + struct attr_bin town_name_attr = { 0, attr_town_name }; @@ -545,6 +562,10 @@ struct attr_bin street_name_attr = { 0, attr_street_name }; +#ifdef HOUSE_NUMBERS +char street_name_attr_buffer[BUFFER_SIZE]; +#endif + struct attr_bin street_name_systematic_attr = { 0, attr_street_name_systematic }; @@ -665,6 +686,16 @@ add_tag(char *k, char *v) pad_text_attr(&label_attr, label_attr_buffer); level=5; } +#ifdef HOUSE_NUMBERS + if (! strcmp(k,"addr:housenumber")) { + strcpy(house_number_attr_buffer, v); + pad_text_attr(&house_number_attr, house_number_attr_buffer); + } + if (! strcmp(k,"addr:street")) { + strcpy(street_name_attr_buffer, v); + pad_text_attr(&street_name_attr, street_name_attr_buffer); + } +#endif if (! strcmp(k,"ref")) { if (in_way) { strcpy(street_name_systematic_attr_buffer, v); @@ -843,6 +874,10 @@ add_node(int id, double lat, double lon) nodeid=id; item.type=type_point_unkn; label_attr.len=0; +#ifdef HOUSE_NUMBERS + house_number_attr.len=0; + street_name_attr.len=0; +#endif town_name_attr.len=0; debug_attr.len=0; is_in_buffer[0]='\0'; @@ -956,6 +991,9 @@ add_way(int id) coord_count=0; item.type=type_street_unkn; label_attr.len=0; +#ifdef HOUSE_NUMBERS + house_number_attr.len=0; +#endif street_name_attr.len=0; street_name_systematic_attr.len=0; debug_attr.len=0; @@ -1114,6 +1152,12 @@ end_node(FILE *out) alen+=label_attr.len+1; if (debug_attr.len) alen+=debug_attr.len+1; +#ifdef HOUSE_NUMBERS + if (house_number_attr.len) + alen+=house_number_attr.len+1; + if (street_name_attr.len) + alen+=street_name_attr.len+1; +#endif if (count) item.type=types[0]; else @@ -1127,6 +1171,10 @@ end_node(FILE *out) write_attr(out, &town_name_attr, label_attr_buffer); } else write_attr(out, &label_attr, label_attr_buffer); +#ifdef HOUSE_NUMBERS + write_attr(out, &house_number_attr, house_number_attr_buffer); + write_attr(out, &street_name_attr, street_name_attr_buffer); +#endif write_attr(out, &debug_attr, debug_attr_buffer); #ifdef GENERATE_INDEX if (item_is_town(item) && town_name_attr.len) { @@ -2831,7 +2879,6 @@ int main(int argc, char **argv) phase1_db(dbstr,ways,nodes); else #endif - printf("map_handle=%p\n", map_handle); if (map_handle) { phase1_map(map_handle,ways,nodes); map_destroy(map_handle); |