Välkommen till Trafiklab:s användare- och supportforum! Ställ frågor, rapportera problem och hjälp oss med förslag och idéer!
Vid felrapporter ber vi dig inkludera exakt API-namn och om möjligt ett exempelanrop för att underlätta felsökningen. Glöm inte att ta bort din API-nyckel när du delar ditt exempelanrop.
Undrar du hur du får tillgäng Trafiklabs data? Läs vår introduktion här: https://www.trafiklab.se/hur-gor-jag
Welcome to Trafiklab's user and supportforum. Ask questions, report issues and help us improve with suggestions and ideas!
If you open a new issue, please always include the exact API you're talking about, and, if applicable, include a sample request so we can check if contains the right parameters. Don't forget to remove your API keys when sharing example requests.
Välkommen till Trafiklab:s kund- och supportforum! Ställ frågor, rapportera problem och hjälp oss med förslag och idéer!
Protobuf används som dataformat för realtidsdata i GTFS-standarden, och används därför i GTFS Regional Realtime samt GTFS Sweden 3 Realtime. Detta för att formatet är kompakt och snabbt att läsa, något som blir viktigt vid dataströmmar med mycket data som uppdateras ofta (till exempel fordonspositioner som uppdateras varje sekund för vissa operatörer).
Det finns två sätt att gå tillvägs för att läsa protobuf data:
- Man använder en protobuf-bibliotek (som ger stöd för protobuf formatet själv) i kombination med en .proto fil som definierar strukturen som används i GTFS-standarden.
- Man använder en gtfs-realtime bibliotek, som gör samma sak som ovan, men där man redan har kombinerat protobuf-formatet och gtfs-strukturen till 1 bibliotek som är enklare att använda.
Hur man läser protobuf data i olika programmeringsspråk hittar man här, med exempel i olika språk som tex C++: https://protobuf.dev/overview/
Proto-filen för GTFS Realtime hittar man här: https://gtfs.org/documentation/realtime/gtfs-realtime.proto
Färdiga gtfs-realtime bibliotek för olika språk hittar du här: https://github.com/MobilityData/gtfs-realtime-bindings/tree/master
Det finns inga bibliotek specifik för Swift, eftersom realtidsdata måste kombineras med statisk data. Detta görs typiskt på en server, eftersom tex mobiltelefoner inte är lämpad för att hantera de stora statiska datamängder. Servern däremot kan kombinera realtidsdatat med det som behövs from det statiska data (tex linjenummer, transportmedel, nästa hållplats) och returnera den som JSON data till en front-end lösning (web, app, ...).
Hälsningar,
Bert
Hur jag sedan ska gå vidare vet jag inte.
Det finns inte någon ni vet som har implementerat det i någon iPhone-lösning?
Skånetrafiken har ju bussar i realtid så de kanske använder era API.
Dock vill de kanske inte dela information.
Skånetrafikens busspositioner finns i realtid, tillsammans med information om nyttjandegrad, hur trångt det är ombord på bussen.
Som jag skrev tidigare så brukar man inte hämta positioner direkt till en mobiltelefon, utan implementerar man en liten serverapplikation som tar hand om realtidsdata och tillgängliggör den i ett format som passar mobilappen, tex som JSON.
Kvota på nyckeln kommer antagligen inte räcka till för att förse alla användare av en mobilapplikation med realtidspositioner, vilket är en till anledning till att hämta all protobuf data till en server, där man kombinerar realtidsdata och statiskt data, cachar resultatet, och skickar vidare till mobilapplikationen.
Hälsningar,
Bert
Har detta något att göra med hur ofta man anropar sitt API?
Om jag använder en separat server, finns det begränsningar då?
Detta har att göra med att realtidsdatat bara innehåller vad som har ändrats gentemot de planerade data. Man behöver alltså ladda ner de planerade data och läsa in dem, för att kunna tolka realtidsdatat. Eftersom de planerade data är flera hundra megabytes stor, skulle det vara väldigt segt att hantera på mobila apparat. Däremot kan man hantera de planerade data på en server (som bara behöver läsa datat en gång för alla användare), därefter kan den skicka exakt de data som behövs till de mobila apparater.
Till exempel kan planerade data innehålla att "902100001" är malmö C, och att " 1212000000123" är buss 1 mot malmö som avgår kl 12.00.
Realtidsdatat innehåller sen endast "Tur 1212000000123 är försenad med en minut vid 902100001" eller "Fordonet som kör tur 1212000000123 är vid koordinaterna x,y".Servern kan kombinera denna information så att mobilapplikationen kan efterfråga information för buss 1, varpå servern kan svara med tex "avgår kl 12.00 från hållplats med namn x, försenad med 1 minut och befinner sig vid koordinaterna x,y".
Något liknande har vi själv gjort för platsuppslag och stolptidtabeller med våra nya Trafiklab Realtime API:er, dock innehåller dessa inga realtidspositioner.
Hälsningar,
Bert