OpenTripPlannerを学ぶ(with 西沢ツール)

1.GTFSフォーマットとは

**GTFS(General Transit Feed Specification)**とは、公共交通機関の路線情報や時刻表をデータとして公開するための標準フォーマットである。主にバス、鉄道、地下鉄などの公共交通の情報をデジタルデータとして整理し、経路検索サービスや交通分析システムで利用することを目的としている。
この仕様は Google と米国ポートランドの交通事業者である TriMet によって開発されたものであり、現在では世界各国の交通事業者や自治体が採用している。


1). GTFSの基本構造

GTFSは、複数のCSVファイルをZIP形式でまとめたデータセットとして構成される。
各ファイルは公共交通の異なる要素を表しており、それらを組み合わせることで交通ネットワークと時刻表を再現できる。

主なファイルは以下の通りである。

  • agency.txt
    • 交通事業者の名称やURLなどの情報
  • stops.txt
    • 停留所(バス停・駅)の名称
    • 緯度・経度などの位置情報
  • routes.txt
    • 路線名や路線ID
  • trips.txt
    • 各運行便(ダイヤ単位の運行情報)
  • stop_times.txt
    • 各停留所の到着時刻・出発時刻
  • calendar.txt
    • 運行曜日(平日・土曜・日曜など)
  • shapes.txt
    • 路線の地理的形状(地図上の経路)

これらのデータを組み合わせることで、

  • 路線図
  • 停留所位置
  • 時刻表
  • 経路検索

などの機能が実現される。


2). GTFSの主な利用例

GTFSは多くの交通情報サービスで利用されている。代表例は以下の通りである。

  • Google Maps
    • 公共交通の経路検索
  • Transit App
    • バス・鉄道のリアルタイム交通アプリ
  • OpenTripPlanner
    • オープンソースの交通ルーティングエンジン

これらのシステムでは、GTFSの停留所情報・路線情報・時刻情報を統合して
「出発地から目的地までの公共交通ルート」を計算している。


3). GTFSの種類

GTFSには主に以下の2種類がある。

① GTFS Static

通常の時刻表データである。

  • ダイヤ情報
  • 停留所
  • 路線
  • 運行曜日

などの固定的な交通情報を扱う。


② GTFS Realtime

リアルタイムの運行情報を扱う拡張仕様である。

主な内容

  • 車両位置情報
  • 遅延情報
  • 運休情報

これにより、実際の運行状況を反映した交通案内が可能になる。


4). 日本での利用

日本でもGTFSは広く利用されている。

特に

  • 国土交通省 が推進する
    「標準的なバス情報フォーマット」

はGTFSを基盤として整備されている。
多くの自治体や交通事業者がGTFS形式で交通データを公開している。


5). 研究・分析への応用

GTFSは交通研究や都市計画の分析にも利用される。

主な利用例

  • バス路線ネットワーク分析
  • 公共交通アクセシビリティ評価
  • 交通空白地域の把握
  • 都市交通需要分析
  • 災害時の避難交通計画

このためGTFSは、都市交通計画や都市防災研究における重要な基盤データ形式として位置づけられている。

2.西沢ツールとは

1) 概要

西沢ツールは正式には
**「標準的なバス情報フォーマット作成ツール」**と呼ばれる。

Excel(マクロ付き)で作成されたツールであり、
バス停、路線、時刻表、運賃などの情報を入力すると、GTFS形式の公共交通データを自動生成する仕組みになっている。

このツールは、公共交通データの標準形式である
**GTFS(General Transit Feed Specification)**のデータ作成を容易にすることを目的として開発された。


2) 開発の背景

GTFSは世界的に利用されている公共交通データの標準形式であるが、
実際のデータは複数のCSVファイルで構成され、IDで相互に関連付けられているため、手作業で作成することが非常に困難である

そのため、自治体やバス事業者が使いやすいように、
Excelで入力しボタン操作でGTFSデータを生成できるツールとして西沢ツールが開発された。


3) 入力する主な情報

西沢ツールでは、次のような交通情報をExcelのシートに入力する。

  • バス停情報(名称・座標)
  • 路線情報(系統・ルート)
  • 時刻表
  • 運行日(平日・休日など)
  • 運賃情報

これらの情報を入力すると、GTFSデータとして

  • stops.txt
  • routes.txt
  • trips.txt
  • stop_times.txt

などのCSVファイルが生成され、ZIP形式で出力される。

3.交通ネットワークの経路検索や分析(OPT利用)

(1)OpenTripPlannerとは

OpenTripPlanner(OTP)とは、公共交通を含む交通ネットワークの経路検索や分析を行うためのオープンソースの経路探索エンジンである。徒歩、自転車、自動車、バス、鉄道など複数の交通手段を組み合わせた移動経路を計算することができる。

OpenTripPlannerは、主に次の二つのデータを用いて交通ネットワークを構築する。

  • OpenStreetMap(OSM):道路や歩行ネットワークなどの地理データ
  • GTFS(General Transit Feed Specification):公共交通の路線・停留所・時刻表データ

これらのデータを組み合わせることで、出発地から目的地までの移動経路や所要時間を計算することができる。


(2)OpenTripPlannerで評価できること

OpenTripPlannerは単なる乗換案内システムではなく、交通ネットワーク分析や都市交通計画の評価ツールとしても利用される。主に次のような評価が可能である。


1) 移動経路の分析

出発地と目的地を指定すると、次のような移動経路を計算できる。

  • 移動時間
  • 乗換回数
  • 徒歩時間
  • 利用する交通機関

これにより、新しいバスルートを導入した場合に移動時間がどの程度変化するかを評価することができる。


2) 到達圏(アクセシビリティ)の評価

OTPでは、ある地点から一定時間内に到達できる地域を計算することができる。

これは 等時線(Isochrone)分析と呼ばれ、公共交通のアクセシビリティ評価に広く用いられる方法である。

例えば次のような分析が可能である。

  • 駅から30分以内に到達できる地域
  • 病院や商業施設へのアクセス範囲
  • 新バス路線導入による到達圏の拡大

3) 公共交通サービス圏の分析

バス停や駅から一定時間または距離でアクセスできる人口を算出することができる。

例えば

  • バス停500m圏人口
  • 30分以内に駅へ到達できる人口

などの指標を用いて、公共交通サービスのカバー率を評価できる。


4) 交通ネットワークの比較評価

複数の交通計画案を比較することも可能である。

例えば

  • 現在の路線
  • 新しいバスルート案
  • 運行頻度を変更した案

などを比較し

  • 移動時間
  • アクセス人口
  • 交通利便性

などの変化を分析できる。

4.OPT 基本チュートリアル

(1)java 25(Eclipse Temurin OpenJDK 25)を用意

Eclipse Temurin ダウンロードページ
②Temurin jdk-25.0.3+9, Windows 64 bit (.MSI) (Windowsの場合)JDKを選択→ダウンロード
③インストール場所は、C:\Program Files直下に javaというフォルダを作成し、選択(普通にインストールすると、C:\Program Files\Eclipse Adoptiumフォルダにインストールされる)
④環境変数に「新規」 変数名 JAVA_HOME 変数値 C:\Program Files\java (javaのbinが含まれているフォルダを選択)
⑤環境変数のPath を「編集」 Pathに「新規」で %JAVA_HOME%\bin を追加する 
⑥cmdコマンド(DOS)で java -version でバージョン表示されたらOK

(2)OPT用フォルダを準備

フォルダ分けサンプル~OPTは生成するgraph.objが地域ごとになるので、次の形を推奨
C:\otp
├─ otp.jar
├─ graphs
│  └─ tokyo
│    ├─ tokyo.osm.pbf
│    ├─ tokyo.gtfs.zip
│    └─ graph.obj

(3)OTP (最新2.9.0)をGitHabから取得

https://github.com/opentripplanner/OpenTripPlanner/releases/tag/v2.9.0

otp-shaded-2.9.0.jar を入手→otp.jarにリネーム後、準備した otpフォルダの下に移動する

(4)graphsフォルダの中に検証したい場所のフォルダを作成

(2)のファイル構造を参照。まず、otp.jarを格納したotpフォルダに、graphsフォルダを作成、その下に、例えば tokyo, kanagawaなど、地図を格納したい地域のフォルダを作成する。ここでは、チュートリアル用のサンプルを使うので、graphsフォルダと、その下に sampleというフォルダを作成。

このフォルダに、OSM(OpenStreetMap=地図データ)と、GTFS(バス時刻表データ)が格納される。

5.きよバスgtfsによる練習

(1)公共交通オープンデータセンターに開発者登録(無料)して、gtfsデータをダウンロードする。zipのままでよい。ここでは、「きよバス」データを使う
https://ckan.odpt.org/dataset/kiyose_city_kiyo_bus/resource/51906ad9-248c-433f-9f6b-5e4ae385dd3f
ダウンロードしたデータを、前段で作成した、graphsフォルダ内の例えば、sampleフォルダ、kiyobusフォルダなどを作成し、そこに格納する。
ただ、バージョンなどを示した、KiyoBus-20260401.zip という名称を、kiyobus.gtfs.zip 等、gtfs.zipに変更しておく。

(2)OpenStreetMapを手に入れる。Geofabrik にアクセス。日本全国か関東地方を選択。
ここでは、関東地域、kanto-latest.osm.pbf をクリック。ダウンロードしたデータを、きよバスのgtfsと同じ場所に格納。(日本全国データだと大きすぎて(2.4GB前後)、メモリ不足になる)。

(3)cmdウィンドウで、otpフォルダにディレクトリチェンジし(cd \otp など)、otpを動かす。
 java -Xms4G -Xmx4G -jar otp.jar –build –save –serve graphs/sample (メモリ4GB割り当て)
※PCのメモリに余裕があるなら、例えば
 java -Xms12G -Xmx12G -jar otp.jar –build –save –serve graphs/sample (メモリ12GB割り当て)
結構待つ。(日本全国や関東全体のOSPでメモリが不足して、サーバー起動しない場合は、BBBike Extract Service で、切り取りたいマップエリアを指定してもよい:数分後にメールでダウンロードリンクが届く)

(4)otp が起動しました、というメッセージ出ていれば成功。うまくいかない場合は、ログをすべてChatGPTなどに渡し、解説してもらうのも手。
実行して出来上がるのは、graph.obj 内部に生成された巨大交通ネットワーク。中には、

  • 道路
  • 徒歩ネットワーク
  • バス路線
  • 停留所
  • 時刻表
  • 乗換

などが統合されている。

(5)ブラウザでアクセス
http://localhost:8080

(6)地図上で右クリック(Start)→(End)を指定でルートが出る

(7)シャットダウンと2回目以降

Ctrl Cでシャットダウン

2回目のサーバー起動は、(Build不要)
java -Xms4G -Xmx8G -jar otp.jar –load graphs/sample 
(起動時4GBメモリ確保、最大8GB、太字は、各自のフォルダ名に合わせて変えること)

(8)解析

http://localhost:8080/graphiql これにより、クエリテンプレートと、利用可能API一覧が表示される

このクエリサンプルは、実行すると、きよバス路線一覧が取得できる。

(例2)停留所一覧が取得できる ※stops.txtから停留所一覧を読み込んでいる

6.QGISとの接続GTFS-GO

(1)QGIS起動~プラグインのインストール
上部メニューの「プラグイン」から「プラグインの管理とインストール」を選択。検索窓にgtfs。GTFS-GOを探し、インストール

(2)GTFS-GOメニューをクリック zipから読み込み

(3)QGISに読み込んで表示

「QGISに読み込む」ボタンをクリックすると、QGISが

  • stops.txt バス停
  • shapes.txt 線形
  • routes.txt 路線

を生成表示

(4)背景にOpenStreetMapを読み込んで配置

 XYZタイルからOpenStreetMapを探し、バス路線図の下にドラッグ配置

左下のレイヤ操作で必要な路線図を選択可能。(下図~志木街道経由のみ表示(レイヤ)例)

(5)運行頻度図の作成

※参考:開発者ノート「公共交通機関のデータを可視化する「GTFS-GO」を使ってみよう!

運行日で抽出、をはずし、停留所の名前は車線で1つにまとめる(名寄せするにチェック)。