超初心者向けGTFSを使ったOpenTripPlannerの使い方(Windows版)

## 今回やることの簡単な説明
GTFSという経路検索のフォームを用いて、過去の時刻表データを作成し、旅客輸送における時代変遷を調べようと思いました。
今回は、オープンソースを用いて自作のGTFSデータを動かすための準備を行います。

### GTFSデータとは
GTFSデータとは、経路検索のための世界的な標準プラットフォームです。

https://text.odekake.co.jp/20201105-2/

#### GTFSデータの作り方
ここでは説明を省略します。[西沢ツール](https://gtfs-gis.jp/gtfs/)や[その筋屋](http://www.sinjidai.com/sujiya/)を使うのが一般的です。
日本国内の路線バスでは、多くの路線がGTFSデータを公開しています。以下のサイトなどでその一覧を確認することができます。
具体的に利用するエリアや運行会社が決まっている場合は、「バス会社 GTFS」と調べてみるとよいでしょう。

https://bus-routes.net/gtfs_list.php


### 参考になるQiita記事
これらはMacOSやUbuntuでの動作を説明しています。

https://qiita.com/kumatira/items/5235554b12f5f2725301

https://qiita.com/niyalist/items/1d3941761df3969f16a2

## 操作手順の説明
操作手順は、
- OSM(OpenStreetMap)を編集するためのosmosisというソフトをインストール
- OSMデータのインストール
- OSMデータの編集(osmosisを用いる)
- 経路検索エンジンとなるOTP(OpenTripPlanner)のインストール
- OTP起動～解析
となります。

### osmosisのインストール
OSMの生データをコマンドで編集できるソフトがosmosisです。
以下リンクからzipファイルをダウンロードしてください。解凍したら、C:\Program Files (x86)にソフトを入れましょう。

https://github.com/openstreetmap/osmosis/releases

詳細はこの2つの記事を参考にしてください。

https://wiki.openstreetmap.org/wiki/Osmosis/Quick_Install_(Windows)

https://learnosm.org/ja/osm-data/osmosis/

2つめのページだとPath環境変数の設定の仕方が以前のWindowsの方法となっていますので、以下を参考にPath変数を指定してください。これにより、コマンドプロンプトを開いたときにosmosisと入力するだけで起動可能です。

https://atmarkit.itmedia.co.jp/ait/articles/1805/11/news035.html

### OSMデータのインストール
OpenStreetMapで使用されている道路のデータをダウンロードします。
geofabrik.deのサイトから各地域に分けてDLが可能です。

https://download.geofabrik.de/asia/japan.html


### OSMデータの編集
自分のユーザーファイル(C:\User\Username)のところに「otp」のディレクトリ(新しいファイル)を作成します。
コマンドプロンプトに移動(Windowsマークの隣の検索画面からcmdと入力すると出てくる)して以下を入力してください。
```
cd otp
```
先ほどインストールしたosmosisは、それぞれコマンドを入力することでOpenStreetMapのデータの編集ができます。
例：osmoisを使って切り取り(chubu-latest.osm.pbfから山梨県西部を切り取り)
```
osmosis --read-pbf chubu-latest.osm.pbf --bounding-box top=37.0586280822754 left=138.397018432617 bottom=35.9853324890137 right=139.669952392578 completeWays=yes --write-pbf westyamanashi.pbf
```

例：osmosisを使って関東、中部のデータをmerge。
```
osmosis --rb chubu-latest.osm.pbf --rb kanto-latest.osm.pbf --merge --wb centjapan-latest.osm.pbf omitmetadata=true
```
例：mergeしたファイルを中央線沿線で切り取り。
```
osmosis --read-pbf centjapan-latest.osm.pbf --bounding-box top=36.00 left=138.20 bottom=35.14 right=139.72 completeWays=yes --write-pbf aroundyamanashi.pbf
```
今日紹介した以外のosmosisの使い方はこのサイトが参考になります。

http://shopping2.gmobb.jp/htdmnr/www08/gis/osmosis01.html

### OpenTripPlanner(OTP)のインストール
データの下準備が終わったので、実際に経路の解析を行うOpenTripPlannerをダウンロードしましょう。
手順は以下の通りです。
(1)さきほど作成した「otp」のディレクトリ(新しいファイル)を開く。
(2)以下リンクにアクセス。最新バージョンのディレクトリを開く。
(3)文末に「shadded.jar」と書かれたものを(1)で開いたディレクトリにダウンロード。
(4) 後ほど説明しますが、到達圏解析を行うのであれば1.5.0を使います。

https://repo1.maven.org/maven2/org/opentripplanner/otp/

###  OTPの起動
OTPは以下コマンドを入力することで起動ができます。
「otp」ディレクトリの中に含まれるosmデータおよびGTFSデータから解析が行われるので、編集前のダウンロードしたときのosmデータは消しておく。(コマンドプロンプトを使いこなせる人は、osmosisをほかのディレクトリで動作させて、完成したosmデータのみをotpディレクトリに入れるほうが良い)

メモリ10GBまでの利用を認める場合
```
java -Xmx10G -jar otp-1.5.0-shaded.jar --build ./ --inMemory
```

メモリ4GBまでの利用を認める場合
```
java -Xmx4G -jar otp-1.5.0-shaded.jar --build ./ --inMemory
```

コマンドを打つと、サーバーが起動し、OSMデータを計算してデータベースを作成し始めます。
下記メッセージが出たら準備完了です。
>Grizzly server running.

以降はブラウザ上でURLを打つ形で実行します。
Chromeやfirefox等でやってみましょう。

接続が完了しているか確認する
```
http://localhost:8080/otp/routers/default/
```

入力GTFSデータ数の確認
```
http://localhost:8080/otp/routers/default/index/feeds
```


from甲府 to小淵沢 13:00出発
```
http://localhost:8080/otp/routers/default/plan?fromPlace=35.667125,138.568760&toPlace=35.863803,138.316423&time=1:00pm&date=11-30-2022&mode=TRANSIT,WALK&maxWalkDistance=300000&arriveBy=false&numItineraries=5
```


from新宿　to甲府 13:00到着
```
http://localhost:8080/otp/routers/default/plan?fromPlace=35.690190,139.700617&toPlace=35.667125,138.568760&time=1:00pm&date=11-30-2022&mode=TRANSIT,WALK&maxWalkDistance=300000&arriveBy=true&numItineraries=5
```

これらの検索では、numItinerariesで設定した数だけ経路が検索されて、XMLが返ってきます。
続いて、到達圏についてです。
到達圏の詳しいパラメータについては、以下のページを参考にしてください。

https://qiita.com/niyalist/items/1d3941761df3969f16a2

Ver.2以降では到達圏解析を行う機能をなくし、経路検索に特化していきました。
[Conveyal R5](https://github.com/conveyal/r5)というものを使うことが推奨されています。
OpenTripPlannerでの到達圏解析というのは少しレガシーなものになるかもしれません。