Till senaste kommentaren
Detta inlägg är gammalt och kan innehålla inaktuell information.

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

  • 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.