/
car-vario.brf
272 lines (231 loc) · 9.73 KB
/
car-vario.brf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
#
# Car-Routing based on a kinematic model
#
# Depending on the vmax-parameter (target-speed)
# this can be anything from least-time routing to eco-routing
#
#
---model:btools.router.KinematicModel
---context:global
# Car profile
assign validForCars = true
# Use the following switches to change behaviour
assign avoid_toll = false # %avoid_toll% | Avoid paid roads | boolean
assign avoid_unpaved = false # %avoid_unpaved% | Avoid unpaved roads, if possible | boolean
assign avoid_motorways = false # %avoid_motorways% | Avoid motorways | boolean
# Kinematic model parameters
assign vmax = 90 # %vmax% | Target speed (in km/h) | number
assign recup_efficiency = 0.7 # %recup_efficiency% | (ratio) | number
assign totalweight = 1640 # %totalweight% | Total weight of the car (in kg) | number
assign f_roll = 232 # %f_roll% | Rolling friction (in Newton) | number
assign f_air = 0.4 # %f_air% | Drag force (in Newton / (m/s)^2), 0.5*cw*A*rho | number
assign f_recup = 400 # %f_recup% | Newton | number
assign p_standby = 250 # %p_standby% | Watt | number
# Turn instructions settings
assign turnInstructionMode = 1 # %turnInstructionMode% | Mode for the generated turn instructions | [0=none, 1=auto-choose, 2=locus-style, 3=osmand-style, 4=comment-style, 5=gpsies-style, 6=orux-style]
# Technical parameters
assign pass1coefficient = 1.3
---context:way # following code refers to way-tags
# classifier constants
assign classifier_none = 1
assign classifier_ferry = 2
assign is_avoided_toll_road and avoid_toll toll=yes
assign is_avoided_motorway and avoid_motorways highway=motorway|motorway_link
#
# calculate logical car access
#
assign isresidentialorliving = or highway=residential|living_street living_street=yes
assign caraccess
switch motorcar=
switch motor_vehicle=
switch vehicle=
switch access=
switch highway=motorway|motorway_link 1
switch highway=trunk|trunk_link 1
switch highway=primary|primary_link 1
switch highway=secondary|secondary_link 1
switch highway=tertiary|tertiary_link 1
switch highway=unclassified 1
switch route=ferry 1
switch isresidentialorliving 1
switch highway=service 1
0
access=yes|permissive|designated|destination
vehicle=yes|designated|destination
motor_vehicle=yes|permissive|designated|destination
motorcar=yes|permissive|designated|destination
assign caraccess_destination
switch motorcar=
switch motor_vehicle=
switch vehicle=
access=destination
vehicle=destination
motor_vehicle=destination
motorcar=destination
#
# for any change in initialclassifier, initialcost is added once
#
assign initialclassifier =
if route=ferry then classifier_ferry
else classifier_none
#
# calculate the initial cost
# this is added to the total cost each time the costfactor
# changed
#
assign initialcost =
if ( equal initialclassifier classifier_ferry ) then 10000
else 0
assign accessspeedlimit = if caraccess then 999 else 0
assign isbadoneway = if reversedirection=yes then ( if oneway= then junction=roundabout else oneway=yes|true|1 ) else oneway=-1
assign onewayspeedlimit = if isbadoneway then 0 else 999
assign islinktype = highway=motorway_link|trunk_link|primary_link|secondary_link|tertiary_link
assign maxspeed_surface =
switch or surface= surface=paved|asphalt|concrete 999
switch surface=paving_stones|cobblestone|sett 30
switch surface=fine_gravel ( switch avoid_unpaved 3 10 )
switch avoid_unpaved 1 2
assign maxspeed_tracktype =
switch tracktype= 999
switch tracktype=grade1 40
switch tracktype=grade2 ( switch avoid_unpaved 2 5 )
1
assign maxspeed_implicit =
switch highway=motorway 999
switch highway=motorway_link 130
switch highway=trunk 250
switch highway=trunk_link 100
switch highway=primary|primary_link 100
switch highway=secondary|secondary_link 90
switch highway=tertiary|tertiary_link 80
switch highway=unclassified 50
switch route=ferry 10
switch highway=bridleway 10
switch isresidentialorliving 30
switch highway=service 30
switch highway=track|road|path switch tracktype=grade1 30 5
0
assign maxspeed_forward =
switch maxspeed:forward=50 50
switch maxspeed:forward=30 30
switch maxspeed:forward=10 10
switch maxspeed:forward=20 20
switch maxspeed:forward=40 40
switch maxspeed:forward=60 60
switch maxspeed:forward=70 70
switch maxspeed:forward=80 80
switch maxspeed:forward=90 90
switch maxspeed:forward=100 100
switch maxspeed:forward=110 110
switch maxspeed:forward=120 120
switch maxspeed:forward=130 130
switch maxspeed:forward=urban 50
switch maxspeed:forward=rural 100
999
assign maxspeed_backward =
switch maxspeed:backward=50 50
switch maxspeed:backward=30 30
switch maxspeed:backward=10 10
switch maxspeed:backward=20 20
switch maxspeed:backward=40 40
switch maxspeed:backward=60 60
switch maxspeed:backward=70 70
switch maxspeed:backward=80 80
switch maxspeed:backward=90 90
switch maxspeed:backward=100 100
switch maxspeed:backward=110 110
switch maxspeed:backward=120 120
switch maxspeed:backward=130 130
switch maxspeed:backward=urban 50
switch maxspeed:backward=rural 100
999
assign maxspeed_explicit =
switch maxspeed=50 50
switch maxspeed=30 30
switch maxspeed=10 10
switch maxspeed=20 20
switch maxspeed=40 40
switch maxspeed=60 60
switch maxspeed=70 70
switch maxspeed=80 80
switch maxspeed=90 90
switch maxspeed=100 100
switch maxspeed=110 110
switch maxspeed=120 120
switch maxspeed=130 130
switch maxspeed=urban 50
switch maxspeed=rural 100
if reversedirection=yes then maxspeed_backward else maxspeed_forward
assign maxspeed =
min if is_avoided_toll_road then 0 else 999
min if is_avoided_motorway then 0 else 999
min onewayspeedlimit
min accessspeedlimit
min maxspeed_explicit
min maxspeed_implicit
min maxspeed_surface maxspeed_tracktype
assign costfactor = if equal maxspeed 0 then 10000 else 0
assign minspeed =
switch highway=motorway|motorway_link|trunk 75 0
# way priorities used for voice hint generation
assign priorityclassifier =
if ( highway=motorway ) then 30
else if ( highway=motorway_link ) then 29
else if ( highway=trunk ) then 28
else if ( highway=trunk_link ) then 27
else if ( highway=primary ) then 26
else if ( highway=primary_link ) then 25
else if ( highway=secondary ) then 24
else if ( highway=secondary_link ) then 23
else if ( highway=tertiary ) then 22
else if ( highway=tertiary_link ) then 21
else if ( highway=unclassified ) then 20
else if ( isresidentialorliving ) then 6
else if ( highway=service ) then 6
else if ( highway=track ) then if tracktype=grade1 then 4 else 2
else if ( highway=bridleway|road ) then 2
else 0
# some more classifying bits used for voice hint generation...
assign isgoodoneway = if reversedirection=yes then oneway=-1
else if oneway= then junction=roundabout else oneway=yes|true|1
assign isroundabout = junction=roundabout
assign isgoodforcars = if greater priorityclassifier 6 then true
else if or isresidentialorliving highway=service then true
else if ( and highway=track tracktype=grade1 ) then true
else false
# ... encoded into a bitmask
assign classifiermask add isbadoneway
add multiply isgoodoneway 2
add multiply isroundabout 4
add multiply islinktype 8
add multiply isgoodforcars 16
add multiply isresidentialorliving 32
multiply caraccess_destination 64
---context:node # following code refers to node tags
#
# calculate logical car access to nodes
#
assign caraccess
switch motorcar=
switch motor_vehicle=
switch vehicle=
switch access=
not barrier=gate|bollard|lift_gate|cycle_barrier
access=yes|permissive|designated|destination
vehicle=yes|permissive|designated|destination
motor_vehicle=yes|permissive|designated|destination
motorcar=yes|permissive|designated|destination
assign initialcost =
switch and avoid_toll barrier=toll_booth 1000000
switch caraccess
0
1000000
assign maxspeed =
if or crossing=traffic_signals highway=traffic_signals
then
switch greater way:priorityclassifier 24 5
switch greater way:priorityclassifier 22 3
switch greater way:priorityclassifier 20 1
0
else if railway=level_crossing then 0
else 999