Open Source Routing MachineのAPIを使う

今回は、Open Source Routing Machine APIを利用し経路探索をする方法をRubyのプログラムを使って説明します。

目標

  • 現在地点から目的地点までの経路を探索する
  • Rubyを使う

 Open Source Routing Machine APIとは

「Open Source Routing Machine」は、出発地点から目的地点における最短経路を探索することができるサービスです。こちらから「Open Source Routing Machine」のサービスを利用することができます。
また、「Open Source Routing Machine」は、APIも提供しています。「Open Source Routing Machine」が提供するAPIは、こちらで確認できます。(2017年2月時点ではバージョン5.5.0)
利用は無料です。

今回は、「Open Source Rouging Machine API」の出発地点から目的地点における最短経路を探索するAPIの使い方をRubyのプログラムを使って説明します。

 事前準備

RubyからOpen Source Routing Machine APIを利用するためには、Rubyのライブラリである”httparty”のインストールが必要です。
Rubyのライブラリである”httparty”のインストールをするには、gemが入っている環境で以下のコマンドを実行します。

$ gem install httparty

Rubyを使うための環境構築はこちらを参照してください。

 出発地点から目的地点における最短経路を算出する方法

出発地点から目的地点における最短経路を算出する方法について説明します。

利用するエンドポイント

「出発地点から目的地点における最短経路を算出」するためには、以下のURLを利用します。

http://router.project-osrm.org/route/v1/driving/{coordinates}

coordinatesに指定するパラメータを次で説明します。

指定するパラメータ

上記エンドポイントの必須パラメータは、以下になります。

パラメータ 意味 設定例
coordinates 通過順に地点の緯度経度を設定 #{出発地点の経度},#{出発地点の緯度};#{中継地点の経度},#{中継地点の緯度};#{目的地点の経度},#{目的地点の緯度}

取得できる情報

上記エンドポイントにアクセスすることで、以下の経路情報を含むJSON形式のデータを取得できます。

プロパティ 意味
distance 経路の距離[m]
duration 所要時間[秒]
geometry 経路のジオメトリ情報

サンプルプログラム

以下、出発地点から目的地点における最短経路探索を実現するRubyのプログラムです。
東京駅をスタート地点として、スカイツリーを目的地とした場合の所要時間と距離を算出しています。

require "httparty"

## 1. 出発地点(東京駅)と目的地点(スカイツリー)の設定
currentPlaceLat = 35.681298
currentPlaceLon = 139.766247

destinationLat = 35.710063
destinationLon = 139.8107

## 2. OSRM APIへアクセスし、結果を取得
endpointUrl = "http://router.project-osrm.org/route/v1/driving/#{currentPlaceLon},#{currentPlaceLat};#{destinationLon},#{destinationLat}"
response =  HTTParty.get(URI.encode(endpointUrl))

## 3. 取得した結果を出力
puts "所要時間:#{response["routes"][0]["duration"]}秒"
puts "距離:#{response["routes"][0]["distance"]}m"

実行結果

実行結果は、次のようになります。

所要時間:653.1秒
距離:6243.1m

まとめ

以上、rubyを利用して、出発地点から目的地点における最短経路算出方法を説明しました。
同様のサービスとして、Google Map APIがありますが、こちらはフリーで利用する場合、APIリクエスト制限が厳しいです。
ただ、機能はOSRMよりGoogle Map APIの方が豊富です。
どちらを利用するかは要件を整理して、適切な方を選択するといいでしょう。