はじめに
🌻←これはひまわり
2020/02/08追記
今更OpenTripPlannerを知りました
穴があったら潜って冬眠したい
📖 前提条件
General Transit Feed Specification (GTFS)とGTFS Realtimeを理解していること
今回触れる事
- GTFS-JP
- GTFS Realtime
今回触れない事
- GTFS
- たんぽぽ
なぜ触れないのか
GTFSにはGTFSとGTFS-JP(標準的なバス情報フォーマット)とGoogleが拡張しているGTFSが存在し、日本では主にGTFS-JPが使われているから触れない
正直紛らわしいからGoogleのやつに統一して欲しい
🚩 この記事の目標
頭がたんぽぽになる前にAPIを使って欲しい事を伝える
🔗 利用するデータ
宇野バス: http://www3.unobus.co.jp/opendata
宇野バスのデータを使用する理由
ライセンスめっちゃ緩いから
普段乗っているのが宇野バス🚌であり、現実とデータの比較がしやすいから
オープンデータに関して
出会い
筆者は宇野バスのデータを約3年間研究してきた
その最中に出会った仕様との出会いをここに書いておく
🕛 リアルタイムデータの更新頻度
公式には
約20秒ごとに更新
と書かれているが、実際は3~25秒程の周期で更新されている
※2017年に__CSVデータ__で計測した時の値
🕓 リアルタイムデータの遅延
宇野バスのリアルタイムデータは現実から15~30秒程遅れている
果たしてこれはリアルタイムと言って良いのだろうか
✅ データの信頼性
運行中のバスがリアルタイムデータに無い時がある
リアルタイムデータに無い時は、そもそもバスからデータが送られていないらしい
※中の人に聞いた
📍 位置情報の誤差
たまに5m程離れた所に居る事がある
これは一般のスマートフォンで起こる位置ズレと同等
📝 その他メモ
本記事とは関係ないが、宇野バスのCSVデータは更新時に一瞬空になる
これはデータ内に//LAST
が存在するかどうかで更新処理が完了したか分かるらしい
※これも中の人に(ry
❗ 伝えたい事
オープンデータは所詮オープンデータなので、割り切って使おう
🍳 GTFSの調理法
まずは刺身にたんぽぽを(うわなにをすくぁwせdrftgyふじこlp
🚌 バスの位置情報と運行ルートの取得方法
これはGTFS Realtimeに含まれている**VehiclePosition**を使えば取得出来るのだけれど、方法が2通りある
-
VehiclePosition.trip.trip_id
を利用する方法 -
VehiclePosition.trip.route_id
とVehiclePosition.trip.start_date
とVehiclePosition.trip.start_time
を利用する方法
1は簡単、2の場合はGTFSを使ってtrip_id
を導き出さなければならない、面倒くさい
そして、trip_id
を使って**stop_times.txt**内を検索すると運行ルートが出てくる
が、実際は**calendar.txt**とかの処理もしないといけない、面倒くさい
とにかく面倒くさい
実際GTFSを調理している時に頭がたんぽぽになりかけたし、記事を書くのが面倒くさくなった
後で気づいた事だが、宇野バスのオープンデータはちゃんと整備されてて凄く扱いやすい
他社のオープンデータはマジで頭たんぽぽになる
特に両備、時刻表が存在しない停留所を何故残しているんだ
👄 愚痴だけでは終われない
面倒くさい事をしなくていいようにAPIを作りました
https://github.com/come25136/Atom
Atomは静的データとリアルタイムデータに対応しており、データの自動更新も行ってくれます
また、リアルタイムデータはsocket.ioを使用してWebSocketでデータが自動的に流れてきます(環境によってはポーリング)
※リアルタイムデータに関しては利用方法が定まっておらず、ドキュメントには記載していません
現時点では公開サーバーが無い為、試しに使ってみたいという方が居れば @come25136_airまでメッセージを送ってください
開発用の不安定なサーバーで良ければ、リンクをお教えします
余談
運賃の計算APIとかは用意していないので、必要であればプルリク送ってください