* speed up hop-to-hop calculations

* better and faster trip clustering: trip tries
* add --write-colors to extract line colors from OSM data
* refactor config parameter names, update default pfaedle.cfg
* add --stats for writing a stats.json file
* add --no-fast-hops, --no-a-star, --no-trie for debugging
* general refactoring
This commit is contained in:
Patrick Brosi 2022-01-03 22:27:59 +01:00
parent f1822868c5
commit 4c29892658
126 changed files with 14576 additions and 12196 deletions

View file

@ -3,6 +3,10 @@
# Authors: Patrick Brosi <brosi@informatik.uni-freiburg.de>
[tram, bus, coach, subway, rail, gondola, funicular, ferry]
routing_transition_penalty_fac: 0.0083
routing_station_move_penalty_fac: 0.00087
# Regular expressions and station comparision is
# always case insensitive!
station_normalize_chain:
@ -334,22 +338,9 @@ osm_line_relation_tags:
from_name=from
to_name=to
# attr name together with the
# max distance in meters between any of the groups members and
# a potential new member
# first matching rule will be taken
# only applies to nodes that match osm_filter_station!
osm_station_group_attrs:
uic_ref=500
wikidata=500
[public_transport=stop_area]uic_ref=500
[public_transport=stop_area]wikidata=500
name=100
[public_transport=stop_area]name=100
# max distance in meters between a snapped station position and the
# original station position
osm_max_snap_distance: 10, 100, 200
# max distance in meters between a snapped position on an
# edge and the input GTFS/OSM station
osm_max_snap_distance: 200
# max edge level to which station will be snapped
osm_max_snap_level: 2
@ -372,24 +363,31 @@ osm_track_number_tags:
local_ref
ref
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.25
routing_lvl2_fac: 1.5
routing_lvl3_fac: 2
routing_lvl4_fac: 2.5
routing_lvl5_fac: 3.5
routing_lvl6_fac: 5
routing_lvl7_fac: 7
# avg speed on segment levels, in km/h
osm_lvl0_avg_speed: 120 # default level
osm_lvl1_avg_speed: 90
osm_lvl2_avg_speed: 65
osm_lvl3_avg_speed: 50
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 20
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
# Punishment (in meters) to add to the distance
# Punishment (in seconds) to add to the distance
# function if a vehicle performans a full turn
routing_full_turn_punish: 3000
routing_full_turn_penalty: 180 # 3 minutes
routing_station_distance_punish_fac: 3.14
# Penalty added to non-station placements
routing_non_station_penalty: 0.5
routing_non_osm_station_punish: 100
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
routing_platform_unmatched_punish: 2000
# If the platform does not match, add this penalty
routing_platform_unmatched_penalty: 0.1
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
# Max angle that should be counted as a full turn
routing_full_turn_angle: 100
@ -397,24 +395,25 @@ routing_full_turn_angle: 100
# Max angle in a route from a station to an already reachable neighbar
routing_snap_full_turn_angle: 100
# Punishment (in meters) to add to the distance
# function if a vehicle passes a station node without
# stopping there
routing_pass_thru_station_punish: 100
# Factor by which the vehicle slows down in a one way street (factor 5
# means it will take 5 times longer)
osm_one_way_speed_penalty_fac: 5
# Punishment factor for every meter a vehicle
# travels through a one-way edge
routing_one_way_meter_punish_fac: 1
# Additional one-time time penalty for entering a one-way segment
# in seconds
osm_one_way_entry_cost: 300
# Punishment factor for every meter a vehicle
# travels through an edge without any matching line
# information
routing_line_unmatched_punish_fac: 1
# If a segment has no matching line attributes, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
routing_line_unmatched_time_penalty_fac: 1.5
routing_line_station_to_unmatched_time_penalty: 1.2
routing_line_station_from_unmatched_time_penalty: 1.1
# Punishment factor for every meter a vehicle
# travels through an edge without any line
# information when no specific line was requested
# routing_no_lines_punish_fac: 0
# If a segment has no line attributes at all, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
# routing_no_lines_penalty_fac: 1
# special line normalization for trains
line_normalize_chain:
@ -558,6 +557,12 @@ osm_filter_keep:
type=restriction:motorcar
osm_filter_lvl1:
highway=trunk
highway=trunk_link
highway=primary
highway=primary_link
osm_filter_lvl2:
highway=secondary
highway=secondary_link
bus=yes
@ -574,22 +579,22 @@ osm_filter_lvl1:
trolley_bus=yes
psv=designated
osm_filter_lvl2:
osm_filter_lvl3:
highway=tertiary
highway=tertiary_link
osm_filter_lvl3:
osm_filter_lvl4:
highway=unclassified
highway=residential
highway=road
osm_filter_lvl4:
osm_filter_lvl5:
highway=living_street
highway=pedestrian
highway=service
psv=no
osm_filter_lvl5:
osm_filter_lvl6:
bus=no
service=siding
access=permissive
@ -597,6 +602,7 @@ osm_filter_lvl5:
access=no
service=parking_aisle
highway=footway
highway=track
# OSM entities to drop, as k=v. Applies to nodes, edges and
# relations.
@ -714,6 +720,12 @@ osm_filter_station:
highway=bus_stop
amenity=bus_station
osm_filter_turning_cycle:
highway=turning_cycle
highway=turning_loop
junction=roundabout
highway=mini_roundabout
# Relation fields that should be used for catching the lines that
# occur on an edge. Only relations that have been kept during the
# filtering above will be checked. The 'linename' will be normalized
@ -727,26 +739,20 @@ osm_line_relation_tags:
line_name=ref,name # careful, no space after/before comma allowed!
from_name=from
to_name=to
line_color=colour,color
# max distance in meters between a OSM station candidate
# and the input GTFS station
osm_max_station_cand_distance: 200
# attr name together with the
# max distance in meters between any of the groups members and
# a potential new member
# first matching rule will be taken
# only applies to nodes that match osm_filter_station!
osm_station_group_attrs:
uic_ref=500
wikidata=500
name=100
# max distance in meters between a snapped station position and the
# original station position
osm_max_snap_distance: 10, 50, 100
osm_max_snap_fallback_distance: 300
# max distance in meters between a snapped position on an
# edge and the input GTFS/OSM station
osm_max_snap_distance: 100
osm_max_snap_level: 5
# max distance between a snapped OSM station and is snap
# point to still be considered a "OSM station"
osm_max_osm_station_distance: 8.0
# sorted by priority, first found attr will be taken
@ -757,22 +763,48 @@ osm_station_name_attrs:
# the track number tag in stop nodes, first one is taken
osm_track_number_tags: local_ref
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.25
routing_lvl2_fac: 1.5
routing_lvl3_fac: 1.75
routing_lvl4_fac: 2.25
routing_lvl5_fac: 3
routing_lvl6_fac: 4
routing_lvl7_fac: 5
# avg speed on segment levels, in km/h
osm_lvl0_avg_speed: 85 # default level
osm_lvl1_avg_speed: 70
osm_lvl2_avg_speed: 55
osm_lvl3_avg_speed: 40
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 20
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
# Punishment (in meters) to add to the distance
# Factor by which the vehicle slows down in a one way street (factor 5
# means it will take 5 times longer)
osm_one_way_speed_penalty_fac: 5
# Additional one-time time penalty for entering a one-way segment
# in seconds
osm_one_way_entry_cost: 300
# If a segment has no matching line attributes, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
routing_line_unmatched_time_penalty_fac: 1.5
routing_line_station_to_unmatched_time_penalty: 1.2
routing_line_station_from_unmatched_time_penalty: 1.1
# If a segment has no line attributes at all, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
# routing_no_lines_penalty_fac: 1
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.1
# Punishment (in seconds) to add to the distance
# function if a vehicle performans a full turn
routing_full_turn_punish: 500
routing_full_turn_penalty: 120 # 2 minutes
routing_station_distance_punish_fac: 2.5
# Penalty added to non-station placements
routing_non_station_penalty: 0.5
routing_non_osm_station_punish: 500
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
# Max angle that should be counted as a full turn
routing_full_turn_angle: 20
@ -782,26 +814,6 @@ routing_snap_full_turn_angle: 110
osm_max_node_block_distance: 10
# Punishment (in meters) to add to the distance
# function if a vehicle passes a station node without
# stopping there
routing_pass_thru_station_punish: 0
# Punishment factor for every meter a vehicle
# travels through a one-way edge
routing_one_way_meter_punish_fac: 4
routing_one_way_edge_punish: 5000
# Punishment factor for every meter a vehicle
# travels through an edge without any matching line
# information
# routing_line_unmatched_punish_fac: 1.75
# Punishment factor for every meter a vehicle
# travels through an edge without any line
# information when no specific line was requested
# routing_no_lines_punish_fac: 0
[coach]
@ -850,14 +862,14 @@ osm_filter_lvl7:
service=parking_aisle
highway=footway
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.15
routing_lvl2_fac: 1.5
routing_lvl3_fac: 1.75
routing_lvl4_fac: 2.25
routing_lvl5_fac: 2.5
routing_lvl6_fac: 3
routing_lvl7_fac: 4
osm_lvl0_avg_speed: 120 # default level
osm_lvl1_avg_speed: 90
osm_lvl2_avg_speed: 65
osm_lvl3_avg_speed: 50
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 20
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
osm_max_snap_level: 5
@ -958,20 +970,9 @@ osm_line_relation_tags:
from_name=from
to_name=to
# attr name together with the
# max distance in meters between any of the groups members and
# a potential new member
# first matching rule will be taken
# only applies to nodes that match osm_filter_station!
osm_station_group_attrs:
uic_ref=500
wikidata=500
name=100
# max distance in meters between a snapped station position and the
# original station position
osm_max_snap_distance: 10, 50, 100
# max distance in meters between a snapped position on an
# edge and the input GTFS/OSM station
osm_max_snap_distance: 100
osm_max_snap_level: 4
@ -984,22 +985,25 @@ osm_station_name_attrs:
# the track number tag in stop nodes, first one is taken
osm_track_number_tags: local_ref
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.5
routing_lvl2_fac: 2
routing_lvl3_fac: 2.5
routing_lvl4_fac: 3.5
routing_lvl5_fac: 5
routing_lvl6_fac: 5
routing_lvl7_fac: 5
# avg speed on segment levels, in km/h
osm_lvl0_avg_speed: 85 # default level
osm_lvl1_avg_speed: 70
osm_lvl2_avg_speed: 55
osm_lvl3_avg_speed: 40
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 20
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
# Punishment (in meters) to add to the distance
# Punishment (in seconds) to add to the distance
# function if a vehicle performans a full turn
routing_full_turn_punish: 2000
routing_full_turn_penalty: 180 # 3 minutes
routing_station_distance_punish_fac: 3.14
# Penalty added to non-station placements
routing_non_station_penalty: 0.5
routing_non_osm_station_punish: 235
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
# Max angle that should be counted as a full turn
routing_full_turn_angle: 80
@ -1007,24 +1011,21 @@ routing_full_turn_angle: 80
# Max angle in a route from a station to an already reachable neighbar
routing_snap_full_turn_angle: 80
# Punishment (in meters) to add to the distance
# function if a vehicle passes a station node without
# stopping there
routing_pass_thru_station_punish: 100
# Factor by which the vehicle slows down in a one way street (factor 5
# means it will take 5 times longer)
osm_one_way_speed_penalty_fac: 2
# Punishment factor for every meter a vehicle
# travels through a one-way edge
routing_one_way_meter_punish_fac: 1
# If a segment has no matching line attributes, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
routing_line_unmatched_time_penalty_fac: 1.5
routing_line_station_to_unmatched_time_penalty: 1.2
routing_line_station_from_unmatched_time_penalty: 1.1
# Punishment factor for every meter a vehicle
# travels through an edge without any matching line
# information
routing_line_unmatched_punish_fac: 0.5
# Punishment factor for every meter a vehicle
# travels through an edge without any line
# information when no specific line was requested
# routing_no_lines_punish_fac: 0
# If a segment has no line attributes at all, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
# routing_no_lines_penalty_fac: 1
[gondola]
@ -1104,20 +1105,9 @@ osm_line_relation_tags:
from_name=from
to_name=to
# attr name together with the
# max distance in meters between any of the groups members and
# a potential new member
# first matching rule will be taken
# only applies to nodes that match osm_filter_station!
osm_station_group_attrs:
uic_ref=500
wikidata=500
name=100
# max distance in meters between a snapped station position and the
# original station position
osm_max_snap_distance: 10, 50, 100
# max distance in meters between a snapped position on an
# edge and the input GTFS/OSM station
osm_max_snap_distance: 100
osm_max_snap_level: 4
@ -1130,22 +1120,25 @@ osm_station_name_attrs:
# the track number tag in stop nodes, first one is taken
osm_track_number_tags: local_ref
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.5
routing_lvl2_fac: 2
routing_lvl3_fac: 2.5
routing_lvl4_fac: 3.5
routing_lvl5_fac: 5
routing_lvl6_fac: 5
routing_lvl7_fac: 5
# avg speed on segment levels, in km/h
osm_lvl0_avg_speed: 85 # default level
osm_lvl1_avg_speed: 70
osm_lvl2_avg_speed: 55
osm_lvl3_avg_speed: 40
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 20
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
# Punishment (in meters) to add to the distance
# Punishment (in seconds) to add to the distance
# function if a vehicle performans a full turn
routing_full_turn_punish: 2000
routing_full_turn_penalty: 120 # 2 minutes
routing_station_distance_punish_fac: 3.14
# Penalty added to non-station placements
routing_non_station_penalty: 0.5
routing_non_osm_station_punish: 235
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
# Max angle that should be counted as a full turn
routing_full_turn_angle: 80
@ -1153,24 +1146,21 @@ routing_full_turn_angle: 80
# Max angle in a route from a station to an already reachable neighbar
routing_snap_full_turn_angle: 80
# Punishment (in meters) to add to the distance
# function if a vehicle passes a station node without
# stopping there
routing_pass_thru_station_punish: 100
# Factor by which the vehicle slows down in a one way street (factor 5
# means it will take 5 times longer)
osm_one_way_speed_penalty_fac: 2
# Punishment factor for every meter a vehicle
# travels through a one-way edge
routing_one_way_meter_punish_fac: 1
# If a segment has no matching line attributes, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
routing_line_unmatched_time_penalty_fac: 1.2
routing_line_station_to_unmatched_time_penalty: 1.15
routing_line_station_from_unmatched_time_penalty: 1.1
# Punishment factor for every meter a vehicle
# travels through an edge without any matching line
# information
routing_line_unmatched_punish_fac: 0.5
# Punishment factor for every meter a vehicle
# travels through an edge without any line
# information when no specific line was requested
# routing_no_lines_punish_fac: 0
# If a segment has no line attributes at all, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
# routing_no_lines_penalty_fac: 1
[funicular]
@ -1281,20 +1271,9 @@ osm_line_relation_tags:
from_name=from
to_name=to
# attr name together with the
# max distance in meters between any of the groups members and
# a potential new member
# first matching rule will be taken
# only applies to nodes that match osm_filter_station!
osm_station_group_attrs:
uic_ref=500
wikidata=500
name=100
# max distance in meters between a snapped station position and the
# original station position
osm_max_snap_distance: 10, 50, 100
# max distance in meters between a snapped position on an
# edge and the input GTFS/OSM station
osm_max_snap_distance: 100
osm_max_snap_level: 4
@ -1307,22 +1286,25 @@ osm_station_name_attrs:
# the track number tag in stop nodes, first one is taken
osm_track_number_tags: local_ref
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.5
routing_lvl2_fac: 2
routing_lvl3_fac: 2.5
routing_lvl4_fac: 3.5
routing_lvl5_fac: 5
routing_lvl6_fac: 5
routing_lvl7_fac: 5
# avg speed on segment levels, in km/h
osm_lvl0_avg_speed: 85 # default level
osm_lvl1_avg_speed: 70
osm_lvl2_avg_speed: 55
osm_lvl3_avg_speed: 40
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 20
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
# Punishment (in meters) to add to the distance
# Punishment (in seconds) to add to the distance
# function if a vehicle performans a full turn
routing_full_turn_punish: 2000
routing_full_turn_penalty: 120 # 2 minutes
routing_station_distance_punish_fac: 3.14
# Penalty added to non-station placements
routing_non_station_penalty: 0.5
routing_non_osm_station_punish: 235
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
# Max angle that should be counted as a full turn
routing_full_turn_angle: 80
@ -1330,24 +1312,21 @@ routing_full_turn_angle: 80
# Max angle in a route from a station to an already reachable neighbar
routing_snap_full_turn_angle: 80
# Punishment (in meters) to add to the distance
# function if a vehicle passes a station node without
# stopping there
routing_pass_thru_station_punish: 100
# Factor by which the vehicle slows down in a one way street (factor 5
# means it will take 5 times longer)
osm_one_way_speed_penalty_fac: 2
# Punishment factor for every meter a vehicle
# travels through a one-way edge
routing_one_way_meter_punish_fac: 1
# If a segment has no matching line attributes, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
routing_line_unmatched_time_penalty_fac: 1.2
routing_line_station_to_unmatched_time_penalty: 1.15
routing_line_station_from_unmatched_time_penalty: 1.1
# Punishment factor for every meter a vehicle
# travels through an edge without any matching line
# information
routing_line_unmatched_punish_fac: 0.5
# Punishment factor for every meter a vehicle
# travels through an edge without any line
# information when no specific line was requested
# routing_no_lines_punish_fac: 0
# If a segment has no line attributes at all, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
# routing_no_lines_penalty_fac: 1
[ferry]
@ -1366,7 +1345,10 @@ osm_filter_keep:
# Only nodes that have been kept during the filtering above will be
# checked.
osm_filter_station:
ferry=yes
public_transport=stop_position
amenity=ferry_terminal
mooring=ferry
station=ferry
railway=stop
railway=halt
@ -1387,20 +1369,9 @@ osm_line_relation_tags:
from_name=from
to_name=to
# attr name together with the
# max distance in meters between any of the groups members and
# a potential new member
# first matching rule will be taken
# only applies to nodes that match osm_filter_station!
osm_station_group_attrs:
uic_ref=500
wikidata=500
name=100
# max distance in meters between a snapped station position and the
# original station position
osm_max_snap_distance: 10, 100, 200
# max distance in meters between a snapped position on an
# edge and the input GTFS/OSM station
osm_max_snap_distance: 500
osm_max_snap_level: 4
@ -1413,22 +1384,25 @@ osm_station_name_attrs:
# the track number tag in stop nodes, first one is taken
osm_track_number_tags: local_ref
routing_lvl0_fac: 1 # default level
routing_lvl1_fac: 1.5
routing_lvl2_fac: 2
routing_lvl3_fac: 2.5
routing_lvl4_fac: 3.5
routing_lvl5_fac: 5
routing_lvl6_fac: 5
routing_lvl7_fac: 5
# avg speed on segment levels, in km/h
osm_lvl0_avg_speed: 70 # default level
osm_lvl1_avg_speed: 60
osm_lvl2_avg_speed: 50
osm_lvl3_avg_speed: 35
osm_lvl4_avg_speed: 30
osm_lvl5_avg_speed: 25
osm_lvl6_avg_speed: 10
osm_lvl7_avg_speed: 5
# Punishment (in meters) to add to the distance
# Punishment (in seconds) to add to the distance
# function if a vehicle performans a full turn
routing_full_turn_punish: 100
routing_full_turn_penalty: 120 # 2 minutes
routing_station_distance_punish_fac: 3.14
# Penalty added to non-station placements
routing_non_station_penalty: 0.5
routing_non_osm_station_punish: 50
# If the station name does not match, add this penalty
routing_station_unmatched_penalty: 0.3
# Max angle that should be counted as a full turn
routing_full_turn_angle: 45
@ -1436,22 +1410,18 @@ routing_full_turn_angle: 45
# Max angle in a route from a station to an already reachable neighbar
routing_snap_full_turn_angle: 0
# Punishment (in meters) to add to the distance
# function if a vehicle passes a station node without
# stopping there
routing_pass_thru_station_punish: 0
# Factor by which the vehicle slows down in a one way street (factor 5
# means it will take 5 times longer)
osm_one_way_speed_penalty_fac: 2
# Punishment factor for every meter a vehicle
# travels through a one-way edge
routing_one_way_meter_punish_fac: 1
# Punishment factor for every meter a vehicle
# travels through an edge without any matching line
# information
routing_line_unmatched_punish_fac: 0.5
# Punishment factor for every meter a vehicle
# travels through an edge without any line
# information when no specific line was requested
# routing_no_lines_punish_fac: 0
# If a segment has no matching line attributes, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
routing_line_unmatched_time_penalty_fac: 1.2
routing_line_station_to_unmatched_time_penalty: 1.15
routing_line_station_from_unmatched_time_penalty: 1.1
# If a segment has no line attributes at all, multiply the
# time needed to traverse it with the given factor (should
# be > 1 for a punishment, values < 1 will prefer unmatching segments)
# routing_no_lines_penalty_fac: 1