熊本のバス5社のGTFS Realtimeオープンデータを使う

## はじめに

2021年11月に、熊本県内バス5社のリアルタイムバス情報が、GTFS Realtime形式の[オープンデータとして公開](
https://km.bus-vision.jp/kumamoto/view/opendataKuma.html)されました。本記事では、GTFSの概要、熊本のデータ入手方法、利用例、開発情報などを紹介します。

## 1. どんなデータ？
### GTFSって何？
![GTFS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/9a95e540-020c-55c9-0733-5499a7199c06.png)
[GTFS(General Transit Feed Specification)](https://developers.google.com/transit/gtfs/reference?hl=ja)とは、バスや鉄道などの公共交通に関する世界的なデファクトスタンダードなファイル形式で、Google Maps等の経路検索サービスで主に使われています。
日本においても、2017年に国土交通省がバス情報の標準形式として採用してから普及が始まっています。2021年11月12日現在、**[440の交通事業者・自治体がオープンデータを公開](https://tshimada291.sakura.ne.jp/transport/gtfs-list.html)**しており、そのうち**遅延等のリアルタイム情報も48**社から配信されています。

### 熊本のバスロケーションシステム
熊本県内では5社・約800台のバスが縦横無尽に走り、1日7.5万人の移動を支えています。
これらのバスには共通のバスロケーションシステム「**[バスきたくまさん](http://www.bus-kuma.jp/)**」が導入されています。
そのため、スマホやデジタルサイネージから、バス会社を問わず遅れ情報等を見ることができます。またそのデータを分析し遅延改善にも取り組んでいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/f0427c6e-3708-bbc0-315a-1ec076907d3e.png)
図：熊本市公共交通協議会 バス路線網再編部会資料「[バスロケ運行データを用いた遅延改善のご紹介](https://www.city.kumamoto.jp/common/UploadFileDsp.aspx?c_id=5&id=2432&sub_id=27&flid=180777)」

### Google Mapsの遅れ情報
熊本のバスロケーションシステムから出力されるGTFS・GTFS Realtimeデータは、Googleにも提供されています。そのためGoogle Mapsには、バスの遅れ情報や、遅れを考慮した乗継経路が表示されます。
![google.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/7e24fb01-e40c-eeef-0168-8bbfe52e5ac9.png)


### 熊本のオープンデータ
そんな熊本のバスの**GTFS Realtimeデータ**が、2021年11月から**オープンデータとして公開されました！**
こちらのサイトから、誰でも**無償**でダウンロードでき、**自由**に利用できます。

https://km.bus-vision.jp/kumamoto/view/opendataKuma.html

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/86f0f62d-bc22-3aef-51a8-149a0368b554.png)](https://km.bus-vision.jp/kumamoto/view/opendataKuma.html)

### GTFS Realtimeを眺めてみる


熊本のGTFS Realtimeは**VehiclePosition**と**TripUpdate**という2種類のデータで構成されています。
内容を簡単に目視で確認するには、Protocol BuffersをJSONに変換するWeb API「[GTFS-RT to JSON](https://github.com/terachan0117/gtfs_rt-to-json)」が便利です。ただし元データと構造が変わることがあるようなので留意してください。

#### VehiclePosition
車両の現在位置、次の停留所などが入っています。便のIDはtripIdで、便に関する情報は静的GTFSデータに格納されています。

例：[[九州産交バスのVehiclePosition](https://km.bus-vision.jp/realtime/sankobus_vpos_update.bin)]をJSON形式で表示 [[URL](https://traffic-brain.github.io/gtfs-rt2json/)] 

```json:VehiclePositionのJSON表示
[
   {
      "id":"vehicle_128501_6799_20211031",
      "vehicle":{
         "trip":{
            "tripId":"128501_6799_20211031",
            "scheduleRelationship":null
         },
         "vehicle":{
            "id":"226",
            "label":"173"
         },
         "position":{
            "latitude":32.781749725341796875,
            "longitude":130.751495361328125
         },
         "currentStopSequence":16,
         "currentStatus":2,
         "timestamp":1636933807,
         "occupancyStatus":null
      }
   },
```

#### TripUpdate
熊本のデータの場合、停留所ごとの通過時刻と遅延時間が、起点からは実績値と、終点までは予測値として入っています。

例：九州産交バスのTripUpdateのJSON表示 [[URL](https://api.tera-chan.com/api/gtfs-rt_to_json/v1.php?source=https://km.bus-vision.jp/realtime/sankobus_trip_update.bin)]

```json:TripUpdateのJSON表示
[
   {
      "id":"tripUpdate_128501_6799_20211031",
      "tripUpdate":{
         "trip":{
            "tripId":"128501_6799_20211031",
            "scheduleRelationship":null
         },
         "vehicle":{
            "id":"226",
            "label":"173"
         },
         "stopTimeUpdate":[
            {
               "stopSequence":1,
               "arrival":{
                  "delay":226,
                  "time":1636932226
               },
               "departure":{
                  "delay":226,
                  "time":1636932226
               }
            },
```


## 2. 使ってみた
GTFS / GTFS Realtimeは各プログラミング言語からCSV / Protocol Buffersファイルとして読み込めるほか、各種ライブラリを通じて扱うこともできます。
また、様々なツールを使ってプログラミング無しで扱うこともできます。
ここでは、熊本のGTFS / GTFS Realtimeデータを使った事例を紹介します。

### バスの1日の動き： Mobmap
まずはバスの1日の動きを、「[Mobmap2 for Chrome](https://chrome.google.com/webstore/detail/mobmap2-for-google-chrome/gcbddkhdhmlljgjcmafnjeloloacihfm?hl=ja)」を使って地図上のアニメーションとして見てみましょう。

バス1台が1つの玉になっています。色は遅れ時間を表していて、赤い玉は10分以上遅れています。800台もの台数が動く様子は壮観です。

<iframe width="560" height="400" src="https://www.youtube.com/embed/VqmfIEPDwYw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


技術的には、実は今回紹介する事例の中では唯一、データの蓄積と、少しコーディングが必要だったりします。ソースはどこかに行ってしまったのでごめんなさい。。
GTFS Realtimeデータの読み込みには、Protocol Buffersの言語別ライブラリと型定義ファイルがパッケージ化された「[gtfs-realtime-bindings](https://github.com/MobilityData/gtfs-realtime-bindings)」を使うと便利です。

#### 3Dもできる?
熊本には、3D都市モデル（[Project PLATEAU](https://www.mlit.go.jp/plateau/)）のデータもあります。ここにバスのリアルな動きを重ねて「デジタルツイン」を作るのも面白いかもしれません。
データセット一覧：https://www.geospatial.jp/ckan/dataset/plateau
![plateau.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/009d3554-c88f-69af-48e3-e2b7aaefd1c3.png)


### デジタルサイネージ： その看板
GTFS / GTFS Realtimeに対応したデジタルサイネージとして、「[その看板](http://www.sinjidai.com/kanban/)」というWindowsアプリがあります。

これを使って、サウナ施設「湯らっくす」にデジタルサイネージを設置しています。

https://twitter.com/InfoYulax/status/1666711325349904384/photo/1

今後、上熊本、新水前寺、熊本の各駅にも設置予定です。
上熊本用には、バス2社（熊本都市バス・九州産交バス）と鉄軌道2社（熊本電鉄・市電）の情報を載せます。
鉄道のGTFSデータについては、[西沢明さんの研究用データ](https://gtfs-gis.jp/gtfs4research/)をお借りしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/516503af-f275-1848-d3f2-1f2ce11390d4.png)

駅やバス停だけでなく、近くの店、病院、公共施設などに置けば、安心してバスを待てますし、バスの利用者も増えるかもしれません。

### バスの本数： GTFS-GO for QGIS
公共交通の改善検討にあたっては、まずは運行頻度を地図上に可視化すると議論がはかどります。
無料・オープンソースのGISである「[QGIS](https://www.qgis.org/ja/site/)」と、QGIS用プラグイン「[GTFS-GO](https://github.com/MIERUNE/GTFS-GO)」を使えば、GTFSから簡単に**運行頻度図**を作ることができます。

https://qiita.com/Kanahiro/items/140f50b7f7894f260fde

数字と線幅が1日の方向別本数を、色がバス会社を表しています。
各社のテリトリーが入り乱れている様子や、1日に100本以上(数分間隔)ある幹線もあれば、十数本(約1時間間隔)しかない支線もあることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/35a90b5e-5fc3-7ab9-f3d1-921260f36fb0.png)

熊本市の中心部である、桜町バスターミナル～市役所前～通町筋～水道町のあたりには、市電と並行して、全社上下あわせて2000本前後のバスが集中していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2255241/efdf4741-955f-0ef1-41f9-4e42b5761361.png)

QGISアプリを入れなくても見られるように、**[Web版](https://qgis.t-brain.jp/kumamoto_frequency/)** もありますのでぜひご覧ください。

### 時間内に行ける範囲： Conveyal Analysis
交通網の利便性評価には、「中心市街地から公共交通で30分以内の人口」といった指標がよく使われます。また個人でも、「家から20分以内に行ける店」「職場から30分以内で通える家」といった視点で、お店や住宅を探すシーンもあるでしょう。こういった機能を「**到達圏探索**」と呼びます。

#### システム構成
オープンソースの経路分析システムである「[Conveyal Analysis](https://conveyal.com/learn)」とオープンデータを使えば、無料で到達圏探索を行うことができます。商用システムより精度は落ちますが、大まかな分析には使えるでしょう。

* 経路探索バックエンド：**[Conveyal R5 Routing Engine](https://github.com/conveyal/r5)**
  * オープンソースの経路探索エンジンとして「[OpenTripPlanner](https://www.opentripplanner.org/)」が有名ですが、[Ver.2以降では到達圏探索等の分析機能が削除され、R5を使うことが推奨](http://docs.opentripplanner.org/en/v1.5.0/Surface/)されています。 
* フロントエンド：**[Conveyal Analysis UI](https://github.com/conveyal/analysis-ui)**
  * [こちら](https://git.digitaltransport4africa.org/commons/conveyal-analysis-docker)の手順に従って、Dockerを使ってR5とAnalysis UIをインストールできました。
* バスデータ：[熊本のGTFSオープンデータ](https://km.bus-vision.jp/kumamoto/view/opendataKuma.html)
* 道路ネットワークデータ：**[OpenStreetMap](https://openstreetmap.jp/)**
  * [九州だけ切り取られたデータ](https://download.geofabrik.de/asia/japan.html)を使うとお手軽です。

#### 実行例
地図上のピンの場所から、「Time cutoff」スライダで指定した時間内に行ける範囲に色が付いています。
<font color="DeepPink">赤が徒歩のみ</font>、<font color="Blue">青がバス＆徒歩</font>で行ける範囲です。
バスは出発時刻によって早く行ける場合と時間がかかる場合とがあります。その所要時間の分布を、「Travel time percentile」スライダでパーセンタイル値を指定して確認できます。
到達圏のポリゴンは、画面で表示するだけでなく、GeoJSON（ベクトル）やGeoTIFF（ラスタ）として出力し、GIS等で利用可能です。

<iframe width="560" height="400" src="https://www.youtube.com/embed/3ouMTi9sJ8E" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

## 3. Twitter上の利用例（随時更新）
リアルタイムデータの公開から1か月ほど経ちまして、早くも使ってみた方々が現われています！

### 自分用サイネージ

https://twitter.com/sotongshi/status/1471274080100040705

Togetterにまとめました！

https://togetter.com/li/1817346

### 地図プロット

https://twitter.com/kmskhr/status/1460603925950652420

https://twitter.com/malo21st/status/1465094118606921729

### 車両運用(!)

https://twitter.com/r_tsubame/status/1463555274208251904


## 4. 技術情報
### 開発情報

データの仕様についてはGoogleが用意している日本語訳がわかりやすいです。

https://developers.google.com/transit/gtfs/reference?hl=ja

https://developers.google.com/transit/gtfs-realtime/reference?hl=ja


ライブラリやツールを探すには「**[awesome-transit](https://github.com/CUTR-at-USF/awesome-transit#gtfs)**」が便利です。

https://github.com/CUTR-at-USF/awesome-transit#gtfs

GTFSは世界中で使われているフォーマットですので、多くの言語用のアクセサが公開されています。各言語用ライブラリがパッケージ化された「[gtfs-realtime-bindings](https://github.com/MobilityData/gtfs-realtime-bindings)」が便利です。
また、「Conveyal Analysis」や「その看板」のように、GTFSを用いたアプリケーションも多数あります。

私はデータ分析屋なので、PostGIS等のDBにインポートする「[GTFSDB](https://github.com/OpenTransitTools/gtfsdb)」をよく使います（[参考記事](https://qiita.com/niyalist/items/22b743d973e4a6aeef86)）。

[QiitaにもGTFS関係の記事は多数](https://qiita.com/tags/gtfs)あるので参考になるかもしれません。

### 全国のデータ

旭川高専の嶋田助教の神サイトが日本のデファクトスタンダードです。

https://tshimada291.sakura.ne.jp/transport/gtfs-list.html

自分でGTFSデータ自体を作ってみたくなった方は、Excelベースの「[見える化共通入力フォーマット](https://www.rosenzu.com/net/mieru/fm/)」や、バスのダイヤ編成システム「[その筋屋](http://www.sinjidai.com/sujiya/)」を使うと良いでしょう。。


### コミュニティ
以下のようなコミュニティがありますので、気になる方はウォッチ・投稿してみましょう。

* 日本国内
    * Facebookグループ「[GTFS/バスオープンデータ友の会](https://www.facebook.com/groups/492835051529368)」
* グローバル
    * [MobilityData](https://mobilitydata.org/) 【[Slack](https://mobilitydata-io.slack.com),  [GitHub](https://github.com/MobilityData)】
        * GTFSの仕様を管理している組織です。
* 熊本
    * [KumaMCN](https://www.facebook.com/KumaMCN/), [Code for Kumamoto](https://www.facebook.com/groups/CodeForKumamoto/)
        * 共催で「[熊本GTFS-JP活用勉強会](https://kumamcn.connpass.com/event/169877/)」をやっていたようです。

### コンテスト
「**[アーバンデータチャレンジ2021 with 土木学会インフラデータチャレンジ2021](https://urbandata-challenge.jp/2021submitstart)**」というコンテストが毎年あります。**最高賞金は50万円**です！
インフラデータチャレンジの[「公共交通」分野のデータとしてGTFSが挙げられています](https://urbandata-challenge.jp/idc/idc-publictransportation)。
「道路・交通」「まちづくり・都市計画」「産業・観光」などのテーマで応募できます。
参加締切は2021年12月25日、作品締切は2022年01月29日ですので、冬休みの宿題にぴったり!?

## おわりに
というわけで今回は、熊本のバスのGTFS Realtimeデータについて紹介しました。
これを機に、GTFS、バスデータ、熊本のバスに関心を持ってもらえると嬉しいです！