SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
Protocol Buffers入門から
各地のGTFS Realtimeを覗いてみよう
東京大学 生産技術研究所
標準的なバス情報フォーマット広め隊
伊藤昌毅
標準的なバス情報フォーマット/GTFS勉強会
第2部 コースC. GTFSプログラミング
2019年4月20日
東京大学 生産技術研究所
GTFSリアルタイム基礎
• アプリ開発者が交通事業
者のサーバ(バスロケ)
に問い合わせる際のプロ
トコル
• アプリとサーバの通信は
アプリ開発者の役割
– アプリから直接接続しない
• GTFSの存在が前提
事業者 配信元 ベンダー
Vehicle
Position
Trip
Update
Alert ライセンス
宇野バス 配信元 その筋屋 ○ ○ ○ CC BY 4.0
両備バス・
岡電バス 配信元 Bus-Vison(リオス) ○ ○ CC BY 4.0
和歌山バス 配信元 Bus-Vison(リオス) ○ ○ CC BY 4.0
佐賀市交通局 配信元 ○ ○ ○ CC BY 4.0
中津川市コミュ
ニティバス
配信元 SkyBrain(ヴァル研究所) ○ ○ CC BY 4.0
オープンデータとして提供されている
GTFSリアルタイムデータ
• GTFSリアルタイムのデータを格
納する方式
• 構造のあるデータをシリアライ
ズする形式
– プログラミング言語非依存
– 動作環境(プラットフォーム)非依存
– 拡張可能な仕組み
• XMLより小容量で高速
Protocol Buffersとは?
https://developers.google.com/protocol-buffers/
• 何らかの関係性を表現した、コンピュータのメモリ上の複雑な
情報の構造をゼロイチのデータ列に直すこと
– メモリにデータが置かれる形はプログラミング言語やコンピュータの種類などに
よって異なるため、交換する際にはコンピュータに依存しない形で表現し直す必
要がある
シリアライズ?
シリアライズ
デシリアライズ
01101100010101101010010101110101101111
• データ構造を定義する表現
– 例:polyline.proto
• 表現されること
– データの型
– データの必要性
• required, optional, repeated(配列)
• プログラミング言語毎のprotocでコンパ
イルすることで、言語毎にシリアライズ、
デシリアライズするためのプログラムが
得られる
プロトコル定義ファイル
(Proto Definition file (.proto)
polyline.proto
• GTFSリアルタイム仕様書をプロ
グラム向けに具現化したもの
• GoogleのWebページからダウン
ロード可能
GTFSリアルタイムの
protoファイル
https://developers.google.com/transit/gtfs-realtime/gtfs-realtime-proto
• gtfs-realtime-bindings
– .NET、Go、Java、node.js(JavaScript)、
php、Python、Ruby
• 開発者の手間を省くために提供
各言語向けのコンパイル済み
ファイルが用意されている
https://github.com/MobilityData/gtfs-realtime-bindings
• 国交省資料でも紹介
• ダウンロードして解凍、インス
トーラを実行
• Windows/Macで動作確認済み
• Macの場合は以下に起動スクリプ
トがインストールされる
– /Applications/RecordEdit/ProtoBuf/bi
n/runEditor.sh
ProtoBufEditor:
Protocol Buffersをとりあえず眺めるツール
https://sourceforge.net/projects/protobufeditor/
起動画面と必要な設定→ブラウズ開始
1. protoファイルを設定
2. 読み込むファイルを設定
3. ブラウズ開始
データを眺めて
みよう
• 今回はJavaScript(node.js)を利用
• gtfs-realtime-bindings はnpm で取得可能
プログラムからGTFSリアルタイムにアクセス
$ npm init
$ npm install --save gtfs-realtime-bindings
$ npm install --save request
データを取得、JSONで表示する最小のコード
var GtfsRealtimeBindings = require('gtfs-realtime-bindings');
var request = require('request');
var requestSettings = {
method: 'GET’,
url: 'http://www3.unobus.co.jp/GTFS/GTFS_RT-VP.bin’,
encoding: null
};
request(requestSettings, function (error, response, body) {
if (!error && response.statusCode == 200) {
var feed = GtfsRealtimeBindings.FeedMessage.decode(body);
console.log(JSON.stringify(feed));
}
});
コピペ用テキスト
実行結果
• Webにいくつかサービスがあります
JSONの整形
https://lab.syncer.jp/Tool/JSON-Viewer/
• 1つのヘッダ
• 複数のFeedEntity
– ひとつが1台の車両に対応
全体の構造
• TripUpdate、VehiclePosition、Alertが格納出来る
• 実際はどれかひとつを入れる場合が多い
– この例ではVehiclePositionのみ
FeedEntityの構造
• TripDescriptor
– 便を指定している。trip_id があればよい。無い場合には、
trip_id が一意に定まる情報を格納する
• VehicleDescriptor
– 車両を特定する情報。ナンバー番号も入る
• Position
– 位置情報など、GPSから得られる情報
• current_stop_sequene
– 同じバス停を複数回停まる便もあるので、何番目のバス停かの
情報が大事
• current_status
• Timestamp
– 全体のタイムスタンプと異なっていい
VehiclePositionの構造(宇野バス)
• 項目が入力されているか否か
– trip_id があれば他は不要ではある
• VehicleDescriptorのラベル
– Webアプリで車両を指定するIDと同
一か?
– 「サンタバスナビ」作れるよね
• stop_id
– 不要だが、SQL叩いてさがすのが面
倒なのでうれしいかも
岡電と宇野バスの比較
• TripDescriptorは同一
• VehicleDescriptorは何故か含まれず
• StopTimeUpdate
– 直前の実績値のみを格納
• それ以上の過去や未来予測は含まず
• StopTimeEvent
– arrivalはなし。departureのみ
• departureのStopTimeEvent
– 300秒の遅れ。秒単位だが、60秒単位に丸めている可能性あり
• delay
– trip 単位でのdelayは設定していない
TripUpdate(宇野バス)
• TripDescriptor、VehicleDescriptorは
VehiclePositionと同一
• stop_time_update を複数持っている
TripUpdate(岡電)
• 全ての停車バス停ごとに遅れ時間を提供
– 秒単位の情報提供
• 通過済みの場合
– 実績値を提供
– uncertainty=0
• 未通過の場合
– uncertainty=300
StopTimeUpdate の詳細
select
tr.trip_id,
ro.route_short_name,
ro.route_long_name,
st.stop_sequence,
stops.stop_id,
stops.stop_name,
st.arrival_time,
st.departure_time,
case
when stop_headsign is not null then stop_headsign
else trip_headsign
end as headsign,
pt.geom
from
stop_times as st
inner join stops as stops on st.stop_id = stops.stop_id
inner join trips as tr on st.trip_id = tr.trip_id
inner join routes as ro on tr.route_id = ro.route_id
inner join patterns as pt on tr.shape_id =pt.shape_id
where
tr.trip_id = '221_2104216_20190401'
order by
stop_sequence
• aa
aa
Protocol Buffers入門から各地のGTFS Realtimeを覗いてみよう

Contenu connexe

Plus de Masaki Ito

Plus de Masaki Ito (20)

MaaSを捉えなおそう・熊本の交通を見直そう
MaaSを捉えなおそう・熊本の交通を見直そうMaaSを捉えなおそう・熊本の交通を見直そう
MaaSを捉えなおそう・熊本の交通を見直そう
 
GTFSデータ整備から始める公共交通の未来像
GTFSデータ整備から始める公共交通の未来像GTFSデータ整備から始める公共交通の未来像
GTFSデータ整備から始める公共交通の未来像
 
IT・データが導く新しい地域公共交通の姿を考える
IT・データが導く新しい地域公共交通の姿を考えるIT・データが導く新しい地域公共交通の姿を考える
IT・データが導く新しい地域公共交通の姿を考える
 
What i think about when i conduct research in the society
What i think about when i conduct research in the societyWhat i think about when i conduct research in the society
What i think about when i conduct research in the society
 
公共交通オープンデータの現状と可能性 社会がデータを使いこなすために何をなすべきか
公共交通オープンデータの現状と可能性 社会がデータを使いこなすために何をなすべきか公共交通オープンデータの現状と可能性 社会がデータを使いこなすために何をなすべきか
公共交通オープンデータの現状と可能性 社会がデータを使いこなすために何をなすべきか
 
ジョルダン「乗換案内」での鉄道・バスのリアルタイム情報活用の取り組み
ジョルダン「乗換案内」での鉄道・バスのリアルタイム情報活用の取り組みジョルダン「乗換案内」での鉄道・バスのリアルタイム情報活用の取り組み
ジョルダン「乗換案内」での鉄道・バスのリアルタイム情報活用の取り組み
 
日本バス情報協会の活動について
日本バス情報協会の活動について日本バス情報協会の活動について
日本バス情報協会の活動について
 
公共交通のオープンデータ化とICT企業としての役割
公共交通のオープンデータ化とICT企業としての役割公共交通のオープンデータ化とICT企業としての役割
公共交通のオープンデータ化とICT企業としての役割
 
GTFS-JPを活用した総合的な路線時刻表作成の取組
GTFS-JPを活用した総合的な路線時刻表作成の取組GTFS-JPを活用した総合的な路線時刻表作成の取組
GTFS-JPを活用した総合的な路線時刻表作成の取組
 
5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた5社のGTFSをマージして、PostgreSQLにインポートしてみた
5社のGTFSをマージして、PostgreSQLにインポートしてみた
 
複数のGTFSを用いた時刻表アプリ
複数のGTFSを用いた時刻表アプリ複数のGTFSを用いた時刻表アプリ
複数のGTFSを用いた時刻表アプリ
 
ミャンマー国ヤンゴンにおける公共交通オープンデータ開発の取組事例
ミャンマー国ヤンゴンにおける公共交通オープンデータ開発の取組事例ミャンマー国ヤンゴンにおける公共交通オープンデータ開発の取組事例
ミャンマー国ヤンゴンにおける公共交通オープンデータ開発の取組事例
 
西日本豪雨で止まった「広島の公共交通情報提供」のその後
西日本豪雨で止まった「広島の公共交通情報提供」のその後西日本豪雨で止まった「広島の公共交通情報提供」のその後
西日本豪雨で止まった「広島の公共交通情報提供」のその後
 
バス会社からのデータ提供がオープンデータにたどり着くまで
バス会社からのデータ提供がオープンデータにたどり着くまでバス会社からのデータ提供がオープンデータにたどり着くまで
バス会社からのデータ提供がオープンデータにたどり着くまで
 
低価格で高品質な苺をふんだんに使用したGTFS-RTを整備してみた話
低価格で高品質な苺をふんだんに使用したGTFS-RTを整備してみた話低価格で高品質な苺をふんだんに使用したGTFS-RTを整備してみた話
低価格で高品質な苺をふんだんに使用したGTFS-RTを整備してみた話
 
オープンでGTFSな横浜
オープンでGTFSな横浜オープンでGTFSな横浜
オープンでGTFSな横浜
 
みちのりホールディングスにおけるDX
みちのりホールディングスにおけるDXみちのりホールディングスにおけるDX
みちのりホールディングスにおけるDX
 
GTFS-JPを使った申請の検討について
GTFS-JPを使った申請の検討についてGTFS-JPを使った申請の検討について
GTFS-JPを使った申請の検討について
 
自治体におけるGTFS整備効果と課題 ~クローズ環境下でのオープンデータ整備~
自治体におけるGTFS整備効果と課題 ~クローズ環境下でのオープンデータ整備~自治体におけるGTFS整備効果と課題 ~クローズ環境下でのオープンデータ整備~
自治体におけるGTFS整備効果と課題 ~クローズ環境下でのオープンデータ整備~
 
群馬型廉価版バスロケーションシステムモデルによるGTFSリアルタイム実証実験
群馬型廉価版バスロケーションシステムモデルによるGTFSリアルタイム実証実験群馬型廉価版バスロケーションシステムモデルによるGTFSリアルタイム実証実験
群馬型廉価版バスロケーションシステムモデルによるGTFSリアルタイム実証実験
 

Dernier

Dernier (12)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Protocol Buffers入門から各地のGTFS Realtimeを覗いてみよう