Source Copenhagen transit data from Rejseplanen GTFS

- Replace OSM Overpass transit data with the Rejseplanen GTFS feed
  (routes keyed by (agency, short name); styles from modes.yaml)
- Draw one shape per (style, ref, direction), choosing the shape that
  serves the most in-area stops so lines pass the stops we show
- Collapse stops by names (verified unambiguous); prune stops whose
  serving refs have no drawn line within 300 m
- Patch Københavns Havn + Nordhavn into the area polygon so ferry
  routes and sub-harbour metro tunnels survive clipping; 100 m buffer
  closes relation boundary slivers
- Drop OSM download pipeline; keep tiled basemap
This commit is contained in:
2026-09-17 21:07:40 +02:00
parent 4aca62ca1a
commit b7d51ca29f
12 changed files with 522 additions and 751 deletions
+15 -12
View File
@@ -4,13 +4,15 @@
zorder:
bus: 1
s_tog: 2
light_rail: 3
regional: 4
metro: 5
ferry: 2
s_tog: 3
light_rail: 4
regional: 5
metro: 6
line_width: # body width in points (outline = body + outline_width)
bus: 0.8
ferry: 1.4
s_tog: 2.0
light_rail: 2.0
regional: 1.8
@@ -21,14 +23,16 @@ outline_color: "#2b2b2b"
alpha:
bus: 0.45
ferry: 1.0
s_tog: 0.95
light_rail: 0.95
regional: 0.9
metro: 1.0
# Fallback palette when no GTFS route_color and no OSM colour tag are present.
# Metro / S-tog values mirror the OSM colour tags (verified). Regional trains
# have no OSM colour, so the palette supplies one.
# Line colours. The Rejseplanen GTFS feed leaves route_color empty for the
# Copenhagen operators, so in practice everything resolves to this palette.
# Metro / S-tog values mirror the official line colours; regional trains and
# the light rail have no operator colour, so the palette supplies one.
palette:
metro:
M1: "#008d41"
@@ -52,6 +56,8 @@ palette:
C: "#16a085"
S: "#2a6fb5"
default: "#c8a80e"
ferry:
default: "#2aa8e0" # harbour-bus blue
bus_filters:
# ref-based bus categorisation (regex applied to route ref)
@@ -73,11 +79,8 @@ basemap:
stations:
show: true # draw station markers (symbols without text)
styles: [metro, s_tog, regional, bus]
stop_cluster_m: # merge same-name stops within this distance (per mode)
metro: 200 # covers platform/entrance spread (~170m max)
s_tog: 400 # covers platform/entrance spread (~380m max)
regional: 500 # covers platform spread (~475m max)
bus: 100 # opposite sides of road, wide boulevards
# NOTE: stops/stations arrive pre-collapsed from prepare.py (name-keyed,
# one point per stop/station) — no clustering configuration lives here.
marker:
shape: circle # circle | square
fill: white