Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
PHPカンファレンス沖縄2021
プロトコルバッファ形式の
路線バス運⾏情報(GTFS-RT)を
PHPで加⼯してみた
2021年5⽉29⽇
バス停検索運営 ⻘い森ウェブ⼯房 代表 福⽥匡彦
バス停検索 https://buste.in/ 20...
・⻘森県⼋⼾市出⾝(45歳 独⾝)
・東京で8年間ほど会社員ウェブプログラマー
・2000年 雑誌「東京ウォー◯ー」のウェブサイト運営会社へ常駐
(PerlのCGI作ってました)
・2004年 ゲーム会社「元気」勤務
(この頃にPHPやMySQ...
「バス停検索」は、⻘い森ウェブ⼯房(⻘森県⼋⼾市)が運営する
無料サービス。
※2011年6⽉に公開(まもなく⼗周年︕)
URL https://buste.in/
http://バス停検索.jp/ でも⾃動転送
全国のバス停が探せる
「バス停...
・VPS1台で稼働中
(当初は共有レンタルサーバでアクセス増により乗換)
・Webサーバ Apache 2.x系
SSL(https)対応済み
・使⽤データベース MySQL 8.0系
・主な使⽤⾔語 PHP、JavaScript
・使⽤フレー...
全国の有志により、⼀部地域では⽇々データ更新が⾏われています。
しかし、26万件以上もバス停&路線データがあると、それ以外の地
域は⼿付かずで正確度の低いデータが多くあります。
路線バスのダイヤ改正は、全国いつもどこかで⾏われていますから
いつ...
バス停検索のバス停データ件数
・国⼟数値情報バス停留所データ(2011年公開)を元に加⼯した初期データ
約25万件
・更新データ(2011年〜最近)
◯新規追加データ(廃⽌や重複等を除く)
↑約2万6千件追加
バス会社、⾃治体等の提供データ、協...
ここ数年で次々と全国各地で公開されているGTFS-JP(標準的なバ
ス情報フォーマット)形式のオープンデータを活⽤して、もっと正確
なバス停情報を提供できるのではないか︖と考えました。
○活⽤⽅法案
* GTFSデータと⼀緒に地図表⽰
バス停検...
「GTFS」という名前を聞いたことありますか︖
「GTFS(General Transit Feed Specification)」は、Googleが
公開して世界標準となった公共交通情報⽤フォーマットです。
さらに、⽇本の路線バス事情へ合わせ...
⽇本国内のGTFSオープンデータは、まだ発展途上で三⼤都市圏でもまだ寂しい状況。
⼭形県、群⾺県、⼭梨県、富⼭県、佐賀県、沖縄県等では県内の多くの路線バスで公
開しています。
⼀昨年に東京都交通局、昨年は横浜市交通局でも
公開され、⾸都圏でも増...
「GTFS リアルタイム(GTFS-RT)」は、公共交通機関がリアルタイムの運⾏情報を提供で
きるようにするためのフィードの仕様で、「Protocol Buffers」形式ファイルです。
時刻表やバス停情報をまとめた「GTFS」の拡張版で、「G...
◎オープンデータ
○路線バス
* 北海道 北海道拓殖バス
* 群⾺県 永井バス、⽇本中央バス、群⾺中央バス
* 富⼭県 富⼭地鉄バス、加越能バス、富⼭市まい
どはやバス等、多数公開
* 和歌⼭県 和歌⼭バス
* 岡⼭県 宇野バス、両備バス、岡電...
2021/5/29
バス停検索 https://buste.in/ 12
どういう使い⽅があるのか︖
* バス会社公式の運⾏情報サービスよりも、⾃分が使いやすいサービ
スを作って公開できる
* 公式サービスがバス会社毎で提供の場合、複数バス会社...
2021/5/29
バス停検索 https://buste.in/ 13
「GTFS-RT」を使⽤する環境を準備する
* PHP⽤もあるライブラリ「gtfs-realtime-bindings」を使⽤する
* PHP7.1以降が必須
* 「Co...
Googleにより開発されたシリアライズフォーマットで、XMLよりも処理が
⾼速でデータサイズも⼩さいため、ネットワーク上の通信を⾼速化できます。
特徴
* データサイズが⼩さく、通信を⾼速化できる
* XMLよりも⾼速にファイルを開けるらしい...
「Composer」を⽤意する
* 今回の環境︓使⽤OS「CentOS 7.9」、PHPバージョン「7.3」
* セットアップ⽤PHPスクリプト「composer-setup.php」のダウンロード
$ php -r "copy('https:...
* composer.jsonで読み込み設定を追加する
表記例
* インストールする
$ composer install
これで「vendor/」以下のファイルが作られる(次ページのautoload.phpなど)
Webサーバで使⽤環境を⽤意...
Googleのサンプルをベースとしたファイル。
参考URL
・PHP コードサンプル
https://developers.google.cn/transit/gtfs-realtime/examples/php-sample?hl=ja
Pr...
バス位置情報の表⽰例(関東)
2021/5/29
バス停検索 https://buste.in/ 18
都営バス(右側 ⻩緑⾊)、横浜市営
バス(左下 ⽔⾊)、⻄武バス(左上 ⻘
⾊)のとある時間のバス位置情報を
地図上へ反映させたサンプルです...
バス位置情報の表⽰例(⻄武バス)
2021/5/29
バス停検索 https://buste.in/ 19
⻄武バス(左上)部分を拡⼤したバス
位置情報です。
(下部がJR中央線沿線、右上付近が
さいたま市⼤宮区)
(同じく借り物画像)
(画像...
* 「gtfs-realtime-bindings」のリファレンス情報が意外と少ない
(ライブラリ内ファイルを開いて解析してみたり)
* 関連ライブラリではPHP7.1以降が必須となる事
(諸事情により、まだPHP5.6系使⽤の運⽤サーバもある...
* GTFS リアルタイムとは
https://developers.google.com/transit/gtfs-realtime?hl=ja
* Protocol Buffers
https://ja.wikipedia.org/wiki...
* ⻘い森ウェブ⼯房 代表 福⽥匡彦
* ご質問やお問い合わせは下記へ
URL: https://8nohe.info/work/
Twitter @8nohe
* 標準的なバス情報フォーマット広め隊
URL: https://www.gtfs...
Prochain SlideShare
Chargement dans…5
×

プロトコルバッファ形式の路線バス運行情報(GTFS-RT)をPHPで加工してみた

2021年5月29日に開催された「PHPカンファレンス沖縄2021」での発表資料です。

路線バスデータ形式を定義した「標準的なバス情報フォーマット(GTFS-JP)」の中で、路線バスの運行情報は「GTFS リアルタイム(GTFS-RT)」として定義されていますが、時刻やバス停情報などの静的データはカンマ区切りのプレーンテキストなのに対して、GTFS-RTはProtocol Buffers(プロトコルバッファ)というバイナリ形式をベースとしています。

しかし、バイナリデータを開く事はあまり経験が無い上に、Pythonを使用した情報は多いものの、PHPの使用情報は少ないなか、PHPでの加工にこだわり、何とかプレーンテキストまで加工して、無事にバス運行情報を見られるようにした流れなどです。

  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

プロトコルバッファ形式の路線バス運行情報(GTFS-RT)をPHPで加工してみた

  1. 1. PHPカンファレンス沖縄2021 プロトコルバッファ形式の 路線バス運⾏情報(GTFS-RT)を PHPで加⼯してみた 2021年5⽉29⽇ バス停検索運営 ⻘い森ウェブ⼯房 代表 福⽥匡彦 バス停検索 https://buste.in/ 2021/5/29 1
  2. 2. ・⻘森県⼋⼾市出⾝(45歳 独⾝) ・東京で8年間ほど会社員ウェブプログラマー ・2000年 雑誌「東京ウォー◯ー」のウェブサイト運営会社へ常駐 (PerlのCGI作ってました) ・2004年 ゲーム会社「元気」勤務 (この頃にPHPやMySQLを使い始めた) ・2008年 地元⼋⼾市へUターンし、「⻘い森ウェブ⼯房」を開業 ・2011年6⽉に全国対応「バス停検索」サービスを運営開始 URL https://buste.in/ 〜このあたりから「路線バス」が趣味から仕事になり始める〜 ・標準的なバス情報フォーマット広め隊メンバーとなる 福⽥の⾃⼰紹介 バス停検索 https://buste.in/ 2021/5/29 2
  3. 3. 「バス停検索」は、⻘い森ウェブ⼯房(⻘森県⼋⼾市)が運営する 無料サービス。 ※2011年6⽉に公開(まもなく⼗周年︕) URL https://buste.in/ http://バス停検索.jp/ でも⾃動転送 全国のバス停が探せる 「バス停検索」とは︖ バス停検索 検索 バス停検索 https://buste.in/ 2021/5/29 3
  4. 4. ・VPS1台で稼働中 (当初は共有レンタルサーバでアクセス増により乗換) ・Webサーバ Apache 2.x系 SSL(https)対応済み ・使⽤データベース MySQL 8.0系 ・主な使⽤⾔語 PHP、JavaScript ・使⽤フレームワーク CakePHP ・地図 OpenStreetMap+leaflet(Google Maps APIから切替え) PHPとMySQLが好きです︕ バス停検索の動作環境 バス停検索 https://buste.in/ 2021/5/29 4
  5. 5. 全国の有志により、⼀部地域では⽇々データ更新が⾏われています。 しかし、26万件以上もバス停&路線データがあると、それ以外の地 域は⼿付かずで正確度の低いデータが多くあります。 路線バスのダイヤ改正は、全国いつもどこかで⾏われていますから いつになっても追い付きません… (皆さん本業もあり、かけられる時間には限りがあります) バス停データは更新してる︖ バス停検索 https://buste.in/ 2021/5/29 5
  6. 6. バス停検索のバス停データ件数 ・国⼟数値情報バス停留所データ(2011年公開)を元に加⼯した初期データ 約25万件 ・更新データ(2011年〜最近) ◯新規追加データ(廃⽌や重複等を除く) ↑約2万6千件追加 バス会社、⾃治体等の提供データ、協⼒者による追加 (直近1年間で約1千9百件追加) △廃⽌や重複等のデータ ↓約1万4千件 ◎合計バス停データ数 約26万2千件 ⽇々、⽇本のどこかで増えるバス停もあれば、消えていくバス停もあるのです。 (データ件数は2021年5⽉現在) バス停データ追加の成果 バス停検索 https://buste.in/ 2021/5/29 6 0 5000 10000 15000 20000 25000 30000 +新規追加 −廃止等 増減状況 +新規追加 −廃止等
  7. 7. ここ数年で次々と全国各地で公開されているGTFS-JP(標準的なバ ス情報フォーマット)形式のオープンデータを活⽤して、もっと正確 なバス停情報を提供できるのではないか︖と考えました。 ○活⽤⽅法案 * GTFSデータと⼀緒に地図表⽰ バス停検索データと共にGTFSデータを地図へ⼀緒に表⽰させる * マッチングして差分を修正 バス停検索データとGTFSデータのマッチングをして、差分の修正 を⾏う 正確度を向上するには︖ バス停検索 https://buste.in/ 2021/5/29 7
  8. 8. 「GTFS」という名前を聞いたことありますか︖ 「GTFS(General Transit Feed Specification)」は、Googleが 公開して世界標準となった公共交通情報⽤フォーマットです。 さらに、⽇本の路線バス事情へ合わせて最適化したものが「標準的なバス情報フォー マット(通称︓GTFS-JP)」です。 もし、Googleマップへ新規でバス情報を掲載してもらうには、この形式でのデータ作 成が必要です。 なお、「GTFS」はバス停、時刻表や路線経路など「静的」な情報が対象で、運⾏状 況など「動的」な情報は、「GTFSリアルタイム(GTFS-RT)」という別なフォーマッ トがあります。 ・参考URL 標準的なバス情報フォーマット広め隊 https://www.gtfs.jp/ 標準的なバス情報フォーマット (GTFS-JP)とは︖ バス停検索 https://buste.in/ 2021/5/29 8
  9. 9. ⽇本国内のGTFSオープンデータは、まだ発展途上で三⼤都市圏でもまだ寂しい状況。 ⼭形県、群⾺県、⼭梨県、富⼭県、佐賀県、沖縄県等では県内の多くの路線バスで公 開しています。 ⼀昨年に東京都交通局、昨年は横浜市交通局でも 公開され、⾸都圏でも増えています︕ 2021年5⽉下旬現在では全国「360事業者」 も公開されています︕ (いくつかの定期旅客航路、鉄道データも含む) GTFSデータは全国出てるの︖ バス停検索 https://buste.in/ 2021/5/29 9 (参考︓https://home.csis.u-tokyo.ac.jp/~nishizawa/gtfs/ 2021年5⽉作成地図)
  10. 10. 「GTFS リアルタイム(GTFS-RT)」は、公共交通機関がリアルタイムの運⾏情報を提供で きるようにするためのフィードの仕様で、「Protocol Buffers」形式ファイルです。 時刻表やバス停情報をまとめた「GTFS」の拡張版で、「GTFS」とセットで使⽤します。 以下の三種類あります。 * ルート更新情報(TripUpdate) - 遅延、発着時刻予測、通過状況など * ⾞両位置情報(VehiclePosition) - ⾞両の緯度・経度、接近情報など * 運⾏情報(Alert) –運⾏情報の概要、詳細(運休、迂回等)、原因(天候、事故等)、 関連情報URL ・参考URL GTFS リアルタイムとは https://developers.google.com/transit/gtfs-realtime?hl=ja GTFS リアルタイム形式とは︖ バス停検索 https://buste.in/ 2021/5/29 10
  11. 11. ◎オープンデータ ○路線バス * 北海道 北海道拓殖バス * 群⾺県 永井バス、⽇本中央バス、群⾺中央バス * 富⼭県 富⼭地鉄バス、加越能バス、富⼭市まい どはやバス等、多数公開 * 和歌⼭県 和歌⼭バス * 岡⼭県 宇野バス、両備バス、岡電バス * 広島県 広島電鉄バス、広島バス、広島交通、芸 陽バス等、多数公開 * 佐賀県 佐賀市営バス、祐徳⾃動⾞、昭和⾃動⾞ ○鉄道線 * 愛知県 豊橋鉄道市内線 ◎条件付き公開データ(要登録) ○路線バス * 福島県 会津バス * 栃⽊県 関東⾃動⾞ * 埼⽟県 ⻄武バス * 東京都 都営バス * 神奈川県 横浜市営バス 「GTFS-RT」を公開しているバス会社は︖ バス停検索 https://buste.in/ 2021/5/29 11 全国で公開されていますが、静的データのGTFSに⽐べると数は少ないです。
  12. 12. 2021/5/29 バス停検索 https://buste.in/ 12 どういう使い⽅があるのか︖ * バス会社公式の運⾏情報サービスよりも、⾃分が使いやすいサービ スを作って公開できる * 公式サービスがバス会社毎で提供の場合、複数バス会社のバス運⾏ 情報を⼀つにまとめて表⽰可能に出来る (バス停データは各社別々なら、同⼀バス停に対して名寄せ等の処理 は必要になりそう) ○⾃社バス停検索サービスのメリット * 従来のバス停や路線情報の付加情報とすることで、利便性の向上 (バス会社公式サイトへ⾏かずに欲しい情報が得られる)
  13. 13. 2021/5/29 バス停検索 https://buste.in/ 13 「GTFS-RT」を使⽤する環境を準備する * PHP⽤もあるライブラリ「gtfs-realtime-bindings」を使⽤する * PHP7.1以降が必須 * 「Composer」が必須 * 「Protocol Buffers」形式のファイル * 適⽤ライセンス Apache License 2.0 ただし、残念ながらPHPとRuby⽤は「Deprecated as of early 2019」(2019年初頭に⾮ 推奨となった)とあり、サポートは終了している模様 PHP⽤最新バージョンは「0.0.2」です。(最終更新は2年前︖) なお、「JavaScript(Node.js)、Python、Golang、.NET、Java」の各⾔語⽤はまだサ ポート中の模様 ・参考URL gtfs-realtime-bindings https://github.com/MobilityData/gtfs-realtime-bindings
  14. 14. Googleにより開発されたシリアライズフォーマットで、XMLよりも処理が ⾼速でデータサイズも⼩さいため、ネットワーク上の通信を⾼速化できます。 特徴 * データサイズが⼩さく、通信を⾼速化できる * XMLよりも⾼速にファイルを開けるらしい * テキスト形式ではなくバイナリ形式 (そのため、直接テキストエディタで開いてもうまく解読できません) ・参考URL Protocol Buffers - Wikipedia https://ja.wikipedia.org/wiki/Protocol_Buffers Protocol Buffersとは︖ バス停検索 https://buste.in/ 2021/5/29 14
  15. 15. 「Composer」を⽤意する * 今回の環境︓使⽤OS「CentOS 7.9」、PHPバージョン「7.3」 * セットアップ⽤PHPスクリプト「composer-setup.php」のダウンロード $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.phpʼ);” * pharファイルの作成 $ php composer-setup.php 「composer.phar」が作成されます * どこからでも使えるようにパスを通す(root権限が必要) $ mv composer.phar /usr/local/bin/composer 参考URL ・Composer を CentOS にインストールする⼿順|WEB ARCH LABO https://weblabo.oscasierra.net/php-composer-centos-install/ ・ CentOS7にComposerをインストールする - Qiita https://qiita.com/inakadegaebal/items/d370bcb1627fce2b5cd1 Webサーバで使⽤環境を⽤意する(1) バス停検索 https://buste.in/ 2021/5/29 15
  16. 16. * composer.jsonで読み込み設定を追加する 表記例 * インストールする $ composer install これで「vendor/」以下のファイルが作られる(次ページのautoload.phpなど) Webサーバで使⽤環境を⽤意する(2) バス停検索 https://buste.in/ 2021/5/29 16 { "require": { "google/gtfs-realtime-bindings": "0.0.2" } }
  17. 17. Googleのサンプルをベースとしたファイル。 参考URL ・PHP コードサンプル https://developers.google.cn/transit/gtfs-realtime/examples/php-sample?hl=ja Protocol Buffersファイルを開いてみる バス停検索 https://buste.in/ 2021/5/29 17 require_once ʻvendor/autoload.phpʼ; use transit_realtime¥FeedMessage; $data = file_get_contents(”saga_pref_route_20210529_1349.pb“); // GTFS-RTファイル $feed = new FeedMessage(); $feed->parse($data); foreach ($feed->getEntityList() as $entity) { if ($entity->hasTripUpdate()) { error_log("trip: " . $entity->getId()); } }
  18. 18. バス位置情報の表⽰例(関東) 2021/5/29 バス停検索 https://buste.in/ 18 都営バス(右側 ⻩緑⾊)、横浜市営 バス(左下 ⽔⾊)、⻄武バス(左上 ⻘ ⾊)のとある時間のバス位置情報を 地図上へ反映させたサンプルです。 かなりの密度で路線バスを運⾏して いる様⼦がわかりやすく⾒る事がで きます。 (⾃作が間に合わず、借り物です(汗)) (画像提供 https://tshimada291.sakura.ne.jp/ )
  19. 19. バス位置情報の表⽰例(⻄武バス) 2021/5/29 バス停検索 https://buste.in/ 19 ⻄武バス(左上)部分を拡⼤したバス 位置情報です。 (下部がJR中央線沿線、右上付近が さいたま市⼤宮区) (同じく借り物画像) (画像提供 https://tshimada291.sakura.ne.jp/ )
  20. 20. * 「gtfs-realtime-bindings」のリファレンス情報が意外と少ない (ライブラリ内ファイルを開いて解析してみたり) * 関連ライブラリではPHP7.1以降が必須となる事 (諸事情により、まだPHP5.6系使⽤の運⽤サーバもあるため) * テスト⽤サーバでPHP7以降へアップグレードを試みたところ、OSも古くCentOS6系 のサポート切れでアップグレードができず、OSから⼊れ直し再構築が必要となった * GTFS-RTデータはリアルタイム情報であり、各バス会社の運⾏時間帯に取得しないと 空欄になるため、テスト⽤データは事前に⽇中に取得しておくと良い (深夜に作業を始めてデータが取れない︕と気付いたパターン) △困った点など バス停検索 https://buste.in/ 2021/5/29 20
  21. 21. * GTFS リアルタイムとは https://developers.google.com/transit/gtfs-realtime?hl=ja * Protocol Buffers https://ja.wikipedia.org/wiki/Protocol_Buffers * gtfs-realtime-bindings https://github.com/MobilityData/gtfs-realtime-bindings * GTFS・「標準的なバス情報フォーマット」公開データ⼀覧 https://tshimada291.sakura.ne.jp/transport/gtfs-list-2.html 関連情報 バス停検索 https://buste.in/ 2021/5/29 21
  22. 22. * ⻘い森ウェブ⼯房 代表 福⽥匡彦 * ご質問やお問い合わせは下記へ URL: https://8nohe.info/work/ Twitter @8nohe * 標準的なバス情報フォーマット広め隊 URL: https://www.gtfs.jp/ 2021年5⽉29⽇ ご清聴ありがとうございました バス停検索 https://buste.in/ 2021/5/29 22

    Soyez le premier à commenter

2021年5月29日に開催された「PHPカンファレンス沖縄2021」での発表資料です。 路線バスデータ形式を定義した「標準的なバス情報フォーマット(GTFS-JP)」の中で、路線バスの運行情報は「GTFS リアルタイム(GTFS-RT)」として定義されていますが、時刻やバス停情報などの静的データはカンマ区切りのプレーンテキストなのに対して、GTFS-RTはProtocol Buffers(プロトコルバッファ)というバイナリ形式をベースとしています。 しかし、バイナリデータを開く事はあまり経験が無い上に、Pythonを使用した情報は多いものの、PHPの使用情報は少ないなか、PHPでの加工にこだわり、何とかプレーンテキストまで加工して、無事にバス運行情報を見られるようにした流れなどです。

Vues

Nombre de vues

115

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

10

Actions

Téléchargements

0

Partages

0

Commentaires

0

Mentions J'aime

0

×