February/March in KDE Itinerary
In the past two months since the last update localization of KDE Itinerary has been improved, more ticket formats are supported and work on public transport information infrastructure continued, among many other things.
New Features
Localized units
In locales using imperial units Itinerary now shows distance, speed and temperature values converted to the corresponding units.

If you are using one of those locales but still want to use metric units that of course remains possible, there’s a switch on the settings page for forcing the use of metric units.

Events
We are in the middle of conference season, so there were several opportunities to watch Itinerary-adjacent talks:
- Felix, Jonah and Marcus presented Transitous at the Railway and Open Transport track of FOSDEM.
- Also at FOSDEM, Itinerary had a cameo-appearance in Hans-Jörg Happel’s talk about Structured Email in the Modern Email track.
- I spoke at the Wikidata Data Reuse Days about Itinerary’s use of Wikidata. Wikimedia Germany also covered that in a blog post.
- We had two presentations at the FOSSGIS Konferenz, with me introducing Transitous and Felix covering the routing engine behind it in more detail (both in German).
Besides conference talks there were also a few related sprints and meetups:
- The bi-annual OSM Hack Weekend in Karlsruhe.
- Another iteration of the Carl’s Kitchen Sprint.
This continues with the Plasma (Mobile) Sprint in Graz three weeks from now.
Infrastructure Work
Transitous GBFS rollout
Transitous has started to test first/last mile routing with shared vehicles in a few areas. If things hold up this is will be gradually added in more areas where there necessary data is available.
Similar to the GTFS format for public transport schedule data, there’s GBFS as the open standard for positions of currently available shared vehicles. That’s covering anything from bikes over electric kick-scooters to cars.
Client-side we are prepared for this already, KPublicTransport support this as routing parameters e.g. with OpenTripPlanner backends already.
There’s however still more work needed to expose this properly in the UI, not just as ad-hoc options as it’s done now but also as part of a persisted personal routing profile.
DOSIPAS ticket barcode container support
The travel document extractor can now decode UIC’s “DOSIPAS” ticket barcode container. That stands for “Double Signed Package Structure” and is the designated replacement for the UIC 918.3 container format. It uses the very compact but nasty to parse ASN.1 unaligned packed encoding rules (uPER) instead of zlib-compressed ASCII-ish content, and allows for more modern cryptographic signatures.
Similar to UIC 918.3 it can contain multiple payloads, both standardized and vendor-specific ones. The predominant one we found so far is “FCB” (Flexible Content Barcode), an also ASN.1 uPER encoded common superset of all European ticket data models with several hundred (mostly optional) properties. We had two of the three FCB versions already implemented fortunately.
DOSIPAS tickets are in use in some areas of France for regional trains, e.g. Grand Est and Normandie.
While this generally should improve Itinerary’s ability to detect tickets correctly, to the point of importing by just scanning the barcode even, there’s a darker side to this as well, the “Double Signed” part in DOSIPAS. That’s (optional) infrastructure for shortlived ticket barcodes that the vendor app continuously regenerates, not unlike what 2FA apps do.
The mechanism for this is documented, so we could also implement this of course. The challenging part here however is getting to the necessary secret key used to generate the dynamic signature.
For now most of the DOSIPAS samples found in the wild are fortunately still static, e.g. in PDFs. Should the dynamic ones become mandatory at some point that would basically imply a mandatory use of the vendor app.
KPublicTransport journey subsection API
Continuing the work around trip queries mentioned last time, KPublicTransport’s journey API received to few changes to make selecting sub-sections of a journey easier and to make reassembling journeys from sub-sections possible.
The main technical limitation for this so far was that the departure and arrival stops were treated specially and couldn’t hold the same information as intermediate stops. That’s a historical leftover from before we even had support for intermediate stops and meant that shortening/extending a journey would lose information.
While maybe a seemingly small implementation detail this nevertheless required quite some effort, and will allow removing some limitations in e.g. how train trips can be edited in Itinerary.
Fixes & Improvements
Travel document extractor
- Added or improved travel document extractors for 12go, Amtrak, Color Lines, Eventyay, Flixbus, Ghotel, SBB, SNCF, UK national railways, Universe and VR.
- Fixed validity end date parsing in FCB customer card barcodes.
- Fixed a crash on VDV tickets without a basic ticket data block.
All of this has been made possible thanks to your travel document donations!
Public transport data
- Read operator and occupancy information from DB Zugportal onboard API.
- Fixed OJP journey queries using stop identifiers (used e.g. in Switzerland).
- Correctly merge journey sections with partial intermediate stop data.
Itinerary app
- Correctly display coach/seat numbers when having a separate seat reservation or multiple travelers with different seat reservations.
- Don’t show delay information for walking legs.
- Fixed showing intermediate stops for bus trips.
- Don’t hide essential trip group map elements on low zoom levels.
- Fixed trip group map bounding box computations for trips without elements that change locations.
- Fixed data loss when realtime information would change the type of a reservation.
- Changed importing data from OSM to use Nominatim, as described here.
- Allow transfers to favorite location independent of the next reservation.
- Correctly handle nested events when determining transfers.
- Disabled Deutsche Bahn online ticket import as the corresponding API is no longer available.
- Don’t show city name in location search results if that matches the station name.
- Update statistics automatically when removing trips.
- Fixed misrendered labels in wallet passes created by the vdv-pkpass converter.
Itinerary also benefited from work on improving the Android platform integration of KDE apps as well as various fixes in the QtQuick Controls Breeze Style.
How you can help
Feedback and travel document samples are very much welcome, as are all other forms of contributions. Feel free to join us in the KDE Itinerary Matrix channel.