序章

OpenStreetMap プロジェクトは、何千人ものユーザーによって収集および集約された生の地図データで構成されています。 しかし、そのオープンアクセスポリシーは、商用マッピングサービスによって通常提供される機能の多くをまとめてカバーする多くの担保プロジェクトを引き起こしました。

OpenStreetMapは無料(ビールとスピーチの両方)のソフトウェアで提供されるため、商用ソリューションよりもOpenStreetMapベースのソフトウェアを使用することの最も明らかな利点は経済的な利便性です。 欠点は、機能するWebサービスをセットアップするために少し構成が必要なことです。

このチュートリアルでは、次のような質問に答えることができるWebサービスの構成と保守について説明します。

  • 与えられた座標のペアに最も近い通りは何ですか?
  • ポイントAからポイントBに移動するための最良の方法は何ですか?
  • A地点からB地点まで車で、または徒歩で行くのにどれくらい時間がかかりますか?

これを可能にするソフトウェアは、OpenStreetMapデータに基づく Open Source Routing Machine(OSRM)と呼ばれるオープンソースプロジェクトです。 OpenStreetMapsをWebページに埋め込む機能は、OpenLayersなどのAPIによってすぐに利用できるようになっています。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu14.04ドロップレット。
  • このチュートリアルに従って作成できるsudo非rootユーザー。 このチュートリアルでは、sudoのroot以外のユーザー名がosrmであることを前提としています。
  • Ubuntu 14.04 でスワップを追加する方法で説明されているように、推奨される4ギガバイトのスワップ。

ソースからのOSRMの構築や前処理フェーズなど、このチュートリアルの一部の操作は、メモリを大量に消費します。 メモリの少ないドロップレットでは、これらの操作が失敗する可能性があるため、スワップファイルを割り当てる必要があります。

Webサービスは通常、実行中に追加のスワップを必要としないため、セットアップの完了後にこのスワップファイルを削除できます。 ただし、大きなマップを提供する場合、特にメモリの少ないドロップレットでは、実際には小さなスワップファイルが必要になる場合があります。 その場合は、上記のチュートリアルの手順に従って、スワップファイルを永続的にしてください。

ステップ1—アップデートとセキュリティ

このステップでは、サーバーの更新を構成します。

サーバーを最新の状態に保ち、長期にわたって安全に保つことが重要です。 したがって、最初に次のコマンドを実行して、システム内のすべてのパッケージをアップグレードします。

sudo apt-get update
sudo apt-get upgrade

次に、Ubuntuの無人セキュリティアップグレードをオンにします。 これを行うには、最初に必要なパッケージをインストールする必要があります。

sudo apt-get install unattended-upgrades

次に、ファイル/etc/apt/apt.conf.d/10periodicを編集して、自動アップグレードをオンにします。 これはシステム全体の構成ファイルであるため、sudoを使用する必要があります。

sudo nano /etc/apt/apt.conf.d/10periodic

ファイルの最後に次の行を追加し、保存して閉じます。

APT::Periodic::Unattended-Upgrade "1";

ステップ2—マップエクスポートをダウンロードする

このステップでは、マップエクスポートを選択してダウンロードします。

すべてを整理してクリーンに保つために、コードのビルドやマップの処理などを行うための専用ディレクトリを作成することをお勧めします。

mkdir osrm

新しいディレクトリに移動します。

cd osrm

私たちのWebサービスは、OpenStreetMapからの地図のエクスポートに基づいています。 マップのエクスポートを取得するには、いくつかの方法があります。

最初のオプションは、ブラウザでOpenStreetMapのエクスポートページをポイントし、関心のある領域を拡大して、エクスポートをクリックすることです。 (ネイティブエクスポートが機能しない場合は、他のソースの1つを使用する必要がある場合があります。OverpassAPIが適切な選択です。)これにより、マップに含める領域を細かく選択し、一般に削減することができます。前処理時間。

ただし、OSRM Webサイトから取得できるエクスポートのサイズには制限があるため、既製のエクスポートをダウンロードすることをお勧めします。 GeofabrikMapzenなどの多くのサービスは、ほとんどのユースケースに適した国や選択された大都市圏の更新された既製の地図のエクスポートを提供します。

どちらの方法を使用する場合でも、エクスポートのURLをコピーして、ドロップレットにダウンロードします。

wget -O map.osm url_of_the_export

これで、作業ディレクトリにmap.osmという名前のファイルが作成されます。

ステップ3—依存関係をインストールする

このステップでは、OSRMの依存関係をインストールします。

OSRMはソースからコンパイルする必要があるため、最初に必要なビルド機構をインストールする必要があります。 幸い、Ubuntuにはbuild-essentialという便利なメタパッケージが付属しており、必要なコンパイラツールチェーンが含まれています。 さらに、OSRMソースコードを取得するにはgitが必要であり、ビルドシステムを生成するにはCMakeが必要です。 次のコマンドは、これら3つすべてをインストールします。

sudo apt-get install build-essential git cmake

OSRMはかなり複雑なソフトウェアであり、多くのライブラリに依存しています。 次のコマンドを使用して、必要な依存関係をインストールできます。

sudo apt-get install libboost-all-dev libtbb-dev liblua5.2-dev libluabind-dev libstxxl-dev libxml2 libxml2-dev libosmpbf-dev libbz2-dev libprotobuf-dev

これらの依存関係はさまざまな目的で使用されます。 Luaは、カスタム速度プロファイルスクリプトを定義するために使用されます。 二次道路では、制限がない場合、車は平均時速80 kmで走行し、砂利道では平均速度は時速50kmであると定義されています。 STXXLは、大きなファイルを操作するために使用されるメモリとしてディスクスペースを使用するC++の標準ライブラリのバージョンです。 LibXMLおよびProtocolバッファーは、OSMファイルのロード、書き込み、および操作に使用され、BoostおよびTBBは、並列化およびデータ構造の表現に使用されます。

ステップ4—OSRMをコンパイルします

このステップでは、OSRMのソースコードを取得してコンパイルします。

選択したOSRMのビルドシステムがCMakeであるという事実のおかげで、依存関係がインストールされると、ビルドファイルの生成とOSRMのコンパイルがかなり簡単になります。

まず、プロジェクトのページからソースコードのクローンを作成します。 プロジェクトはいくつかのリポジトリで構成され、さまざまな機能を処理します。 バックエンド(サーバー側の部分)に関心があります。

git clone https://github.com/Project-OSRM/osrm-backend.git

次に、コードディレクトリに移動します。

cd osrm-backend

次のステップは、CMakeを使用してビルドファイルを生成することです。 ソースディレクトリが一時的なビルドファイルで汚染されないように、ソースコードルートの専用のbuildディレクトリにOSRMをビルドすることをお勧めします。

ビルドディレクトリを作成します。

mkdir build

ビルドディレクトリに移動します。

cd build

最後に、cmakeを使用してビルドファイルを生成します。 このコマンドは、buildディレクトリツリーにいくつかのディレクトリとMakefileを生成します。

cmake ..

ここでエラーが発生した場合は、前提条件の手順でスワップが有効になっていることを確認してください。

次に、OSRMをコンパイルしてインストールします。

sudo make install

:これには5〜10分かかる場合があります。

ここでは、sudoを使用してビルドする必要があります。これは、インストールターゲットが、必要なものを含め、システムのバイナリパスにある実行可能ファイルをコピーするためです。 すなわち:

  • osrm-extractは、マップファイルを開き、データに対して最初の前処理ステップを実行します。
  • osrm-prepareは、osrm-extractの出力を処理し、指定されたLua速度プロファイルに従ってすべてのマップエッジの移動時間を計算します。
  • osrm-routed実際のWebサービスデーモン。距離と場所を照会できます。

手順5—STXXLを構成する

このステップでは、STXXLの構成ファイルを作成します。

Webサービスを実行する前に、マップのエクスポートを前処理する必要があります。 必要なバイナリをシステムパスにインストールしたので、どこからでもこれを実行できます。 このチュートリアルでは、作成したosrmディレクトリのルートで前処理を実行します。

まず、osrmディレクトリに移動します。

cd ~/osrm

マップの前処理は非常にメモリを消費します。 このため、OSRMは STXXL というライブラリを使用して、ハードディスク上の内部操作をマップします。 STXXLは、ソフトウェアを実行しているのと同じディレクトリにある.stxxlという構成ファイルに依存して、STXXLデータ構造専用のスペースを決定します。 ドロップレットの容量と処理するマップのサイズに応じて、適切な.stxxl構成ファイルを作成し、操作に十分なメモリを割り当てる必要があります。

.stxxlを作成して開き、編集します。

nano .stxxl

ファイルには、disk=path,capacity,access形式の1行が含まれている必要があります。ここで、pathは割り当てファイルが配置されるパス、capacityはファイルの容量、[X172X ]