Till senaste kommentaren

Val av API för avgångar från varje station

Kan någon tipsa om vilket API jag ska välja för att se aktuella avgångar från varje tunnelbanestation i Stockholm? Jag testade med GTFS Regional Realtime och SL:s Realtidsinformation 4 men får inte ut det som jag är ute efter. I fallet med GTFS är det rätt mycket data och i fallet med Realtidsinformation 4 är antalet anrop begränsade till 30/m, vilket gör det svårt att hämta ut information för varje station. Tanken är att bygga en live karta vars enda uppgift är att visa en röd/grön/blå plupp på en karta som ska presentera vilket tåg som är på stationen.

Kommentarer

  • Hej!

    Om du vill visa information om alla stationer samtidigt måste man använda ett GTFS-flöde. Sen är det GTFS Regional som gäller om man vill ha realtidsdata.

    I ditt fall skulle det gå till såhär:
    - Du laddar ner de statiska GTFS data
    - Där hittar du hållplatser som du är intresserad i (stops.txt) samt information om rutter som röda, blåa och gröna linjen (routes.txt) och deras körningar (trips.txt).
    - Sen laddar du ner realtidsdata som innehåller förseningar, TripUpdates.pb. Där hittar du en sammling av trip updates, som har följande struktur:

    entity {
    id: "14010513984964949"
    trip_update {
    trip {
    trip_id: "14010000581778968"
    start_date: "20220103"
    schedule_relationship: SCHEDULED
    }
    stop_time_update {
    stop_sequence: 8
    arrival {
    delay: 46
    time: 1641200506
    uncertainty: 0
    }
    departure {
    delay: 62
    time: 1641200522
    uncertainty: 0
    }
    stop_id: "9022001022091002"
    }
    stop_time_update {
    stop_sequence: 13
    arrival {
    delay: -119
    time: 1641201001
    }
    departure {
    delay: -119
    time: 1641201001
    }
    stop_id: "9022001022151001"
    }
    timestamp: 1641200820
    }
    }

    Det här exemplet visar att trip 14010000581778968 (trip_id i trips.txt) på 03/01/2022 hade (uncertainty 0, hållplatsen är angjord) en försening av 46 sekunder vid ankomst till åttande hållplats (vilket var hållplats 9022001022091002 i stops.txt) och att den kommer vara 119 sekunder för tidigt vid trettonde hållplatsen. De "nya" ankomst- och avgångstider finns även med som tidsstämpel, så att du inte behöver att leta upp de originaltider i statiska datat.

    Avgånger som inte är försenad/för tidigt finns inte med i realtidsdata, för att få en lista på dem kan man "beräkna" dem genom att kolla vilka trips som kör idag (trips.txt till calendar_dates.txt genom service_id) för att sen slå upp dessa trips i stop_times.txt för att se vid vilka hållplatser de stannar (eller för att se vilka trips som stannar vid vilka hållplats).

    Låt inte denna beskrivning avskräcka dig från att använda GTFS - det låter mer komplicerad än det är.

    Säg till om vi kan hjälpa något mer.

    Hälsningar,
    Bert
    Bert på Trafiklab
  • Tjena Bert,

    Tack för ditt svar, det gav mig några idéer som jag ska försöka få ner i kod.

    Meanwhile, tänkte fråga dig om du har något bra tips hur TripsUpdates.pb kan läsas in i Python? Strukturen är minst sagt komplext (nestad).

    Jag satte ihop en pandas dataframe som innehåller all nödvändig information om alla tunnelbanetåg, stationer, stationsnamn, stopp- och avgångstider samt linjenamn baserat på information som jag får från GTFS static data.

    subway_data:
    route_id , route_type , route_des, trip_id direction_id, stop_id stop_name, arrival_time, departure_time, stop_sequence, stop_headsign

    Det jag försöker nu är att uppdatera värden för ankomst och avgångstider genom att slå ihop TripUpdates och min dataframe. TripUpdates informationen lever just nu i en separat dict i JSON format.

    Vänliga hälsningar,
    Denny

    D
  • Det enklaste är nog att bara loopa genom alla entities i en tripupdates fil. Sen kan du kolla för varje entity och varje stop_time_update om du behöver uppdatera något. Varje entity har en trip_id (förutom extra avgångar, de har ingen trip_id) och varje stop_time har en stop_sequence för att matcha med statiska datat.

    Exempel Python kod hittar du här:
    https://developers.google.com/transit/gtfs-realtime/examples/python-sample

    Hälsningar,
    Bert
    Bert på Trafiklab

Kommentera eller skriv ett nytt inlägg

Ditt namn och inlägg kan ses av alla. Din e-post visas aldrig publikt.