ゆきMaaS関連のプロジェクト中にバスに乗るところまで実装したので手順をまとめました。OpenStreetMapとはOpenStreetMap(OSM)は、誰でも自由に地図を使えるよう、みんなでオープンデータの地理情報を作るプロジェクトです。プロジェクトには、誰でも自由に参加して、誰でも自由に地図を編集して、誰でも自由に地図を利用することが出来ます。https://openstreetmap.jp/#zoom=5&lat=38.06539&lon=139.04297&layers=0BFFと、公式HPには書いてあります。有志が集めた情報を集約した地図データを利用できるサービスです。Planner(OTP)はOpenStreetMapとGTFS(後述)の情報から旅程を導いてくれるオープンソースソフトウェアです。具体的には、A点からB点まで移動するには「このバス停まで歩いて〇分のバスに乗って××で降りてこのルートで歩くと到着」といった情報を返してくれます。OTPはJavaで作られており、HTTPでリクエストを送ります。URLへリクエスト情報(現在地や目的地など)を乗せて送るとXMLでレスポンスが返ってきます。Specification(GTFS)には、公共交通機関の時刻表とその地理的情報に使用される共通形式が定義されています。「フィード」を利用することで、公共交通機関は乗換案内データを公開し、デベロッパーはそのデータを相互運用可能な方法で利用するアプリケーションを作成することができます。Specification(GTFS)はGoogleが作成した、運行情報をまとめたデータフォーマットです。その中身はCSV形式のテキストファイルになっており、駅の情報や時刻表、運賃表などのテキストファイルを1つのzipファイルにまとめて1フィードとしています。やったこと四日市のデータを利用してルート検索をしました。今回はこちらの記事を参考に進めました。https://qiita.com/kumatira/items/658e7b75785c854f0f69AzureにVMを建てる今回は環境をAzure上に作成したVMに作りました。LTS)Azure上にVMを構築した手順はこちらの記事にまとめました。https://tech-blog.cloud-config.jp/2019-06-14-creation-azurevm-in-terraform/Nginx導入サーバーとしてNginxをインストールします。sshでVMへログイン。nginxJavaのインストールOTPを動かすのにJavaが必要なためJavaをインストールします。1.8.0以上が必要なので注意してください。mode)OTPとGTFSをダウンロードOTPとGTFSをダウンロードするまえに作業ディレクトリを作成します。otpOTPのダウンロード。https://repo1.maven.org/maven2/org/opentripplanner/otp/1.3.0/otp-1.3.0-shaded.jarGTFSのダウンロードですが、今回は自作の四日市市のGTFSを利用しました。オープンソースのGTFSが少なすぎる......!!一般配布されているGTFSはこちらのサイトなどで調べることができます。xxx.gtfs.zipOSMのダウンロードOSMをダウンロードするのですが、配布されているOSMは地方ごとに区切られており、今回欲しい四日市のOSMは関西地域に含まれています。そんなに広いデータはいらないため切り取る必要があります。関西地域のOSMのダウンロードとはいえまずは関西のOSMのダウンロードです。作業ディレクトリから出てから落とします。http://download.geofabrik.de/asia/japan/kansai-latest.osm.pbf少し待つとダウンロードが終わるかと思います。関西以外のOSMもこちらのページから落とせるので見てみてください。http://download.geofabrik.de/asia/japan/もちろん世界のデータもあります。http://download.geofabrik.de/OSMの切り取りOSMを欲しい範囲に切り取ります。切り取りをするためのツールをインストールします。osmctools四日市の範囲で切り取ってみます。ここで指定する座標は切り取る範囲の左下の経度、緯度、右上の経度、緯度の順番になっています。緯度経度の順ではないので注意。-o=yokkaichi.pbf切り取られたpbfファイルを作業ディレクトリに入れます。必要なものがそろったのでOTPを実行してみます。--inMemory実行には結構時間がかかります。試した感じだと読み込むGTFSの量が多いほど時間がかかるようです。running.と出れば実行成功です。実行ができたらホストOSのブラウザで確認してみます。マップURLはhttp://<IPaddress>:8080/です。このような画面が出れば成功です。地図の場所が入れたOSMの場所になっています(画像では四日市)。OTP次にOTPの情報を確認してみます。URLはhttp://<IPaddress>:8080/otp/routers/default/です。XML形式のレスポンスが表示されています。<travelOptions>タグに注目してください。<travelOptions>タグはGTFSを入れないと交通機関の情報がないためBUSやTRAINが表記されません。表示結果にはBUSと表示されているので、GTFSの情報を読み込めていることがわかります。GTFSのフィード次にGTFSのフィードを確認してみます。URLはhttp://<IPaddress>:8080/otp/routers/default/index/feedsです。GTFSフィードを1つだけ入れたので1が表示されました。複数フィードを入れると2以降も表示されます。次にフィード情報を確認してみます。URLはhttp://<IPaddress>:8080/otp/routers/default/index/agencies/<number>です。次に交通機関の系統情報を確認してみます。URLはhttp://<IPaddress>:8080/otp/routers/default/index/agencies/<number>/<id>/routesです。idはフィード情報の確認時に表示されたものです。三重交通のバス情報が取得できました。経路検索してみる経路情報を聴いてみます。http://<IPaddress>:8080/otp/routers/default/plan?fromPlace=<緯度,経度>&toPlace=<緯度,経度>&time=11:00am&date=06-14-2019&mode=TRANSIT,WALK&maxWalkDistance=500&arriveBy=false&numItineraries=1表示された結果を見ると<mode>がBUSになっています。結果では<mode>がWALK、BUS、WALKの順で表示されていたので、徒歩→バス→徒歩で移動しろと言われています。結果が返ってきたので成功です!リクエストの内容次第ではPATH_NOT_FOUNDと返ってくることもあるので、GTFSのバリエーションとリクエストの内容をいろいろ変えてみるといいかもしれません。まとめOSMとOTPのダウンロードから経路検索までをやってみました。実運用するには、ここから経路をマップに表示するなどが必要そうです。ゆき2019年新卒エンジニア。チームのフロントエンド担当大臣として日々Nuxt.js(Vue.js)と格闘している。最近はUI/UXデザインに興味があり、デザインから実装までできるエンジニアを目指している。趣味はバーチャルな美少女を追うことと成ること。Days%d人のブロガーが「いいね」をつけました。