Edited at

オープンソースの経路探索「OpenTripPlanner」をDockerで動かして岡山県で経路探索をする

見覚えのあるタイトル!と思った方はヴァル研Qiitaマニア🤔

後輩が書いた記事をそっくりパクって参考にdocker使ってどこの環境でも動くものにしてしまおう。

細かい説明は、そちらの記事にあるので、そちらを見ていただいて...()

https://qiita.com/kumatira/items/658e7b75785c854f0f69


今回作成したDockerfileがこちら

多少、上の記事の手順を入れ替えてますが、同じ内容です。

https://github.com/soe-j/open-trip-planner/blob/master/Dockerfile


Dockerfile

FROM ubuntu:latest

RUN apt-get -y update

RUN apt-get install -y openjdk-8-jre
RUN apt-get install -y wget

RUN cd /root && \
mkdir otp && \
cd otp && \
wget "https://repo1.maven.org/maven2/org/opentripplanner/otp/1.3.0/otp-1.3.0-shaded.jar" && \
wget "http://www3.unobus.co.jp/opendata/GTFS-2018-04-15.zip" -O unobus.gtfs.zip && \
wget "http://www.shimoden.net/busmada/opendata/GTFS_JP.zip" -O shimodenbus.gtfs.zip && \
wget "http://loc.bus-vision.jp/gtfs/ryobi/gtfsFeed" -O ryobibus.gtfs.zip && \
wget "http://loc.bus-vision.jp/gtfs/okaden/gtfsFeed" -O okadenbus.gtfs.zip && \
wget "http://loc.bus-vision.jp/gtfs/chutetsu/gtfsFeed" -O chutetsubus.gtfs.zip

RUN cd /root && \
apt install -y osmctools && \
wget "http://download.geofabrik.de/asia/japan/chugoku-latest.osm.pbf" && \
osmconvert chugoku-latest.osm.pbf -b=133.455201,34.274923,134.298740,35.284564 --complete-ways -o=okayama.pbf && \
mv okayama.pbf otp/

ENTRYPOINT java -Xmx5G -jar /root/otp/otp-1.3.0-shaded.jar --build /root/otp/ --inMemory


このDockerfileのあるディレクトリで、以下のコマンドを実行。

Image名のkumanoは特に意味はありません。uniqになれば何でもいいです。

$ docker build -t kumano/otp:0.1 ./

$ docker run --name otp -p 8080:8080 kumano/otp:0.1


docker-composeも使えるあなたはこちら

Dockerfileが同じディレクトリにある想定です。

https://github.com/soe-j/open-trip-planner/blob/master/docker-compose.yml


docker-compose.yml

version: "2"

services:
otp:
build:
context: ./
image: kumano/otp:0.1
ports:
- 8080:8080

dockerコマンドを叩く代わりに、このコマンドを実行。

docker-compose.ymlのあるディレクトリでお願いします。

$ docker-compose up


さて、動作確認

buildもrun(up)もめちゃめちゃ時間がかかるので、お茶でも淹れていましょう🍵

dockerコンテナが立ち上がった後も、じわりじわりとログが流れていてOTPが起動できてないことがわかります。

otp_1  | 10:36:50.176 INFO (NetworkListener.java:750) Started listener bound to [0.0.0.0:8080]

otp_1 | 10:36:50.181 INFO (NetworkListener.java:750) Started listener bound to [0.0.0.0:8081]
otp_1 | 10:36:50.184 INFO (HttpServer.java:300) [HttpServer] Started.
otp_1 | 10:36:50.184 INFO (GrizzlyServer.java:153) Grizzly server running.

上のようにポート8080が開通したら合図です。

以下のパスを叩いてみて喜びましょう👐


利用できる交通手段

http://localhost:8080/otp/routers/default/


Feedid一覧

http://localhost:8080/otp/routers/default/index/feeds


上で取れたFeedIDの一つを使ってFeedの提供事業者を見てみる

http://localhost:8080/otp/routers/default/index/agencies/1


上の情報から取れる事業者IDを使って、その事業者の全系統表示

http://localhost:8080/otp/routers/default/index/agencies/1/1260001000674/routes


経路探索

http://localhost:8080/otp/routers/default/plan?fromPlace=34.656513,133.975075&toPlace=34.665495,133.918570&time=1:02pm&date=11-14-2018&mode=TRANSIT,WALK&maxWalkDistance=500&arriveBy=false&numItineraries=5

http://localhost:8080/otp/routers/default/plan?fromPlace=34.779151,134.038106&toPlace=34.665495,133.918570&time=1:02pm&date=11-14-2018&mode=TRANSIT,WALK&maxWalkDistance=500&arriveBy=false&numItineraries=5


まとめ

Dockerを使ってこんなに手順を減らせました

$ git clone git@github.com:soe-j/open-trip-planner.git

$ cd open-trip-planner
$ docker-compose up

Docker最高。

@kumatira ご教示ありがとうございました!