-
Notifications
You must be signed in to change notification settings - Fork 3
/
Trekking-Poutnik.brf
800 lines (642 loc) · 36.3 KB
/
Trekking-Poutnik.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
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
# Poutnik's Trekking profile template for Trekking profile variants
# Version 2.7.* - Univ factor adjust system, Changed back to quadratic function
# - Merged tandem by Leopold Keller
# - Not Too Steep mode hills=6
# - ported ETA parameters from Trekking.brf
# - ported %parameters% shared with Trekking.brf to be able to use them in BRouter-web dialog.
# - tweaked UnivFactorCoefficient.
# - Travel_Mode
#
# *) = See also https://github.com/poutnikl/Brouter-profiles/wiki
# **) = See also https://github.com/poutnikl/Trekking-Poutnik/wiki
# ***) = See also https://github.com/poutnikl/Brouter-profiles/wiki/Glossary
#
# LEGEND
#
# Legend above is the placeholder for generated comments of final profiles
# See the HistoryLog.txt file for file history, the wikis above for verbose comments.
# bstart /global
---context:global
# Bike profile
assign validForBikes = true
assign is_wet 0 # %is_wet% Wet_conditions
assign avoid_unpaved 0 # %avoid_unpaved%
assign cycleroutes_pref 0.2 # also CRP *) costfactor penalty for not being cycleroute
assign MTB_factor 0.0 # default 0.0, *)
assign smallpaved_factor 0.0 # default 0.0, *)
assign hills 1 # 1=default / 0=BRouter default/ 1=+ penalty for uphills >3.0%/ 2=velomobile-like avoiding slopes, 3= simulates ascend/length time equiv.
# 4=valley mode, 5=No-Flats mode, 6=Not steep mode
assign isbike_for_mainroads true # default=true / if false then bike friendly tag hints for mainroads are ignored, keeping their high penalties. v2.5.20
assign path_preference 0.0 # 0.0 as default, try 0-20, see ***)
assign UnifactorAdjust 0.0 # 0.0 as default, Use value let says -0.75..+0.75.
assign tandem_mode 0 # 0 as default, changing it increases pushpenalty, haulpenalty, dismountpenalty below
assign Travel_Mode add 0 add 0 add 0 add 0 add 0 add 0 add 0 add 0 add 0 0
# 0 as default, optins are additive as 2^N numbers
# options marked by the same +)-like mark are mutually exclusive
# options marked by the same x)-like mark are additive
# 1 as hills 2 ( 1/80 uphill 0.5/80 downhill ) +)
# 2 as +20 kg and -15 Watts as heavy load expedition mode
# 4 as hills 6 (NotTooSteepMode) +) ( default 8-13% transition slope)
# 8 as avoid_unsafe
assign consider_smoothness 1 # 1 as default
assign allow_traffic_penalty 1 # 1 as default
# Use the following switches to change behaviour
assign allow_steps = true # %allow_steps% | Set to false to disallow steps | boolean
assign allow_ferries = true # %allow_ferries% | set to false to disallow ferries | boolean
assign avoid_unsafe = false # %avoid_unsafe% | Set to true to avoid standard highways | boolean
assign considerTurnRestrictions = false # %considerTurnRestrictions% | Set to true to take turn restrictions into account | boolean
assign processUnusedTags = false # %processUnusedTags% | Set to true to output unused tags in data tab | boolean
# Change elevation parameters
assign consider_elevation = true # %consider_elevation% | Set to false to ignore elevation in routing | boolean
# Kinematic model parameters (travel time computation)
assign totalMass = 90 # %totalMass% | Mass (in kg) of the bike + biker, for travel time computation | number
assign maxSpeed = 45 # %maxSpeed% | Absolute maximum speed (in km/h), for travel time computation | number
assign S_C_x = 0.225 # %S_C_x% | Drag coefficient times the reference area (in m^2), for travel time computation | number
assign C_r = 0.01 # %C_r% | Rolling resistance coefficient (dimensionless), for travel time computation | number
assign bikerPower = 100 # %bikerPower% | Average power (in W) provided by the biker, for travel time computation | number
# ----- profile kinematic model modifications
assign bikermass 90
assign bikemass 14
assign luggagemass 20
assign bikerPowerDrop 15
# 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]
assign turnInstructionCatchingRange = 20 # %turnInstructionCatchingRange% | Within this distance (in m) several turning instructions are combined into one and the turning angles are better approximated to the general direction | number
assign turnInstructionRoundabouts = true # %turnInstructionRoundabouts% | Set to "false" to avoid generating special turning instructions for roundabouts | boolean
assign StrictNOBicycleaccess 0 # 0 allows but penalizes foot only access / 1 forbides foot only access.
assign valley_nonflat_multiplier = 2.0
assign allow_default_barrier_restriction false # If true, default access for barrier=gate is false. see node context
assign ignore_cycle_barrier 1 # a cycle barrier has no effect with the default value 1 (usually ok for normal bikes)
# ----------------------------------------------------------------------------------------------------
# Internal parameters - not intended to be tweaked by end users, unless they know what they are doing.
#
# new in 2.7
assign debug false
assign debugcost 5.0
# # new in 2.7
# BEGIN - Internal parareters for hills = 6 - experimental avoiding of too steep hills
# via strongly penalizing uphillcostfactor
# ***) = See also https://github.com/poutnikl/Brouter-profiles/wiki/Glossary
assign TooSteepUphill 5.0 # slope below this uphill limit ( % ) has no penalization
assign TooSteepbufferreduce 7.0 # The width of the uphill scope transient zone
assign TooSteepUphillCost 80.0 # can be used optionally, but is rather overrun by the uphillcostfactor.
assign TooSteepCostFactor 20 # for uphill scope > TooSteepUphill + TooSteepbufferreduce
# with the transient zone TooSteepUphill .. TooSteepUphill + TooSteepbufferreduce
assign TooSteepPenaltybuffer 12.0 # higher than default 5 to filter SRTM artefacts
assign TooSteepMaxbuffer 20.0 # higher than default 10 to filter SRTM artefacts
# END - Internal parareters for hills = 6 - experimental avoiding of too steep hills via strongly penalizing uphillcostfactor
# == Travel_mode - parameter overriding begin (v2.7)
assign c_tm_h2 1
assign c_tm_mass 2
assign c_tm_h6 4
assign c_tm_aa 8
assign tm_aa not lesser Travel_Mode c_tm_aa
assign Travel_Mode sub Travel_Mode ( switch tm_aa c_tm_aa 0 )
assign tm_h6 not lesser Travel_Mode c_tm_h6
assign Travel_Mode sub Travel_Mode ( switch tm_h6 c_tm_h6 0 )
assign tm_mass not lesser Travel_Mode c_tm_mass
assign Travel_Mode sub Travel_Mode ( switch tm_mass c_tm_mass 0 )
assign tm_h2 not lesser Travel_Mode c_tm_h2
assign Travel_Mode sub Travel_Mode ( switch tm_h2 c_tm_h2 0 )
assign hills if tm_h6 then 6 else if tm_h2 then 2 else hills
assign totalMass add bikemass add bikermass ( switch tm_mass luggagemass 0 )
assign bikerPower sub bikerPower ( switch tm_mass bikerPowerDrop 0 )
assign avoid_unsafe if tm_aa then true else avoid_unsafe
assign TooSteepUphill if tm_h6 then 8 else TooSteepUphill #Not too steep
assign TooSteepbufferreduce if tm_h6 then 5 else TooSteepbufferreduce #Not too steep
# == Travel_mode - parameter overriding end
#new in 2.5.12
assign NoFlatMode equal hills 5
assign ValleyMode equal hills 4
assign TooSteepMode equal hills 6 #v2.8
assign originalisbike false
# Do not confuse these profile internals
# with BRouter parameters without the "value".
assign uphillcostvalue switch equal hills 1 70 switch equal hills 2 80
switch equal hills 3 60 switch ValleyMode 150
switch NoFlatMode 0 switch TooSteepMode TooSteepUphillCost
0
assign uphillcutoffvalue switch equal hills 1 3.0 switch equal hills 2 1.0
switch equal hills 3 0.5 switch ValleyMode 1.5
switch NoFlatMode 1.5 switch TooSteepMode TooSteepUphill
1.5
assign downhillcutoffvalue switch equal hills 1 1.5 switch equal hills 2 0.5
switch equal hills 3 1.5 switch ValleyMode 1.5
switch NoFlatMode 1.5 switch TooSteepMode 0.5
1.5
assign downhillcostvalue switch equal hills 1 60 switch equal hills 2 80
switch equal hills 3 0 switch ValleyMode 150
switch NoFlatMode 0 switch TooSteepMode 80
0
assign Flat_Penalty if NoFlatMode then 1.5 else 0.0
# ==============================================
# ===== Road preference processing =====
# ==============================================
# positive smallpaved factor effect subtracts itself from MTB factor effect
# on MTB-like OSM way preference and elevation effect attenuation
#v2.5.14 assign MTBminusSP_factor sub MTB_factor ( max 0 smallpaved_factor ) - pre v2.5.14
#v2.5.14
assign Hill_factor min 3 max -3 sub MTB_factor smallpaved_factor
assign Road_factor min 3 max -3 ( sub ( sub 0.0 MTB_factor ) smallpaved_factor )
assign positive_smallpaved_factor not lesser smallpaved_factor 0.0
assign abs_smallpaved_factor multiply ( switch positive_smallpaved_factor 1.0 -1.0 ) smallpaved_factor
assign MTB_hillcostfactor multiply 0.3333 Hill_factor
# It changes hillcosts to be 0.0 at Hill_factor = 3.0 and twice at -3.0
# Hill_factor 1..-1 leads hillcost to decrease e.g. from 60 to 40 / increase from 60 to 80
# ==============================================
# ===== Elevation processing =====
# ==============================================
assign downhillcost if ( consider_elevation ) then ( multiply ( sub 1.0 MTB_hillcostfactor ) downhillcostvalue ) else 0
assign uphillcost if ( consider_elevation ) then (
if TooSteepMode then uphillcostvalue else ( multiply ( sub 1.0 MTB_hillcostfactor ) uphillcostvalue ) )
else 0
assign uphillcutoff if ( consider_elevation ) then (
if TooSteepMode then uphillcutoffvalue
else ( multiply ( max 0.0 min 1.0 add 1.0 MTB_hillcostfactor ) uphillcutoffvalue ) )
else 1.5
assign downhillcutoff if ( consider_elevation ) then ( multiply ( max 0.0 min 1.0 add 1.0 MTB_hillcostfactor ) downhillcutoffvalue ) else 1.5
assign elevationpenaltybuffer if ValleyMode then 10
else if TooSteepMode then TooSteepPenaltybuffer else 5 # 5 is trekking default
assign elevationmaxbuffer if ValleyMode then 20
else if TooSteepMode then TooSteepMaxbuffer
else 10 # 10 is trekking default
assign elevationbufferreduce if ValleyMode then 0.0
else if TooSteepMode then TooSteepbufferreduce
else ( multiply 0.333 max uphillcutoff downhillcutoff ) # 0.0 is trekking default
# ======================================================
# ===== pushing and tandem mode related penalties =====
# ======================================================
assign pushpenaltydefault 6
assign pushpenaltytandemdefault 6
assign pushpenaltySensitivity 1.0
assign pushpenaltyRoadHill max 1 add pushpenaltydefault multiply pushpenaltySensitivity multiply 0.5 ( sub Road_factor Hill_factor )
assign pushpenalty switch tandem_mode max pushpenaltyRoadHill pushpenaltytandemdefault
pushpenaltyRoadHill # added to the costfactor where cycling is not allowed
assign dismountpenalty switch tandem_mode 250 100 # added to initialcost of a way or node when forced to get off bike
assign haulpenalty switch tandem_mode 500 40 # added to costfactor where the bike needs to be lifted and carried
assign uphillCFshift 0.0 # experimental shifting of up/downhillcostfactors as alternative way of
assign downhillCFshift 0.0 # prioritizing/penalizing of up/downhills, based on length, not elevation
assign pass1coefficient 1.8
assign pass2coefficient 0
assign use_proposed_cn 1 # 0 as default, considers proposed cycle networks as unmarked but valid cycleroutes.
assign unsafe_penalty_value 1.0 # 1 - was 2 in Trekking, but this may cause U-like safe routes
assign cost_of_unknown 2.0 # 2 as default, cost of highway=
# ==============================================
# ===== Ford crossing global data =====
# ==============================================
assign c_ford_initialcost_node = 500
assign c_ford_initialcost_way = 1000
assign c_ford_costfactor = 50
assign million = 1000000
assign ford_handling_coef
switch ( lesser Hill_factor -1.49 ) million switch ( lesser Hill_factor -0.99 ) 20
switch ( lesser Hill_factor -0.49 ) 5.0 switch ( lesser Hill_factor 0.01 ) 1.0
switch ( lesser Hill_factor 0.51 ) 0.4 switch ( lesser Hill_factor 1.01 ) 0.1
switch ( lesser Hill_factor 1.51 ) 0.05 0.0
assign ford_initialcost_way = if ( equal ford_handling_coef million ) then million else
if ( equal ford_handling_coef 0.0 ) then 0.0 else
multiply c_ford_initialcost_way ford_handling_coef
assign ford_initialcost_node = if ( equal ford_handling_coef million ) then million else
if ( equal ford_handling_coef 0.0 ) then 0.0 else
multiply c_ford_initialcost_node ford_handling_coef
assign ford_costfactor = if ( equal ford_handling_coef million ) then 9999 else
if ( equal ford_handling_coef 0.0 ) then 1.0 else
add 1.0 multiply ( sub c_ford_costfactor 1 ) ford_handling_coef
assign UDcostON true
assign ncncoef max 0 min 1 multiply cycleroutes_pref 0.2
assign lcncoef max 0 min 1 multiply cycleroutes_pref 1.0
# bend /global
# bstart /way
---context:way # following code refers to way-tags
# bstart /wayvariables
assign isicn route_bicycle_icn=yes
assign isncn or route_bicycle_ncn=yes ncn=yes
assign isrcn or route_bicycle_rcn=yes rcn=yes
assign islcn or route_bicycle_lcn=yes lcn=yes
assign any_cycleroute or route_bicycle_icn=yes or route_bicycle_ncn=yes or route_bicycle_rcn=yes route_bicycle_lcn=yes
assign any_cn_yes or lcn=yes or rcn=yes ncn=yes
assign any_cn_proposed or lcn=proposed or rcn=proposed ncn=proposed
assign any_cn or any_cn_yes switch use_proposed_cn any_cn_proposed 0
assign nodeaccessgranted or any_cycleroute any_cn
assign is_ldcr if ( equal cycleroutes_pref 0.0 ) then false else nodeaccessgranted
assign istrack highway=track|road|path|footway
assign ismainroad highway=motorway|motorway_link|trunk|trunk_link|primary|primary_link|secondary|secondary_link|tertiary|tertiary_link|unclassified
assign isotherroad = not or istrack ismainroad
assign hascycleway = not
and ( or cycleway= cycleway=no|none ) and ( or cycleway:left= cycleway:left=no ) ( or cycleway:right= cycleway:right=no )
#2.6.* inserted originalisbike option
assign isbike_candidate or bicycle_road=yes or bicycle=yes|permissive|designated or hascycleway
if originalisbike then lcn=yes else nodeaccessgranted
assign isbike and ( or ( not ismainroad ) isbike_for_mainroads ) isbike_candidate
assign ispaved surface=paved|asphalt|concrete|paving_stones|metal|wood #metal, wood added in v2.7
assign isunpaved not or surface= or ispaved or surface=fine_gravel surface=cobblestone
assign probablyGood = or ispaved and ( or isbike highway=footway ) not isunpaved #probably good surface - weather independent
assign turncost if ismainroad then 90 else if ispaved then 60 else 30
# Turn cost is based solely on estimation of road speediness and eventual time cost of turning, partially promoting tracks )
assign ismuddy and is_wet
and ( not surface=gravel|pebblestone ) # ***)
( or isunpaved ( and surface= and highway=track|path not tracktype=grade1 ) )
assign nosurface or surface= surface=unknown
assign nosurfacenortracktype and nosurface tracktype=
assign ishard or ispaved or tracktype=grade1 surface=cobblestone|sett|compacted|fine_gravel|gravel|pebblestone
assign issoft not or nosurface ishard
assign isresidentialorliving = or highway=residential|living_street living_street=yes
assign noCrossingPenalty = and not hascycleway ( or ismainroad highway=residential|living_street|service )
# bend /wayvariables
# bstart /wayaccess
assign defaultaccess =
if access= then not motorroad=yes
else if access=private|no then false
else true
assign bikeaccess =
if nodeaccessgranted then true
else if hascycleway then true
else if bicycle= then ( if bicycle_road=yes then true else
if vehicle= then ( if highway=footway then false else defaultaccess )
else not vehicle=private|no )
else not bicycle=private|no|dismount
assign footaccess =
if bikeaccess then true
else if bicycle=dismount then true
else if foot= then defaultaccess
else not foot=private|no
assign accesspenalty =
if bikeaccess then 0
else if footaccess then
( if StrictNOBicycleaccess then 10000 else pushpenalty )
else 10000
# handle one-ways. On primary roads, wrong-oneways should be close to forbidden
# while on other ways we just add pushpenalty (default was 4) to the costfactor
# as you are allowed to push your bike.
assign badoneway =
if reversedirection=yes then
if oneway:bicycle=yes then true
else if oneway= then junction=roundabout
else oneway=yes|true|1
else oneway=-1
assign onewaypenalty =
if ( badoneway ) then
if cycleway=opposite|opposite_lane|opposite_track then 0
else if oneway:bicycle=no then 0
else if highway=primary|primary_link then 50
else if highway=secondary|secondary_link then 30
else if highway=tertiary|tertiary_link then 20
else pushpenalty
else 0.0
# bend /wayaccess
# bstart /initialcost
assign initialclassifier
if route=ferry then 1
else if not bikeaccess then 16
else if ( ford=yes ) then 15
else if ( highway=motorway|motorway_link ) then 2
else if ( highway=trunk|trunk_link ) then 3
else if ( highway=primary|primary_link ) then 4
else if ( highway=secondary|secondary_link ) then 5
else if ( highway=tertiary|tertiary_link ) then 6
else if ( highway=unclassified ) then 7
else if ( highway=residential ) then 8
else if ( highway=living_street ) then 9
else if ( highway=service ) then 10
else if ( highway=footway ) then 11
else if ( istrack ) then 12
else if ( highway=cycleway ) then 13
else 14
assign initialcost
if route=ferry then 10000
else if ( ford=yes ) then ford_initialcost_way
else add ( switch bikeaccess 0 dismountpenalty )
if ( highway=motorway|motorway_link|trunk|trunk_link ) then 500
else if ( highway=primary|primary_link ) then 120
else if ( highway=secondary|secondary_link ) then 80
else if ( highway=tertiary|tertiary_link|unclassified ) then 50
else 30
# bend /initialcost
# bstart /roadmaxpenalties
# bstart /roughness_penalty
assign smoothness_penalty
# http://wiki.openstreetmap.org/wiki/Key:smoothness
if not consider_smoothness then 0.0 else
if smoothness= then 0.0 else
if smoothness=excellent|very_good|good then 0.0 else
if smoothness=intermediate then 0.2 else
if smoothness=bad|robust_wheels then 0.5 else
if smoothness=very_bad|high_clearance then 1.2 else
if smoothness=horrible|off_road_wheels then 2.5 else
if smoothness=very_horrible then 5.0 else
if smoothness=impassable then 10.0 else
0.0
assign mtb_scale_penalty if not consider_smoothness then 0.0 else
# Remember this is for trekking bikes, not MTB. There are MTB dedicated profiles.
# http://wiki.openstreetmap.org/wiki/Key:mtb:scale
if mtb:scale= then 0.0 else if mtb:scale=0- then 0.0 else
if mtb:scale=0 then 0.0 else if mtb:scale=0+ then 0.3 else
if mtb:scale=1- then 0.7 else if mtb:scale=1 then 1.2 else
if mtb:scale=1+ then 1.8 else if mtb:scale=2- then 2.5 else
if mtb:scale=2 then 5.0 else if mtb:scale=2+ then 10.0 else
if mtb:scale=3 then 15.0 else
if mtb:scale=4|5|6 then 9000
else 0.0
assign roughness_penalty max smoothness_penalty max mtb_scale_penalty ( if ford=yes then ( sub ford_costfactor 1 ) else 0 )
# bend /roughness_penalty
# bstart /MTB_SP_tweaks
assign rough_coef = add 1.0 ( multiply 0.33 roughness_penalty )
assign univ_factor_coef_raw
if ismainroad then (
add ( switch isunpaved -0.5 0 )
switch highway=motorway|motorway_link|trunk|trunk_link 1.0
switch highway=primary|primary_link 0.9
switch highway=secondary|secondary_link 0.7
switch highway=tertiary|tertiary_link 0.4
switch highway=unclassified 0.25
0
) else if istrack then (
add ( switch highway=path|footway -0.25 0.0 )
switch or ispaved tracktype=grade1 0.1
multiply rough_coef
switch ( nosurfacenortracktype ) ( switch isbike 0.0 -0.25 )
switch nosurface
( switch or isbike tracktype=grade2|grade3 -0.25 -0.5 )
switch surface=compacted|fine_gravel -0.25
switch surface=cobblestone|sett -0.4
switch surface=ground|grass -0.5
switch surface=sand|dirt -0.6
switch surface=gravel|pebblestone|mud -0.75
-0.6
)
else
( switch ispaved 0.25 switch isunpaved -0.25 0.0 )
# UCF = UCFR + UFA - UFA * UCFR * UCFR
assign univ_factor_coef if equal UnifactorAdjust 0.0 then univ_factor_coef_raw else
sub ( add univ_factor_coef_raw UnifactorAdjust )
( multiply UnifactorAdjust multiply univ_factor_coef_raw univ_factor_coef_raw )
assign nonpath_penalty =
if equal path_preference 0.0 then 0.0 # nonpath_penalty inactive
else multiply ( max 0 path_preference )
if ismainroad then 1
else if not or istrack highway=cycleway then 0.6
else if ispaved then 0.4
else if or not highway=path
or not isunpaved tracktype=grade1|grade2
then 0.25
else if or not isunpaved
or not highway=path
or not tracktype=grade3|grade4|grade5 surface=gravel|cobblestone|pebblestone
then 0.15
else 0.0
assign MTB_factor_for_road if ( equal MTB_factor 0.0 ) then 0.0
else multiply MTB_factor univ_factor_coef
assign abs_univ_factor
if lesser univ_factor_coef 0.0 then multiply -1.0 univ_factor_coef
else univ_factor_coef
assign smallpaved_factor_for_road
if ( equal smallpaved_factor 0.0 ) then 0.0 else
multiply abs_smallpaved_factor
if positive_smallpaved_factor then abs_univ_factor else ( sub 1.0 abs_univ_factor )
# bend /MTB_SP_tweaks
# bstart /HWclass_bfactor_components
assign highwayclass_basefactor
if ismainroad then
switch highway=trunk|trunk_link 1.8 switch highway=primary|primary_link 1.5
switch highway=secondary|secondary_link 1.2 switch highway=tertiary|tertiary_link 1.1 1.0
else if istrack then
switch highway=track 1.0 switch highway=path 1.1 switch highway=footway 1.2 1.0 # highway=road
else
switch highway=pedestrian 2.0 switch highway=bridleway 3.0
switch highway=cycleway 1.0 switch isresidentialorliving 1.0
switch highway=service 1.1 cost_of_unknown
assign tracktype_penalty
if tracktype= then 0.0 else
switch tracktype=grade1 0.0 switch tracktype=grade2 0.4 switch tracktype=grade3 0.7
switch tracktype=grade4 0.9 switch tracktype=grade5 1.0 0.5
assign surface_penalty
if nosurface then 0.0 else
switch surface=asphalt|paved 0.0 switch surface=concrete|paving_stones 0.2
switch surface=sett|compacted 0.4 switch surface=cobblestone|ground|earth|unpaved|dirt|fine_gravel 0.6
switch surface=grass|sand 1.0 switch surface=gravel|pebblestone 1.5 0.6
assign tracktype_surface_penalty
if nosurfacenortracktype then ( switch ismainroad 0.0 switch isotherroad 0.0 switch highway=path 0.8 0.4 )
else if nosurface then tracktype_penalty
else if tracktype= then surface_penalty else
max tracktype_penalty surface_penalty
assign not_isbike_penalty if isbike then 0.0
else if ismainroad then
add switch bicycle=use_sidepath 2.0 0.0
switch highway=trunk|trunk_link 8.2 switch highway=primary|primary_link 1.5
switch highway=secondary|secondary_link 0.4 0.3 # tertiary|tertiary_link|unclassified
else if istrack then
switch highway=footway 3.5 switch or ispaved tracktype=grade1 0.0
switch and tracktype= not isunpaved ( switch highway=path 3.5 1.0 )
switch tracktype= 3.0 switch tracktype=grade1 0.2
switch tracktype=grade2 0.6 switch tracktype=grade3 1.2
switch tracktype=grade4 2.0 switch tracktype=grade5 3.0
3.0
else
switch highway=pedestrian 2.0 switch highway=bridleway 2.0
switch highway=cycleway 0.0 switch highway=residential|living_street 0.0
switch highway=service 0.0 0.0
assign wet_penalty if not is_wet then 0.0 else
switch surface=cobblestone|sett 1.0 switch ispaved 0.0
switch surface=compacted 0.6 switch surface=fine_gravel 0.8
switch surface= switch not istrack 0.5 switch highway=path 2.0 1.0
switch surface=grass switch highway=path 2.5 1.5
switch surface=ground|earth|unpaved|sand|dirt|mud switch highway=path 3.5 2.0
2.0
# bend /HWclass_bfactor_components
# bend /roadmaxpenalties
# bstart /trafficpenalties
# Penalty for unsafe roads. As wet fallback, it does not so strictly avoid unsafe
assign unsafe_penalty
if and avoid_unsafe and ismainroad not isbike
then multiply unsafe_penalty_value ( if is_wet then 0.5 else 1.0 )
else 0.0
assign trafficpenalty0 = (
if not allow_traffic_penalty then 0.0 else
if highway=primary|primary_link then
(
if estimated_traffic_class=4 then 0.2
else if estimated_traffic_class=5 then 0.4
else if estimated_traffic_class=6|7 then 0.6
else 0
)
else if highway=secondary|secondary_link then
(
if estimated_traffic_class=3 then 0.2
else if estimated_traffic_class=4 then 0.4
else if estimated_traffic_class=5 then 0.6
else if estimated_traffic_class=6|7 then 1
else 0
)
else if highway=tertiary|tertiary_link then
(
if estimated_traffic_class=2 then 0.1
else if estimated_traffic_class=3 then 0.3
else if estimated_traffic_class=4 then 0.5
else if estimated_traffic_class=5|6|7 then 1
else 0
)
else 0
)
assign trafficpenalty =
if hascycleway then min 0.3 trafficpenalty0
else trafficpenalty0
# bend /trafficpenalties
# bstart /costfactors
assign penaltymax = max roughness_penalty max tracktype_surface_penalty max wet_penalty trafficpenalty
assign rawcostfactor ( # can be <1, adjusted to >=1 in final step of calculation of costfactor, uphillcostfactor,downhillcostfactor
switch and highway= not route=ferry 10000 #only highways unless ferry
switch highway=motorway|motorway_link|proposed|abandoned 10000
# all other exclusions below (access, steps, ferries,..) should not be deleted by the decoder, to be available in voice-hint-processing
min 9999
switch highway=steps switch allow_steps haulpenalty 10000
switch route=ferry switch allow_ferries 5.67 10000
switch highway=construction 10000
if and avoid_unpaved isunpaved then 50
else add highwayclass_basefactor
add not_isbike_penalty
add unsafe_penalty
max penaltymax
nonpath_penalty
)
assign isCFgt9997 greater rawcostfactor 9997
assign LDCRboost multiply sub 1.0 rawcostfactor cycleroutes_pref
assign cycleroute_tweak
#2.6 reworked : non cyclenetwork penalty = + cycleroutes_pref ( 0..1 , default 0.2)
# ICN boost = - ( CF - 1 ) * cycleroutes_pref, leading to CF=1.0 for cycleroutes_pref = 1.0
# other CN: weitgted average of above, with weights ncncoef, lcncoef shifting with cycleroutes_pref
if not greater cycleroutes_pref 0.0 then
0.0
else if not is_ldcr then
cycleroutes_pref
else if isicn then
LDCRboost
else if isncn then
add multiply ncncoef cycleroutes_pref
multiply ( sub 1.0 ncncoef ) LDCRboost
else
add multiply lcncoef cycleroutes_pref
multiply ( sub 1.0 lcncoef ) LDCRboost
# can be <1, adjusted to >=1 in final step of calculation
# of costfactor, uphillcostfactor,downhillcostfactor
assign rawcostfactor2
if isCFgt9997 then
rawcostfactor
else
if debug then
add debugcost
add MTB_factor_for_road
smallpaved_factor_for_road
else
add rawcostfactor
add cycleroute_tweak
add MTB_factor_for_road
smallpaved_factor_for_road
assign access-penalty max onewaypenalty accesspenalty
assign costfactor
if isCFgt9997 then
rawcostfactor2
else
add access-penalty
add Flat_Penalty
max 1.0 rawcostfactor2
assign uphillcostfactor
if debug then costfactor else
if or not UDcostON isCFgt9997 then
costfactor
else
add access-penalty
add switch TooSteepMode ( sub TooSteepCostFactor 1.0 ) 0.0
if ValleyMode then
( multiply rawcostfactor2 valley_nonflat_multiplier )
else
add uphillCFshift
add rawcostfactor2
switch ismainroad
( multiply 0.4 sub univ_factor_coef 0.5 )
( multiply -0.5 univ_factor_coef )
assign downhillcostfactor
if debug then costfactor else
if or not UDcostON isCFgt9997 then
costfactor
else
add access-penalty
max 1.0
if ValleyMode then
( multiply rawcostfactor2 valley_nonflat_multiplier )
else
add downhillCFshift
add rawcostfactor2
multiply -0.2 univ_factor_coef
# bend /costfactors
# bstart /priorityclassifiers
# 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=cycleway ) then 6
else if ( or bicycle=designated bicycle_road=yes ) then 6
else if ( highway=track ) then if tracktype=grade1 then 6 else 4
else if ( highway=bridleway|road|path|footway ) then 4
else if ( highway=steps ) then 2
else if ( highway=pedestrian ) then 2
else 0
# some more classifying bits used for voice hint generation...
assign isbadoneway = not equal onewaypenalty 0
assign isgoodoneway = if reversedirection=yes then oneway=-1
else if oneway= then junction=roundabout else oneway=yes|true|1
assign isroundabout = junction=roundabout
assign islinktype = highway=motorway_link|trunk_link|primary_link|secondary_link|tertiary_link
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
multiply isgoodforcars 16
# bend /priorityclassifiers
# bend /way
# bstart /node
---context:node # following code refers to node tags
assign initial_cost_node 0 # 0 as default
assign defaultaccess =
if ( access= ) then if allow_default_barrier_restriction then not barrier=gate # add default barrier restrictions here! - modified v2.5.15, conditioned in 2.6
else true
else if ( access=private|no ) then false
else true
assign bikeaccess =
if highway=crossing then ( or not bicycle=no|dismount way:noCrossingPenalty )
else if nodeaccessgranted=yes then true
else if bicycle= then
(
if vehicle= then defaultaccess
else not vehicle=private|no
)
else not bicycle=private|no|dismount
assign footaccess =
if bicycle=dismount then true
else if foot= then defaultaccess
else not foot=private|no
assign initialcost =
add ( if ( and barrier=cycle_barrier|chicane not ignore_cycle_barrier ) then
( add ( switch bikeaccess dismountpenalty 0 ) haulpenalty )
else if highway=traffic_signals then 120
else if highway=stop then 60
else if and highway=crossing crossing=no then 300 # workaround affecting road routing
else if ( or ford=yes highway=ford ) then ford_initialcost_node
else initial_cost_node )
if bikeaccess then 0 else ( if footaccess then dismountpenalty else 1000000 )
# bend /node