OSRMルーティングサービスを展開する

より最近では、プロジェクトの1つで、サイクリング用のマップ上にルートを作成する方法を学習する必要がありました。



まず、GoogleとYandexのルートを調べ始めました。 そして残念なことに、私は彼らを放棄しなければなりませんでした、なぜなら 前者は自分の地図にのみ表示することを許可しましたが、後者は自転車や歩行者さえいることを知りませんでした。



サブジェクト領域を少し研究した結果、探していたものがオープンソースルーティングマシンであることがわかりました。 サーバーに独自のルート構築サービスを展開できるオープンソースプロジェクト。







タイル: MapBoxYandex Maps

地図データ: OpenStreetMapメンバー



構成と実行の方法を考え出したので、これを共有し、インストールプロセスを自分の言葉で、またプロセスで何を処理する必要があるのか​​をもう一度説明することにしました。



プロジェクトwikiでは、インストールプロセスについて詳しく説明しています。 さまざまなオペレーティングシステム(Debian、CentOS、Mac OS Xなど)のインストールについて説明し、EC2 Microにデプロイする際の問題について説明します。「特に高度」の場合、Chefのレシピがあります。



サーバーのOSとしてDebian Wheezy(64)があったことは幸運でした。 ドキュメントを読むとき、他のシステムではさまざまな追加手順を実行する必要があることが判明したためです。 たとえば、Debian Squeezeでは、boostをバージョン1.44にアップグレードする必要がありました。 しかし、これらはすべて、開発者のおかげで、ドキュメントに書かれています。



私たちのインストールは3つの簡単な行を取りました:



sudo apt-get install git libboost-dev gcc g++ make cmake libstxxl-dev \ libxml2-dev libbz2-dev zlib1g-dev libzip-dev libboost-filesystem-dev \ libboost-thread-dev libboost-system-dev libboost-regex-dev libboost-program-options-dev \ libboost-iostreams-dev libgomp1 libpng-dev libprotoc7 libprotobuf-dev protobuf-compiler \ liblua5.1-0-dev libluabind-dev pkg-config libosmpbf-dev
      
      





 git clone https://github.com/DennisOSRM/Project-OSRM.git
      
      





 mkdir -p build; cd build; cmake ..; make
      
      







その後、数分考えた後、サーバーはアセンブリが成功したことを報告しました。



さて、次の段階が始まりました。それが最も長くなったので、打ち上げです。



サーバーを起動するには、グラフを作成するためのデータを準備する必要があります。 それらをダウンロードするには、 OpenStreetMapマップからそれらを抽出する必要があります。 これは、付属のユーティリティで実行されます。



ただし、最初にルートを構築する地域の地図をダウンロードする必要があります。



開発者は、 GeoFabrikサービスの使用をお勧めします。 地球の主要な大陸、個々の国および地域の地図をダウンロードできます。 しかし、私たちはもっと欲しかったので、 Planet OSMを通して惑星の地図全体を送り出しました。



osrm-extractユーティリティを使用して、データをカードから抽出し、さらにダウンロードするために保存します。 データを取得する前に、必要なルートを記述するプロファイルファイル(profile.lua)を指定する必要があります。 すべてのプロファイルは、ルートソースフォルダーのプロファイルフォルダーにあり、目的のファイルへのリンクを作成することで接続されます。



ln -s ../profiles/bicycle.lua profile.lua







ご覧のとおり、サイクリストのプロファイルを示しています。 しかし、道路輸送と歩行者の両方のプロファイルがあります。

また、追加のライブラリがあるフォルダーへのリンクを指定する必要がある場合があります



ln -s ../profiles/lib/







その後、ユーティリティ自体を実行します。



./osrm-extract map.osm







開発者にもう一度クレジットを与える必要があります-彼らはプロセスが長いことを正直に警告し、8GB RAMと(遅い)5400 RPM Samsung SATAを搭載したCore i7の構成に65分かかるとさえ書いています。



サーバー(Core i5、8GB RAM、5400)では、最終的に35 GBカードのファイルが4時間処理されました。 将来的には、ロシアのヨーロッパ地域の地図を取得するための実験として、30分かかりました。



開発者は、最初にカードをPBF形式でダウンロードし、次にSSDドライブに切り替えることを高速化することをお勧めします:)

そして、osrm拡張子のファイルができました。 ただし、キットから別のユーティリティを使用する必要があります-osrm-prepare。

それはいくつかのファイルを作成します:hsgr-最適なノードを見つけるためのルートの階層、ノード-ルートのグラフ、およびインデックス付きのファイル。 ユーティリティを実行することにより、



./osrm-prepare map.osrm







コーヒーを飲むためにまた座った このプロセスには再び数時間かかりました。 そして今、画面上で大事にされた100%を見て、サーバー自体を起動しました:



./osrm-routed







しかし、開始する前に、サーバーのあるディレクトリにserver.ini初期化ファイルを配置する必要がありました。 その中で、どのファイルとどこを取得するか、いくつかの起動パラメータを示します。



 Threads = 4 IP = 0.0.0.0 Port = 5000 hsgrData=./map.osrm.hsgr nodesData=./map.osrm.nodes edgesData=./map.osrm.edges ramIndex=./map.osrm.ramIndex fileIndex=./map.osrm.fileIndex namesData=./map.osrm.names
      
      







やった! サーバーが起動し、ルートを作成する準備ができたことを示す行で喜んで点滅しました。 しかし、返されたJSONを見るのは面白くありませんでした。 そしてこの場合、開発者はOSRMを使用するための小さなWebアプリケーションを持っています。



このアドレスでソースをダウンロードしてください。 それらをWebサーバーに投稿します。 これ以上追加の設定を行う必要はありません-httpページに移動するだけです:// <your-server> /osrm/main.html



デフォルトでは、アプリケーションはOSRMデモサーバー上で構成されますが、OSRM.config.jsファイルを開くと、ROUTING_ENGINESセクションのurlパラメーターを変更して、サーバーアドレスをインストールしたアドレスに変更できます。



そして今、私たちは独自のルート構築サービスを提供しています。 ご清聴ありがとうございました!



All Articles