Ticket #1178: osm.c.patch
File osm.c.patch, 2.7 KB (added by chr, 9 years ago) |
---|
-
osm.c
old new 57 57 58 58 char debug_attr_buffer[BUFFER_SIZE]; 59 59 60 int flags[4]; 61 int flagsa[4]; 60 int flags[4]; // collect individual tags related to a single flag, e.x. 'bicycle=' -> AF_BIKE, ... 61 int flagsa[4]; // collect 'access=' tags 62 int flagsv[4]; // collect 'vehicle=' tags (subset of 'access' group) 63 int flagsmv[4]; // collect 'motor_vehicle=' tags (subset of 'vehicle' group) 62 64 63 65 int flags_attr_value; 64 66 … … 1039 1041 level=5; 1040 1042 } 1041 1043 if (! strcmp(k,"vehicle")) { 1042 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_BIKE;1044 flagsv[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_BIKE; 1043 1045 level=5; 1044 1046 } 1045 1047 if (! strcmp(k,"motor_vehicle")) { 1046 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;1048 flagsmv[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; 1047 1049 level=5; 1048 1050 } 1049 1051 if (! strcmp(k,"bicycle")) { … … 1482 1484 flags_attr_value = 0; 1483 1485 memset(flags, 0, sizeof(flags)); 1484 1486 memset(flagsa, 0, sizeof(flagsa)); 1487 memset(flagsv, 0, sizeof(flagsv)); 1488 memset(flagsmv, 0, sizeof(flagsmv)); 1485 1489 debug_attr_buffer[0]='\0'; 1486 1490 osmid_attr_value=id; 1487 1491 if (wayid < wayid_last && !way_hash) { … … 1715 1719 nodes_ref_item_bin(item_bin); 1716 1720 def_flags=item_get_default_flags(types[i]); 1717 1721 if (def_flags) { 1718 flags_attr_value=((*def_flags & ~flagsa[2]) | flags[0] | flags[1] | flagsa[1]) & ~flags[2]; 1722 /* 1723 * Evaluation of collected tags: 1724 * Tags of a subset dominate enclosing groups. 1725 * e.x. 'bicycle=...' overrules 'vehicle=...' 1726 * 'motor_vehicle=...' overrules 'vehicle=...' 1727 * 'vehicle=...' overrules 'access=...' 1728 * Permission dominates restriction if a tag is used twice. 1729 * e.x. 'motor_vehicle=permissive' and 'motor_vehicle=agricultural' 1730 * -> results in permission 1731 */ 1732 flags_attr_value=(((*def_flags & ~flagsa[2] | flagsa[1]) & ~flagsv[2] | flagsv[1] ) & ~flagsmv[2] | flagsmv[1] ) & ~flags[2] | flags[1] | flags[0]; 1719 1733 if (flags_attr_value != *def_flags) 1720 1734 add_flags=1; 1721 1735 }