GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu 20.04にOSRMをインストールする方法–オープンソースルーティングマシン

OSRM(オープンソースルーティングマシン) は、OpenStreetMap(OSM)道路ネットワーク用の超高速ルーティングエンジンです。以前のチュートリアルでは、自己ホスト型のOpenStreetMapタイルサーバーを設定するプロセスと、Nominatimを使用して住所検索機能をマップに追加する方法について説明しました。このチュートリアルでは、車のルーティングを提供するOSRMを使用してOpenStreetMapにナビゲーション機能を追加する方法を紹介します。 、自転車のルーティング 、およびウォークルーティング

このチュートリアルはUbuntu18.04でも機能します。

前提条件

このチュートリアルに従うには、OSMタイルサーバーが稼働している必要があります。そうでない場合は、以下のチュートリアルに従って、独自のOSMタイルサーバーをセットアップしてください。

  • Ubuntu20.04でOpenStreetMapタイルサーバーを設定する方法

また、住所検索のためにNominatimなどのジオコーディングサービスにアクセスできる必要があります。

  • Ubuntu20.04でOSMNominatimGeocodingServerをセットアップする

要件が満たされたら、以下の手順に従ってOSRMサーバーをセットアップします。

ステップ1:ソースからOSRMを構築する

依存関係パッケージをインストールします。

sudo apt update

sudo apt install build-essential git cmake pkg-config doxygen libboost-all-dev libtbb-dev lua5.2 liblua5.2-dev libluabind-dev libstxxl-dev libstxxl1v5 libxml2 libxml2-dev libosmpbf-dev libbz2-dev libzip-dev libprotobuf-dev

osrmを作成します ユーザー。 (このユーザーのパスワードを作成する必要はありません。)

sudo useradd -d /srv/osrm -s /bin/bash -m osrm

自分のユーザーアカウントに権限を付与します。

sudo apt install acl

sudo setfacl -R -m u:username:rwx /srv/osrm/

/srv/osrm/に変更します ディレクトリ。

cd /srv/osrm/

GithubリポジトリからOSRMソースコードをダウンロードします。

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

buildを作成します ディレクトリ。

mkdir build

このディレクトリに移動し、ビルド環境を構成します。

cd build

cmake /srv/osrm/osrm-backend/

ソースコードをコンパイルします。

make

バイナリをインストールします。

sudo make install

次のバイナリがインストールされます。

  • / usr / local / bin / osrm-extract:
  • / usr / local / bin / osrm-partition:
  • / usr / local / bin / osrm-customize:
  • / usr / local / bin / osrm-contract:
  • / usr / local / bin / osrm-datastore:
  • / usr / local / bin / osrm-routed:

ステップ2:GNUScreenをインストールする

次のステップでは、OpenStreetMapから道路ネットワークを抽出する必要があります。これには長い時間がかかる可能性があります。コンピュータがインターネットから切断されている可能性があるため、GNUScreenユーティリティを使用してセッションを維持することをお勧めします。 Ubuntu 20.04サーバーに画面をインストールします:

sudo apt install screen

次に、画面を開始します:

screen

最初の起動時に、紹介テキストが表示されます。Enterを押すだけです。 最後まで。その後、通常どおりコマンドを実行できるようになります。

ステップ3:OSRMルーティングデータを生成する

次に、OpenStreetMapデータをダウンロードして、ルーティングに使用できるようにする必要があります。次のコマンドを実行して、惑星全体(56G)の地図データをPBF(ProtoBufBinary)形式でダウンロードします。

wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf -P /srv/osrm/osrm-backend

個々の国/州/県/市の地図が必要な場合は、http://download.geofabrik.deにアクセスしてください。たとえば、次のコマンドを使用して、英国(1.2G)の地図データをダウンロードします。

wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf -P /srv/osrm/osrm-backend

BBBike.orgは、世界中の200を超える都市と地域の抜粋をさまざまな形式で提供しています。

/srv/osrm/osrm-backend/にいることを確認してください ディレクトリ。

cd /srv/osrm/osrm-backend/

OpenStreetMapデータからグラフを抽出します。

osrm-extract britain-and-ireland-latest.osm.pbf --threads=10

デフォルトでは、car.luaを使用します プロファイル。

これで、サーバー上で他のことを行う必要がなくなる可能性があります。 Screenを使用しているので、 Ctrl + Aを押すことができます 、それらのキーを放してから、 D を押します 現在の画面セッションから切り離すためのキー。以下のようなメッセージが表示されます。

[detached from 32113.pts-1.focal]

これは、前の画面セッションIDが32113であることを示しています。SSHセッションからログアウトしたり、コンピューターをシャットダウンしたりすることもできます。心配しないでください、osrm-extract プロセスはまだ実行中です。戻って進行状況を確認する必要がある場合は、サーバーにSSHで接続し、次のコマンドを実行して前の画面セッションIDを取得します。

screen -ls

サンプル出力:

There is a screen on:
	32113.pts-1.focal	(05/19/2020 03:45:29 PM)	(Detached)
1 Socket in /run/screen/S-linuxbabe.

その後、前の画面セッションに再度接続できます。

screen -r 32113

このプロセスはメモリを大量に消費します。 (サーバーで7 GBのRAMを使用します。)完了すると、同じファイル名で.osrmのファイルが作成されます。 拡大。次のコマンドを実行して、このグラフをセルに再帰的に分割します

osrm-partition britain-and-ireland-latest.osrm

すべてのセルのルーティングの重みを計算して、セルをカスタマイズします。

osrm-customize britain-and-ireland-latest.osrm

これで、ルーティングエンジンを起動できます。

osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm

ご覧のとおり、TCPポート5000でリッスンします。

ステップ4:systemdサービスを作成する

osrm-routed --algorithm=MLD britain-and-ireland-latest.osrmを使用して、OSRMルーティングエンジンを手動で実行できます。 、ただし、osrm-routedをsystemdサービスとしてバックグラウンドで実行する方が便利です。 Ctrl+Cを押します 次のコマンドを使用して、現在のosrm-routedプロセスを停止し、osrm-routedのsystemdサービスユニットファイルを作成します。

sudo nano /etc/systemd/system/osrm-routed.service

次の行をファイルに入れます。

[Unit]
Description=Open Source Routing Machine
Wants=network-online.target
After=network.target network-online.target

[Service]
ExecStart=/usr/local/bin/osrm-routed --algorithm=MLD /srv/osrm/osrm-backend/britain-and-ireland-latest.osrm
User=osrm
Group=osrm
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

ファイルを保存して閉じます。 /srv/osrm/osrm-backend/の所有権を変更します ディレクトリ。

sudo chown osrm:osrm /srv/osrm/osrm-backend/ -R

これで、osrm-routedを起動して有効にできます。 systemdサービス。

sudo systemctl start osrm-routed

sudo systemctl enable osrm-routed

ステータスを確認してください。

systemctl status osrm-routed

osrm-routedの場合 サービスがアクティブではない(実行中)場合は、次のコマンドを実行して何が問題なのかを確認できます。

sudo journalctl -eu osrm-routed

ステップ5:ApacheWebサーバーを構成する

ApacheWebサーバーをosrm-routedのリバースプロキシとして構成できます。 ドメイン名を使用してルーティングサービスにアクセスし、HTTPS暗号化を有効にすることもできます。

ApacheWebサーバーをインストールします。

sudo apt install apache2

Apacheをリバースプロキシとして使用するには、proxyを有効にする必要があります 、proxy_http およびrewrite モジュール。

sudo a2enmod proxy proxy_http rewrite

次に、OSRMの仮想ホストファイルを作成します。

sudo nano /etc/apache2/sites-available/osrm.conf

次のテキストをファイルに追加します。 osrm.your-domain.comを置き換えます 実際のドメイン名を使用して、DNSAレコードを作成することを忘れないでください。

<VirtualHost *:80>
    ServerName osrm.your-domain.com

    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
</VirtualHost>

ファイルを保存して閉じます。次に、この仮想ホストを有効にします。

sudo a2ensite osrm.conf

変更を有効にするためにApacheをリロードします。

sudo systemctl reload apache2

これで、ドメイン名(osrm.your-domain.com)を入力して、OSRMにリモートアクセスできます。 )ブラウザのアドレスバーにあります。

ステップ6:HTTPSを有効にする

Let’s Encryptから発行された無料のTLS証明書をインストールすることで、HTTPSを有効にできます。 OSMタイルサーバーのセットアップチュートリアルでは、SnapストアからLet’s Encryptクライアント(certbot)をすでにインストールしています。したがって、TLS証明書を取得してインストールするには、次のコマンドを実行する必要があります。

sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d osrm.your-domain.com

場所:

  • --apache :Apacheプラグインを使用してください。
  • --agree-tos :利用規約に同意します。
  • --redirect :301リダイレクトでHTTPSを強制します。
  • --hsts :すべてのHTTP応答にStrict-Transport-Securityヘッダーを追加します。ドメインに常にTLSを使用するようにブラウザを強制します。 SSL/TLSストリッピングから防御します。
  • --staple-ocsp :OCSPステープリングを有効にします。有効なOCSP応答は、TLS中にサーバーが提供する証明書にホチキス止めされます。

これで、証明書が取得され、自動的にインストールされます。また、安全なHTTPS接続を介してWebminWebインターフェイスにアクセスできるようになります。

ステップ7:OSRMをSlippyMapと統合する

滑りやすい地図はLeafletJavaScriptライブラリを使用して表示され、滑りやすい地図にNominatimジオコーディングサービスが追加されていると思います。

OSRMを滑りやすい地図と統合するために、LeafletRoutingMachineと呼ばれるプラグインを使用できます。まず、LeafletルーティングマシンのJavaScriptファイルとCSSファイルを滑りやすい地図に含めます。メインのLeafletJavaScriptとLeafletControlGeocoderJavaScriptの後に配置する必要があることに注意してください。

<html>
  <head>
     ....
     ....
     <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.css" />
     <script src="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.js"></script>
 </head>
 <body>
 ....
 ....
 </body>
</html>

次に、次の行を<script>...</script>に追加します HTML本文のスニペット。

     L.Routing.control({
         serviceUrl: 'https://osrm.your-domain.com/route/v1',
         geocoder: L.Control.Geocoder.nominatim({serviceUrl:'https://tile.your-domain.com/nominatim/'}),
         routeWhileDragging: true
       }).addTo(map);

このように:

<html>
  <head>
     ....
     ....
     <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.css" />
     <script src="https://unpkg.com/[email protected]/dist/leaflet-routing-machine.js"></script>
 </head>
 <body>
   <div id="map"></div>
     <script>
     ....
     ....


     L.Routing.control({
         serviceUrl: 'https://osrm.your-domain.com/route/v1',
         geocoder: L.Control.Geocoder.nominatim({serviceUrl:'https://tile.your-domain.com/nominatim/'}),
         routeWhileDragging: true
       }).addTo(map);

    </script>

  </body> 
</html>

ファイルを保存して閉じます。次に、ウェブブラウザで地図を再読み込みすると、右上隅に開始アドレスと宛先アドレスを入力できるコントロールパネルが表示されます。

地図上でウェイポイントをドラッグすると、OSRMが自動的にルートを再計算します。


Ubuntu
  1. Ubuntuのインストール| Ubuntu 11.10(Oneiric Ocelot)をインストールするにはどうすればいいですか?

  2. Ubuntu21.04にTensorFlow「機械学習」をインストールする方法

  3. ヘッドレスマシンにUbuntuをインストールする方法は?

  1. Ubuntu20.04にRをインストールする方法

  2. Ubuntu18.04にGoをインストールする方法

  3. Ubuntu16.04にOpenRealEstateをインストールする方法

  1. Ubuntu18.04にRをインストールする方法

  2. Ubuntu 18.04 LTSにオープンソースソーシャルネットワーク(OSSN)をインストールする方法

  3. Ubuntu16.04にOpenVisualTracerouteをインストールする方法