BRouter Profile Verständnis Problem

Man kann hier
http://brouter.de/brouter-web/
verschiedene Alternativen wählen, aber das Profile unten links bleibt immer gleich.

Wie funktionieren also die Alternativen?

Ich erlaube mir eine zweite Frage anzuhängen:

Welche der Profile sind für’s Radrouting gedacht, nur die mit “bike” im Namen oder auch die mit “trekking”?

Für die Alternativen wird mehrfach geroutet. Und bei der Berechnung der “n-ten” Alternative dann alle greouteten Wege der ersten bis (n-1)-ten Alternative mit zusätzlich Kostenfaktor=1 bestraft.

Aus der Combobox Im wesentlichen:

        'trekking'
        'fastbike'
        'vm-forum-liegerad-schnell'
        'vm-forum-velomobil-schnell'
        'fastbike-lowtraffic'

folgende sind geringfuegige Modifikationen von “trekking”:

        'safety'
        'trekking-ignore-cr'
        'trekking-steep'
        'trekking-noferries'
        'trekking-nosteps'

und folgendes ist eine geringfuegige Modifikation von “fastbike”:

        'fastbike-asia-pacific'

Weitere Profile aus von anderen Autoren auch hier:

https://wiki.openstreetmap.org/wiki/BRouter#User_profiles

Frage 1+2, Danke kapiert, bis auf den Faktor=1. :wink:

Frage 3:

Warum wechselt er hier vom Radweg auf die Hauptstraße (kein Radfahrer würde dies tun)? (profile = trecking)

Der Radweg ist getaggt als path + bicycle/foot=designated + surface=asphalt.

http://brouter.de/brouter-web/#zoom=18&lat=51.753492&lon=7.469206&layer=OpenStreetMap&lonlats=7.460661,51.770283|7.511086,51.741865&nogos=&alternativeidx=0&format=geojson&profile=trekking

Im trecking profile würde ich übrigens die fast gleich lange verkehrsarme Variante über Schwarzer Damm und Ermen erwarten (unclassified).

Frage 4:

Kann man im Profile das Tag “is_sidepath” abfragen?

Weil da mindestens zwei Radrouten auf der Haupstrasse liegen,aber keine auf dem Radweg.

Man kann das über das “Data” Tab in BRouter-Web gut sehen, da erscheinen die Radrouten als “route_bicycle_rcn=yes route_bicycle_lcn=yes”. Da ist zwar auch “bicycle=use_sidepath” auf der HAuotstrasse, das wird aber von trekking bisher nicht ausgewertet.

Da ist aber nur teilweise eine Radroute drauf. Und “unclassified” ohne Radroute hat Kostenfaktor 1,35 (mit Radroute hat ein Weg immer den optimalen Kostenfaktor 1)

Ah, ok, die Radrouten müssen natürlich auf den Radweg umgelegt werden…

Schade, anscheinlich nicht:

“official” kennt er auch nicht…

Verbesserungsvorschlag für das Trekking Profil:

Bundesstraßen werden mit hohen Kosten versehen, es sei denn sie haben einen “bicycle-Hint” wie
bicycle=yes oder bicycle=permissive.

Ich würde noch cycleway=lane|track mit in den Hint nehmen damit Bundesstraßen mit Begleitradweg nicht ganz so hoch bestraft werden.
:sunglasses:

Beispiel:

http://brouter.de/brouter-web/#zoom=13&lat=51.7978&lon=7.4333&layer=OpenStreetMap&lonlats=7.447797,51.780931|7.479758,51.802618&nogos=&profile=trekking&alternativeidx=0&format=geojson

6,7 km statt 3,3 km über den Radweg an der B235.

Das kannst Du selbst, in dem Du Dir ein eigenes (lokales) Profil anlegst.
So habe ich das auch gemacht.

Grüße

Edit:
Weitere Infos gibts hier: https://forum.openstreetmap.org/viewtopic.php?id=19654

Ja ich weiß, dann muss ich aber jedesmal Copy,Paste und Upload machen, oder?

Dein eigenes Profil kannst Du - wie schon geschrieben - nur lokal abspeichern. brouter ist ja auch in erster Linie ein Offline-Router.
Für den Web-Client gilt, daß Du für jede Session Dein Profil neu hochladen mußt. Du kannst aber während Deiner Session auch zwischen den vorhandenen und Deinem Profil beliebig hin- und herwechseln.

Grüße

Edit:
Du kannst Dein Profil auch direkt im Web-Clienst im Fenster Profile ändern und neu hochladen. Dann hast Du halt keine lokale Kopie. Außerdem ist das recht unübersichtlich.

“is_sidepath” hatte ich nict auf dem Schirm. Ist mit ca. 2.000 in Taginfo aber auch noch nicht so präsent wie bicyicle=use_sidepath (60.000 in taginfo, und der ist immerhin drin in lookups.dat, wird aber in trekking nicht verwendet. Ich werd’s aufnehmen.

“official” ist ein alias zu “designated”, kennt er also doch.

O.k, das verstehe ich. Müssten aber fast alle Werte von cylceway sein, ausser no + none ? Irgendwie hatte ich da schon mal drüber nachgedacht über diese Ungleichbehandlung zwischen separat und nicht separat gemappten Radwegen und Argument war wohl, dass letzteres eher die Astwurzel-Pisten sind…

Ich muss dazusagen, dass ich beim Radrouting garnicht mehr an der vordersten Front der Entwickung bin, andere Leute beschäftigen sich intensiever damit. Hab’ nur bisher nicht den Mut gehabt, das “trekking” Profil als das Aushängeschild auszutauschen, weil dazu muss ich es ja wieder genauso so intensiv testen wie vor 3-4 Jahren. Nicht alles, was logisch scheint, hält dann auch im Odenwald oder in Frankfurt-City stand. Hab’ mir doch jetzt passend zur Midlife-Crisis ein Cabrio gekauft und bastel mehr am Autorouting :slight_smile:

Hi, ich häng mich mal mit meiner Frage dran:

Ich versuche, den tracking-Modus so zu ändern, dass er diese Fähre zulässt: http://brouter.de/brouter-web/#zoom=13&lat=51.0586&lon=6.9273&layer=OpenStreetMap&lonlats=6.918168,51.051316|6.917825,51.059496&nogos=&alternativeidx=0&format=geojson

Da fastbike die einzige Routingvariante ist, die Fähren akzeptiert, habe ich versucht, von da zu kopieren, aber das klappt irgendwie nicht.

Das hier ist mein Code:

# *** The trekking profile is for slow travel
# *** and avoiding car traffic, but still with
# *** a focus on approaching your destination
# *** efficiently.

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

# Use the following switches to change behaviour
# (1=yes, 0=no):

assign   consider_elevation   = true   # set to false to ignore elevation in routing
assign   allow_steps          = true   # set to false to disallow steps
assign   allow_ferries        = true   # set to false to disallow ferries
assign   ignore_cycleroutes   = false   # set to true for better elevation results
assign   stick_to_cycleroutes = false   # set to true to just follow cycleroutes
assign   avoid_unsafe         = false   # set to true to avoid standard highways
assign   turnInstructionMode  = 1  # 0=none, 1=auto-choose, 2=locus-style, 3=osmand-style

assign   validForBikes        = true

# the elevation parameters

assign downhillcost    = if consider_elevation then 60 else 0
assign downhillcutoff  = 1.5
assign uphillcost      = 1.5
assign uphillcutoff    = 1.5


# classifier constants

assign classifier_none     = 1
assign classifier_ferry    = 2

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

#
# pre-calculate some logical expressions
#

assign any_cycleroute =
     if      route_bicycle_icn=yes then true
     else if route_bicycle_ncn=yes then true
     else if route_bicycle_rcn=yes then true
     else if route_bicycle_lcn=yes then true
     else false

assign nodeaccessgranted =
     if any_cycleroute then true
     else lcn=yes

assign is_ldcr =
     if ignore_cycleroutes then false
     else any_cycleroute

assign isbike = or bicycle=yes or or bicycle=permissive bicycle=designated lcn=yes
assign ispaved = surface=paved|asphalt|concrete|paving_stones
assign isunpaved = not or surface= or ispaved surface=fine_gravel|cobblestone
assign probablyGood = or ispaved and isbike not isunpaved


#
# this is the cost (in Meter) for a 90-degree turn
# The actual cost is calculated as turncost*cos(angle)
# (Suppressing turncost while following longdistance-cycleways
# makes them a little bit more magnetic)
#
assign turncost = if is_ldcr then 0
                  else if junction=roundabout then 0
                  else 90


#
# 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 0
     else 10000

#
# implicit access here just from the motorroad tag
# (implicit access rules from highway tag handled elsewhere)
#
assign defaultaccess =
       if access= then not motorroad=yes
       else if access=private|no then false
       else true

#
# calculate logical bike access
#
assign bikeaccess =
       if any_cycleroute then true
       else if bicycle= then
       (
         if vehicle= then defaultaccess
         else not vehicle=private|no
       )
       else not bicycle=private|no|dismount

#
# calculate logical foot access
#
assign footaccess =
       if bikeaccess then true
       else if bicycle=dismount then true
       else if foot= then defaultaccess
       else not foot=private|no

#
# if not bike-, but foot-acess, just a moderate penalty,
# otherwise access is forbidden
#
assign accesspenalty =
       if bikeaccess then 0
       else if footaccess then 4
       else 10000

#
# handle one-ways. On primary roads, wrong-oneways should
# be close to forbidden, while on other ways we just add
# 4 to the costfactor (making it at least 5 - 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 4.0
       )
       else 0.0

#
# calculate the cost-factor, which is the factor
# by which the distance of a way-segment is multiplied
# to calculate the cost of that segment. The costfactor
# must be >=1 and it's supposed to be close to 1 for
# the type of way the routing profile is searching for
#
assign costfactor

  #
  # exclude rivers, rails etc.
  #
  if ( and highway= not route=ferry ) then 10000

  #
  # exclude motorways and proposed roads
  #
  else if ( highway=motorway|motorway_link ) then   10000
  else if ( highway=proposed|abandoned     ) then   10000

  #
  # all other exclusions below (access, steps, ferries,..)
  # should not be deleted by the decoder, to be available
  # in voice-hint-processing
  #
  else min 9999

  #
  # apply oneway-and access-penalties
  #
  add max onewaypenalty accesspenalty

  #
  # steps and ferries are special. Note this is handled
  # before the cycleroute-switch, to be able
  # to really exlude them be setting cost to infinity 
  #
  if ( highway=steps ) then ( if allow_steps then 40 else 10000 )
  else if ( route=ferry   ) then ( if allow_ferries then 0 else 10000 )

  #
  # handle long-distance cycle-routes.
  #
  else if ( is_ldcr ) then 1                   # always treated as perfect (=1)
  else
  add ( if stick_to_cycleroutes then 0.5 else 0.05 )  # everything else somewhat up

  #
  # some other highway types
  #
  if      ( highway=pedestrian                ) then 3
  else if ( highway=bridleway                 ) then 5
  else if ( highway=cycleway                  ) then 1
  else if ( highway=residential|living_street ) then ( if isunpaved then 1.5 else 1.1 )
  else if ( highway=service                   ) then ( if isunpaved then 1.6 else 1.3 )

  #
  # tracks and track-like ways are rated mainly be tracktype/grade
  # But note that if no tracktype is given (mainly for road/path/footway)
  # it can be o.k. if there's any other hint for quality
  #
  else if ( highway=track|road|path|footway ) then
  (
    if      ( tracktype=grade1 ) then ( if probablyGood then 1.0 else 1.3 )
    else if ( tracktype=grade2 ) then ( if probablyGood then 1.1 else 2.0 )
    else if ( tracktype=grade3 ) then ( if probablyGood then 1.5 else 3.0 )
    else if ( tracktype=grade4 ) then ( if probablyGood then 2.0 else 5.0 )
    else if ( tracktype=grade5 ) then ( if probablyGood then 3.0 else 5.0 )
    else                              ( if probablyGood then 1.0 else 5.0 )
  )

  #
  # When avoiding unsafe ways, avoid highways without a bike hint
  #
  else add ( if ( and avoid_unsafe not isbike ) then 2 else 0 )

  #
  # actuals roads are o.k. if we have a bike hint
  #
       if ( highway=trunk|trunk_link         ) then ( if isbike then 1.5 else 10  )
  else if ( highway=primary|primary_link     ) then ( if isbike then 1.2 else  3  )
  else if ( highway=secondary|secondary_link ) then ( if isbike then 1.1 else 1.6 )
  else if ( highway=tertiary|tertiary_link   ) then ( if isbike then 1.0 else 1.4 )
  else if ( highway=unclassified             ) then ( if isbike then 1.0 else 1.3 )

  #
  # default for any other highway type not handled above
  #
  else 2.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 ( highway=residential|living_street ) then  6
  else if ( highway=service                   ) then  6
  else if ( highway=cycleway                  ) then  6
  else if ( bicycle=designated                ) 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 highway=residential|living_street|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 =
       if ( access= ) then true # add default barrier restrictions here!
       else if ( access=private|no ) then false
       else true

assign bikeaccess =
       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 =
       if bikeaccess then 0
       else ( if footaccess then 100 else 1000000 )

Ich bin langsam mit meinem Latein am Ende, hat wer ne Idee? Irgendwo müssen wohl noch dicke Kostenfaktoren herkommen, ich find die allerdings nicht…

Btw, in fastbike fehlen einige | - Trenner

Grüße

Die Fähre selbst hat “nur” Kein Kostenfaktor=5, aber hier noch einmalig + 10km für den Übergang auf route=ferry:

#
# 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 0
     else 10000

Man muss sich die Fähren auf diese Weise vom Leib halten, da kommst sonst zuviel Mist raus.

Die grossen Rheinfähren findets aber doch noch.

Und wie nehme ich die + 10km raus?

track und lane sind halt am verbreitesten.
Des weiteren cycleway:left/right=track/lane.

erfolgreich getestet:


#### war: 10000

assign initialcost =
     if ( equal initialclassifier classifier_ferry ) then 1000
     else 0


Kann man aber eben umgekehrt schöner formulieren und gleichzeitig seltenere Tags mit einbinden.

Mir fällt grade spontan nichts ein, was außer no und none noch drauf hindeuten kann, dass es keine Spur gibt.

shared_lane ist ja so ein Grenzfall. In US wäre das keine eigene Spur, hier in D wird es ab und an für Schutzstreifen verwendet (dazu gibt’s auch nen eigenen Thread orgendwo…)

Grüße

Danke, werde ich die Tage mal ausprobieren.

So ganz durchblicke ich das aber noch nicht, warum das jetzt umgekehrt funktioniert :wink:

Grüße