Vad du ser
Varje tunnelbanetåg, pendeltåg, spårvagn och lokalbanetåg i Stockholm som rapporterar sin position, som punkter i SL:s riktiga linjefärger som glider längs spåren. Klicka på ett tåg för linje, slutstation, försening och kommande hållplatser. Klicka på en station för nästa avgångar, uppdelade per riktning; klicka på en avgång så flyger kartan till just det tåget. Raderna i panelen släcker och tänder ett trafikslag i taget, och månen i hörnet byter till mörkt läge.
Stjärnmärk din hemstation så öppnas kartan där med avgångarna uppe, redo för morgonens fråga: hinner jag? Det finns en avgångstavla i fullskärm, och hela kartan går att lägga på hemskärmen som en app.
Bussar och båtar visas inte. Det är ett val, inte en brist: en spårkarta med två tusen bussar ovanpå är en busskarta.
Spåren är de riktiga
Kartans första version ritade linjerna som mjuka kurvor mellan stationerna. Det såg prydligt ut och var helt fel: pendeltågen svepte i en elegant båge över Riddarfjärdens vatten, trots att Citybanan går i tunnel därunder. Tidtabellsdatan innehåller nämligen bara var stationerna ligger, inte var rälsen går.
Numera hämtas spårgeometrin från OpenStreetMap, där Stockholms räls är kartlagd meter för meter, tunnlar inklusive. Varje linje ritas genom att hitta den kortaste vägen längs verklig räls mellan sina stationer. Det bjöd på en oväntad fälla: upp- och nedspår är kartlagda som separata spår som bara möts vid växlar, så en station som hamnade på fel spår kunde bara nås via en växel flera mil bort. Lösningen blev att låta rutten byta mellan parallella spår, mot en liten straffkostnad, precis som ett riktigt tåg byter vid en växel.
En detalj för den som gillar sådant: en enda station på kartan saknar avgångar att visa. Det är Kymlinge, spökstationen på blå linjen som byggdes men aldrig öppnades.
Tågen glider, de hoppar inte
GPS-flödet uppdaterar varje fordon ungefär var sjätte sekund, och ungefär en mätning av tolv är skräp: en position som skulle kräva att tåget kört i över 120 km/h genom Gamla stan. Ritade man punkterna rakt av skulle hela kartan rycka.
I stället förankras varje tåg vid sin senast trovärdiga mätning och glider sedan framåt längs rälsen i tidtabellens hastighet tills nästa mätning kommer. Är verkligheten före eller efter tidtabellen justeras farten mjukt tills de möts igen, som ett tåg som tar igen en försening. Uppenbart orimliga mätningar avvisas helt. Det är därför rörelsen ser ut som tågtrafik och inte som popcorn.
Den lömskaste buggen hittade jag på en perrong: hela kartan låg konsekvent en halv minut efter verkligheten. En position är redan sjutton sekunder gammal när den når webbläsaren, och kartan ritade tågen där de hade varit, inte där de var. Numera tillgodoräknas varje mätning sin egen ålder. En bonus av allt detta är att kartan vet hur sent ett tåg faktiskt ligger, så förseningen i rutan är uppmätt, inte gissad.
Och en princip som styr allt: tappar kartan livepositionerna säger den det, med gul text, och visar tidtabellslägen i stället. Gammal data ska aldrig animeras som om den vore färsk.
Det finns ingen server
Inget körs någonstans när ingen tittar. Sidan är statisk, och de två små funktioner som hämtar tågpositioner och geometri körs vid nätverkskanten hos Cloudflare först när din webbläsare frågar. En gång per natt bygger ett schemalagt jobb på GitHub om tidtabellsdatan, eftersom SL byter sina tur-id:n varje dygn, och lägger resultatet i en lagringshink som funktionerna läser ur. Det är hela systemet. Månadskostnaden är noll kronor.
Positionerna och tidtabellerna är öppna data från Trafiklab, spårgeometrin kommer från OpenStreetMap och bakgrundskartan från OpenFreeMap. Att allt det här finns fritt tillgängligt är ganska fantastiskt.
tidtabeller Trafiklab GTFS Static, byggs om varje natt
räls OpenStreetMap, hämtas när spår byggs om
drift Cloudflare Pages + R2, GitHub Actions, noll servrar
Stationsritningarna som stationsrutorna länkar till är inte mina: de är Albert Guillaumes verk. Han har tecknat över hundra Stockholmsstationer i genomskärning, med varje uppgång, rulltrappa och plattform på plats. Nedan hans T-Centralen, som ett smakprov; hela galleriet är värt en kvart av vem som helst.
Vem, och det finstilta
Kartan är ett hobbyprojekt av Matthew MacLaine, IT-ingenjör i Stockholm. Den blev till en helg och har vuxit därifrån; hittar du något konstigt får du gärna höra av dig till matthew@maclaine.se. Det finns en projektsida på GitHub och en längre byggberättelse på engelska på bloggen.