[OpenStreetMap]プロジェクトは、数千人のユーザーによって収集および集約された生の地図データで構成されています。そのオープンアクセスポリシーにより、商用マッピングサービスで通常提供される機能の多くをまとめてカバーする多数の担保プロジェクトが発生しました。OpenStreetMapは無料(ビールでも音声でも)のソフトウェアであるため、商用ソリューションよりもOpenStreetMapベースのソフトウェアを使用することの最も明白な利点は経済的な利便性です。欠点は、機能するWebサービスをセットアップするために少し構成が必要なことです。このチュートリアルでは、次のような質問に答えることができるWebサービスの構成と保守について説明します。Machine(OSRM)]と呼ばれるオープンソースプロジェクトで、OpenStreetMapデータに基づいています。[OpenLayers]などのAPIによってすぐに使用できるようになっています。前提条件このチュートリアルを実行するには、次のものが必要です。14.04ドロップレット。[このチュートリアル]に従って作成できるsudo非ルートユーザー。+」であることを前提としています。14.04でスワップを追加する方法で説明されているように、推奨される4ギガバイトのスワップ。ソースからのOSRMの構築や前処理段階など、このチュートリアルの操作の一部はメモリを集中的に使用します。メモリが少ないDropletでは、これらの操作が失敗する場合があります。そのため、スワップファイルを割り当てる必要があります。Webサービスは通常、実行中に追加のスワップを必要としないため、セットアップの完了後にこのスワップファイルを削除できます。大きなマップを提供する場合、特に低メモリドロップレットでは、実際には小さなスワップファイルが必要になる場合があります。その場合は、上記のチュートリアルの指示に従って、スワップファイルを永続化します。ステップ1-更新とセキュリティこの手順では、サーバーの更新を構成します。サーバーを常に最新の状態に保ち、長期にわたって安全に保つことが重要です。したがって、最初に次のコマンドを実行して、システム内のすべてのパッケージをアップグレードします。upgrade次に、Ubuntuの無人セキュリティアップグレードを有効にします。これを行うには、まず必要なパッケージをインストールする必要があります。`を編集して自動アップグレードを有効にします。+」を使用する必要があります。/etc/apt/apt.conf.d/10periodicファイルの最後に次の行を追加し、保存して閉じます。"1";ステップ2-マップエクスポートのダウンロードこのステップでは、マップのエクスポートを選択してダウンロードします。すべてを整理整頓するために、コードのビルド、マップの処理などを行う専用のディレクトリを作成することをお勧めします。osrm新しいディレクトリに移動します。osrm私たちのWebサービスは、OpenStreetMapからのマップエクスポートに基づいています。マップのエクスポートを取得するには、いくつかの方法があります。[エクスポートページ]にアクセスし、関心のある領域を拡大して、[エクスポート]をクリックすることです。(ネイティブエクスポートが機能しない場合は、他のソースのいずれかを使用する必要がある場合があります。OverpassAPIが適切な選択です。)これにより、マップに含めるエリアを細かく選択し、一般的に、前処理時間。Webサイトから取得できるエクスポートのサイズには制限があるため、既製のエクスポートをダウンロードすることをお勧めします。[Geofabrik]やhttps://mapzen.com/metro-extracts[Mapzen]などの多くのサービスは、国および選択した大都市圏の更新さ​​れた既製の地図エクスポートを提供します。ほとんどのユースケースに適しています。どちらの方法を使用する場合でも、エクスポートのURLをコピーして、ドロップレットにダウンロードします。+」という名前のファイルができました。ステップ3-依存関係のインストールこのステップでは、OSRMの依存関係をインストールします。OSRMはソースからコンパイルする必要があるため、最初に必要なビルドマシンをインストールする必要があります。」という便利なメタパッケージが付属しています。次のコマンドは、これら3つすべてをインストールします。cmakeOSRMはかなり複雑なソフトウェアであり、多くのライブラリにも依存しています。次のコマンドを使用して、必要な依存関係をインストールできます。libprotobuf-devこれらの依存関係はさまざまな目的に使用されます。Luaは、カスタム速度プロファイルスクリプトを定義するために使用されます。hであると定義しています。++の標準ライブラリのバージョンであり、メモリとしてディスクスペースを使用し、大きなファイルを操作するために使用されます。LibXMLとプロトコルバッファーは、OSMファイルの読み込み、書き込み、操作に使用され、BoostとTBBは、並列化とデータ構造の表現に使用されます。ステップ4-OSRMのコンパイルこのステップでは、OSRMのソースコードを取得してコンパイルします。OSRMの最適なビルドシステムはCMakeであるため、依存関係をインストールすると、ビルドファイルの生成とOSRMのコンパイルが非常に簡単になります。プロジェクトのhttps://github.com/Project-OSRM/osrm-backend[page]からソースコードを複製します。このプロジェクトは、さまざまな機能を処理する複数のリポジトリで構成されています。バックエンド(サーバー側の部分)に関心があります。https://github.com/Project-OSRM/osrm-backend.git次に、コードディレクトリに移動します。osrm-backend次のステップは、CMakeを使用してビルドファイルを生成することです。+`ディレクトリでOSRMをビルドすることをお勧めします。ビルドディレクトリを作成します。buildビルドディレクトリに移動します。`でビルドファイルを生成します。+`ディレクトリツリーに多数のディレクトリとMakefileを生成します。..ここでエラーが発生した場合は、前提条件の指示に従ってスワップが有効になっていることを確認してください。次に、OSRMをコンパイルしてインストールします。install注:これには5〜10分かかる場合があります。+」でビルドする必要があります。+`は、マップファイルを開き、データに対して最初の前処理ステップを実行します。+`の出力を処理し、指定されたLua速度プロファイルに従ってすべてのマップエッジの移動時間を計算します。+`は実際のWebサービスデーモンです。これにより、距離と場所を照会できます。ステップ5-STXXLの構成このステップでは、STXXLの構成ファイルを作成します。Webサービスを実行する前に、マップのエクスポートを前処理する必要があります。システムパスに必要なバイナリをインストールしたため、どこからでもこれを行うことができます。+`ディレクトリのルートで前処理を実行します。+`ディレクトリに移動します。~/osrmマップの前処理は、かなりのメモリを消費します。このため、OSRMはhttp://stxxl.sourceforge.net/[STXXL]というライブラリを使用して、ハードディスク上の内部操作をマッピングします。」という設定ファイルに依存して、STXXLデータ構造専用の領域を決定します。+」設定ファイルを作成し、操作に十分なメモリを割り当てる必要があります。+`を作成して開きます。」の1行が含まれている必要があります。+」ファイルアクセスの実装です。`ファイルの例を示します。+」に貼り付けることができますが、使用しているマップとドロップレットのサイズに基づいてファイルのサイズを変更することもできます。[ドキュメント]を参照してください。+`を保存して閉じます。ステップ6-マップの抽出このステップでは、マップを抽出します。前処理の最初のステップは、マップの抽出です。+`という名前の適切な速度プロファイルスクリプトが存在することを前提としています。速度プロファイルは、使用可能なルートのどれを使用できるかを判断するために使用されます(たとえば、トラックの速度プロファイルは一部の道路を禁止する場合があります)。`ディレクトリの下にいくつかのデフォルトの速度プロファイルスクリプトが含まれています。+`プロファイルを使用します速度プロファイルスクリプトは、プロファイルライブラリで定義されたいくつかのLua関数に依存する可能性があるため、次の2つのコマンドを実行して、同じディレクトリにシンボリックリンクを作成します。+`を含む、前処理ディレクトリに一連のファイルを生成します。ステップ7-移動時間の計算このステップでは、マップの移動時間を計算します。+」コマンドによって実行されます。このコマンドは、速度プロファイルスクリプトを使用して、マップグラフの各エッジの移動時間を計算します。これを行うには、次のコマンドを実行します。map.osrmこのステップでは、次のセクションで設定するWebサービスに必要な追加のファイルも作成します。手順8-Webサービスの実行とテストこのステップでは、OSRMを実行し、ブラウザー経由で動作することをテストします。+」が付属しています。このコマンドは、処理済みのマップを読み取り、WebサービスAPIを介してクエリを実行できます。http://:5000+」を指定することで、Webサービスの動作を確認できるようになります。+`のようなエラーメッセージが表示されます。テストとして、マップ境界内の緯度と経度の座標のセットを選択し、次のURLに移動して、「」と「」を選択した座標に置き換えます。http://:5000/nearest?loc=,次のようなJSON出力が表示されるはずです。"status":0}これの代わりにエラーメッセージが表示された場合は、マップの境界外の座標セットを選択しているか、クエリ構文が間違っている可能性があります。API]をご覧ください。+`で動作するようにNginxをセットアップします。これで機能するWebサービスができましたが、ポートを指定してクエリを実行するのは面倒です。異なるマップまたは異なる速度プロファイルで処理されたマップを提供することにした場合、ポートのコレクションを覚えておく必要はありません。Nginxは高性能のWebサーバーであり、プロキシとしても機能し、Webサービスのゲートウェイとしても機能します。+`で動作するように設定するのはかなり簡単です。Nginxをインストールします。nginx次に、Webサービスの構成ファイルを追加します。+」でシンボリックにリンクすることです。sites-available`に追加します。