Ticket #730: osm.c.diff

File osm.c.diff, 5.5 KB (added by bjoernchr74, 10 years ago)
Line 
1*** ../../sdk/navit/navit/maptool/osm.c 2011-01-15 15:27:20.002572453 +0100
2--- maptool/osm.c       2011-01-15 15:45:56.606644045 +0100
3***************
4*** 20,25 ****
5--- 20,27 ----
6 
7 
8  int maxspeed_attr_value;
9+ int maxspeed_forward_attr_value;
10+ int maxspeed_backward_attr_value;
11 
12  char debug_attr_buffer[BUFFER_SIZE];
13 
14***************
15*** 930,935 ****
16--- 932,957 ----
17                        flags[0] |= AF_SPEED_LIMIT;
18                level=5;
19        }
20+       if (! strcmp(k,"maxspeed:forward")) {
21+               if (strstr(v, "mph")) {
22+                       maxspeed_forward_attr_value = (int)floor(atof(v) * 1.609344);
23+               } else {
24+                       maxspeed_forward_attr_value = atoi(v);
25+               }
26+               if (maxspeed_backward_attr_value >= 0)
27+                       flags[0] |= AF_SPEED_LIMIT;
28+               level=5;
29+       }
30+       if (! strcmp(k,"maxspeed:backward")) {
31+               if (strstr(v, "mph")) {
32+                       maxspeed_backward_attr_value = (int)floor(atof(v) * 1.609344);
33+               } else {
34+                       maxspeed_backward_attr_value = atoi(v);
35+               }
36+               if (maxspeed_backward_attr_value >= 0)
37+                       flags[0] |= AF_SPEED_LIMIT;
38+               level=5;
39+       }
40        if (! strcmp(k,"access")) {
41                flags[access_value(v)] |= AF_DANGEROUS_GOODS|AF_EMERGENCY_VEHICLES|AF_TRANSPORT_TRUCK|AF_DELIVERY_TRUCK|AF_PUBLIC_BUS|AF_TAXI|AF_HIGH_OCCUPANCY_CAR|AF_CAR|AF_MOTORCYCLE|AF_MOPED|AF_HORSE|AF_BIKE|AF_PEDESTRIAN;
42                level=5;
43***************
44*** 1348,1353 ****
45--- 1370,1377 ----
46        item.type=type_street_unkn;
47        debug_attr_buffer[0]='\0';
48        maxspeed_attr_value=0;
49+       maxspeed_forward_attr_value=0;
50+       maxspeed_backward_attr_value=0;
51        flags_attr_value = 0;
52        memset(flags, 0, sizeof(flags));
53        debug_attr_buffer[0]='\0';
54***************
55*** 1531,1538 ****
56                        item_bin_add_attr_string(item_bin, attr_debug, debug_attr_buffer);
57                if (add_flags)
58                        item_bin_add_attr_int(item_bin, attr_flags, flags_attr_value);
59!               if (maxspeed_attr_value)
60!                       item_bin_add_attr_int(item_bin, attr_maxspeed, maxspeed_attr_value);
61                item_bin_write(item_bin,out);
62        }
63  }
64--- 1555,1623 ----
65                        item_bin_add_attr_string(item_bin, attr_debug, debug_attr_buffer);
66                if (add_flags)
67                        item_bin_add_attr_int(item_bin, attr_flags, flags_attr_value);
68!
69!         if (flags[0] & AF_SPEED_LIMIT) {
70!             // We must have valid speed limits for all 3 fields - determine them if not defined on map, at least one of them is filled...
71!
72!             if (maxspeed_attr_value == 0) { // no "default" speed
73!             printf("%d %d %d -> ", maxspeed_attr_value, maxspeed_forward_attr_value, maxspeed_backward_attr_value);
74!                 if (maxspeed_forward_attr_value > 0) {
75!                     if (maxspeed_backward_attr_value > 0) {
76!                         if (maxspeed_forward_attr_value < maxspeed_backward_attr_value)
77!                             maxspeed_attr_value = maxspeed_forward_attr_value;
78!                         else
79!                             maxspeed_attr_value = maxspeed_backward_attr_value;
80!                     } else {
81!                         maxspeed_attr_value = maxspeed_forward_attr_value;
82!                         maxspeed_backward_attr_value = maxspeed_forward_attr_value;
83!                     }
84!                 } else {   // we only have a backward speed
85!                     maxspeed_attr_value = maxspeed_backward_attr_value;
86!                     maxspeed_forward_attr_value = maxspeed_backward_attr_value;
87!                 }
88!             printf("%d %d %d\n", maxspeed_attr_value, maxspeed_forward_attr_value, maxspeed_backward_attr_value);
89!             }
90!
91!             if (maxspeed_forward_attr_value == 0) { // no "forward" speed
92!                 if (maxspeed_attr_value > 0) {
93!                     if (maxspeed_backward_attr_value > 0) {
94!                         if (maxspeed_attr_value < maxspeed_backward_attr_value)
95!                            maxspeed_forward_attr_value = maxspeed_attr_value;
96!                         else
97!                            maxspeed_forward_attr_value = maxspeed_backward_attr_value;
98!                     } else {
99!                         maxspeed_forward_attr_value = maxspeed_attr_value;
100!                         maxspeed_backward_attr_value = maxspeed_attr_value;
101!                     }
102!                 } else {  // we only have a backward speed
103!                     maxspeed_forward_attr_value = maxspeed_backward_attr_value;
104!                     maxspeed_attr_value = maxspeed_backward_attr_value;
105!                 }
106!             }
107!
108!             if (maxspeed_backward_attr_value == 0) { // no "backward" speed
109!                 if (maxspeed_attr_value > 0) {
110!                     if (maxspeed_forward_attr_value > 0) {
111!                         if (maxspeed_attr_value < maxspeed_forward_attr_value)
112!                            maxspeed_backward_attr_value = maxspeed_attr_value;
113!                         else
114!                            maxspeed_backward_attr_value = maxspeed_forward_attr_value;
115!                     } else {
116!                         maxspeed_forward_attr_value = maxspeed_attr_value;
117!                         maxspeed_backward_attr_value = maxspeed_attr_value;
118!                     }
119!                 } else {  // we only have a forward speed
120!                     maxspeed_backward_attr_value = maxspeed_forward_attr_value;
121!                     maxspeed_attr_value = maxspeed_forward_attr_value;
122!                 }
123!             }
124!
125!
126!                   item_bin_add_attr_int(item_bin, attr_maxspeed, maxspeed_attr_value);
127!             item_bin_add_attr_int(item_bin, attr_maxspeed_forward, maxspeed_forward_attr_value);
128!             item_bin_add_attr_int(item_bin, attr_maxspeed_backward, maxspeed_backward_attr_value);
129!         }
130!
131                item_bin_write(item_bin,out);
132        }
133  }