# Vélo route tertiary-unclassified avoid Primary

#

# A fastbike could be a racing bike or a speed pedelec.

# But also at night or in rainy weather you might want

# to fallback to this one.

#

# Structure is similar to trekking.brf, see this for documenation.

#

# With default configuration (tested for Europe), trunks are

# strongly avoided even if there's no bike restriction

# (assuming implicit bicycle=no), and motorways are not allowed

# even with bicycle=yes). This is not the expected behavior for some countries

# such as Japan or Australia.

# Then, you should switch allow_motorways variable to true for these regions.

#

---context:global   # following code refers to global config

# Bike profile

assign validForBikes = true

# 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 ignore_cycleroutes       = false  # %ignore_cycleroutes% | Set to true for better elevation results | boolean

assign stick_to_cycleroutes     = false  # %stick_to_cycleroutes% | Set to true to just follow cycleroutes | 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

assign consider_traffic         = false  # %consider_traffic% | Set to true to avoid traffic | boolean

assign allow_motorways          = false  # %allow_motorways% | Set to true to allow motorways (useful in Asia / Oceania for example) | boolean

# Change elevation parameters

assign consider_elevation = true  # %consider_elevation% | Set to false to ignore elevation in routing | boolean

assign downhillcost       = 60    # %downhillcost% | Cost for going downhill | number

assign downhillcutoff     = 1.5   # %downhillcutoff% | Gradients below this value in percents are not counted. | number

assign uphillcost         = 0     # %uphillcost% | Cost for going uphill | number

assign uphillcutoff       = 1.5   # %uphillcutoff% | Gradients below this value in percents are not counted.  | number

assign downhillcost       = if consider_elevation then downhillcost else 0

assign uphillcost         = if consider_elevation then uphillcost else 0

# Kinematic model parameters (travel time computation)

assign totalMass  = 85     # %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 = 150    # %bikerPower% | Average power (in W) provided by the biker, for travel time computation | 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]

assign turnInstructionCatchingRange = 40    # %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

---context:way   # following code refers to way-tags

assign any_cycleroute or route_bicycle_icn=yes or route_bicycle_ncn=yes or route_bicycle_rcn=yes route_bicycle_lcn=yes

assign nodeaccessgranted or any_cycleroute lcn=yes

assign ispaved or surface=paved or surface=asphalt or surface=concrete surface=paving_stones

assign isunpaved not or surface= or ispaved or surface=fine_gravel surface=cobblestone

assign turncost = if junction=roundabout then 0

                  else 90

assign initialcost switch route=ferry 10000 0

#

# implicit access here just from the motorroad tag

# (implicit access rules from highway tag handled elsewhere)

#

assign defaultaccess

       switch access=

              (

                    if motorroad=yes then false

                    else if highway=motorway|motorway_link then false

                    else true

              )

              switch or access=private access=no

                     false

                     true

#

# calculate logical bike access

#

assign bikeaccess =

       or any_cycleroute

          switch bicycle=

                 switch bicycle_road=yes

                    true

                    switch vehicle=

                           ( if highway=footway then false else defaultaccess )

                           not vehicle=private|no

                 not or bicycle=private or bicycle=no bicycle=dismount

#

# calculate logical foot access

#

assign footaccess =

       or bikeaccess

          or bicycle=dismount

             switch foot=

                    defaultaccess

                    not or foot=private foot=no

#

# if not bike-, but foot-acess, just a moderate penalty,

# otherwise access is forbidden

#

assign accesspenalty

       switch bikeaccess

              0

              switch footaccess

                     6

                     10000

#

# handle one-ways. On primary roads, wrong-oneways should

# be close to forbidden, while on other ways we just add

# 6 to the costfactor (making it at least 7 - 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 6.0

       )

       else 0.0

# Eventually compute traffic penalty

assign hascycleway = not

  and ( or cycleway= cycleway=no|none ) and ( or cycleway:left= cycleway:left=no ) ( or cycleway:right= cycleway:right=no )

assign trafficpenalty0 =

    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 consider_traffic then

  (

    if hascycleway then min 0.3 trafficpenalty0

    else trafficpenalty0

  )

  else 0

assign isresidentialorliving = or highway=residential|living_street living_street=yes

assign costfactor

  switch and highway= not route=ferry  10000

  switch or highway=proposed highway=abandoned 10000

  min 9999

  add max onewaypenalty accesspenalty

  add trafficpenalty

  switch or highway=motorway highway=motorway_link    switch allow_motorways 1.5 10000

  switch or highway=trunk highway=trunk_link          switch allow_motorways 1.5 10

  switch or highway=primary highway=primary_link      2.0

  switch or highway=secondary highway=secondary_link  1.8

  switch or highway=tertiary highway=tertiary_link    1.1

  switch    highway=unclassified                      1.0

  switch    highway=pedestrian                        1.1

  switch    highway=steps                             1000

  switch    route=ferry                               5.67

  switch    highway=bridleway                         10

  switch    highway=cycleway                          1.1

  switch    isresidentialorliving                     switch isunpaved 1.1 1.2

  switch    highway=service                           switch isunpaved 1.1 1.2

  switch or highway=track or highway=road or highway=path highway=footway

   switch tracktype=grade1 switch isunpaved 3 1.2

   switch tracktype=grade2 switch isunpaved 10 3

   switch tracktype=grade3 10.0

   switch tracktype=grade4 20.0

   switch tracktype=grade5 30.0

   switch or bicycle=designated bicycle_road=yes 1.0

   switch ispaved 2.0 100.0

   10.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=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

---context:node  # following code refers to node tags

assign defaultaccess

       switch access=

              1 # add default barrier restrictions here!

              switch or access=private access=no

                     0

                     1

assign bikeaccess

       or nodeaccessgranted=yes

          switch bicycle=

                 switch vehicle=

                        defaultaccess

                        switch or vehicle=private vehicle=no

                               0

                               1

                 switch or bicycle=private or bicycle=no bicycle=dismount

                        0

                        1

assign footaccess

       or bicycle=dismount

          switch foot=

                 defaultaccess

                 switch or foot=private foot=no

                        0

                        1

assign initialcost

       switch bikeaccess

              0

              switch footaccess

                     300

                     1000000