GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So installieren Sie OSRM auf Ubuntu 20.04 – Open Source Routing Machine

OSRM (Open-Source-Routing-Maschine) ist eine superschnelle Routing-Engine für OpenStreetMap (OSM)-Straßennetze. In früheren Tutorials haben wir erklärt, wie Sie einen selbst gehosteten OpenStreetMap-Kachelserver einrichten und wie Sie Ihrer Karte mit Nominatim eine Adresssuchfunktion hinzufügen. Dieses Tutorial zeigt Ihnen, wie Sie Ihrer OpenStreetMap mit OSRM, das Car Routing bietet, Navigationsfunktionen hinzufügen , Fahrradrouten , und Walk-Routing .

Dieses Tutorial funktioniert auch unter Ubuntu 18.04.

Voraussetzungen

Um diesem Tutorial zu folgen, sollten Sie einen OSM-Kachelserver haben, der läuft. Falls nicht, folgen Sie bitte der Anleitung unten, um Ihren eigenen OSM-Kachelserver einzurichten.

  • So richten Sie OpenStreetMap Tile Server unter Ubuntu 20.04 ein

Sie sollten auch Zugriff auf einen Geocodierungsdienst wie Nominatim für die Adresssuche haben.

  • OSM Nominatim Geocoding Server auf Ubuntu 20.04 einrichten

Sobald die Anforderungen erfüllt sind, befolgen Sie die nachstehenden Anweisungen, um den OSRM-Server einzurichten.

Schritt 1:OSRM aus Quelle erstellen

Abhängigkeitspakete installieren.

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

Erstellen Sie das osrm Benutzer. (Für diesen Benutzer muss kein Passwort erstellt werden.)

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

Gewähren Sie Ihrem eigenen Benutzerkonto Berechtigungen.

sudo apt install acl

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

Wechseln Sie zu /srv/osrm/ Verzeichnis.

cd /srv/osrm/

Laden Sie den OSRM-Quellcode aus seinem Github-Repository herunter.

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

Erstellen Sie den build Verzeichnis.

mkdir build

Wechseln Sie in dieses Verzeichnis und konfigurieren Sie die Build-Umgebung.

cd build

cmake /srv/osrm/osrm-backend/

Kompilieren Sie den Quellcode.

make

Installieren Sie die Binärdateien.

sudo make install

Die folgenden Binärdateien werden installiert.

  • /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:

Schritt 2:Installieren Sie GNU Screen

Im nächsten Schritt müssen wir Straßennetze aus OpenStreetMap extrahieren, was sehr lange dauern kann. Ihr Computer ist möglicherweise nicht mit dem Internet verbunden, daher wird empfohlen, das Dienstprogramm GNU Screen zu verwenden, um Ihre Sitzung am Leben zu erhalten. Installationsbildschirm auf dem Ubuntu 20.04-Server:

sudo apt install screen

Dann Startbildschirm:

screen

Beim ersten Start sehen Sie einen Einführungstext, drücken Sie einfach Enter beenden. Dann können Sie wie gewohnt Befehle ausführen.

Schritt 3:OSRM-Routingdaten generieren

Jetzt müssen wir die OpenStreetMap-Daten herunterladen und für das Routing nutzbar machen. Führen Sie den folgenden Befehl aus, um die Kartendaten des gesamten Planeten (56G) im PBF-Format (ProtoBufBinary) herunterzuladen.

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

Wenn Sie eine Karte eines einzelnen Landes/Staates/einer Provinz/Stadt wünschen, gehen Sie zu http://download.geofabrik.de. Laden Sie beispielsweise die Kartendaten von Großbritannien (1.2G) mit dem folgenden Befehl herunter.

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

BBBike.org bietet außerdem Auszüge aus mehr als 200 Städten und Regionen weltweit in verschiedenen Formaten.

Stellen Sie sicher, dass Sie sich im /srv/osrm/osrm-backend/ befinden Verzeichnis.

cd /srv/osrm/osrm-backend/

Extrahieren Sie eine Grafik aus den OpenStreetMap-Daten.

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

Standardmäßig wird car.lua verwendet Profil.

Jetzt müssen Sie wahrscheinlich keine anderen Dinge auf Ihrem Server tun. Da Sie Screen verwenden, können Sie Strg+A drücken , lassen Sie diese Tasten los und drücken Sie dann D Taste, um die aktuelle Bildschirmsitzung zu trennen. Sie sehen eine Nachricht wie unten.

[detached from 32113.pts-1.focal]

Dies sagt mir, dass die vorherige Screen-Sitzungs-ID 32113 ist. Sie können sich von der SSH-Sitzung abmelden und sogar Ihren Computer herunterfahren. Keine Sorge, der osrm-extract Prozess läuft noch. Wenn Sie zurückkommen und den Fortschritt überprüfen müssen, verbinden Sie sich mit SSH mit Ihrem Server und führen Sie den folgenden Befehl aus, um die vorherige Bildschirmsitzungs-ID abzurufen.

screen -ls

Beispielausgabe:

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

Dann können Sie sich wieder mit der vorherigen Screen-Sitzung verbinden.

screen -r 32113

Dieser Vorgang ist speicherintensiv. (Es verwendet 7 GB RAM auf meinem Server.) Sobald es fertig ist, gibt es eine Datei mit demselben Dateinamen, aber mit dem .osrm Verlängerung. Führen Sie den folgenden Befehl aus, um dieses Diagramm rekursiv in Zellen zu unterteilen

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

Passen Sie die Zellen an, indem Sie Routing-Gewichte für alle Zellen berechnen.

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

Jetzt können Sie die Routing-Engine starten.

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

Wie Sie sehen können, lauscht es auf TCP-Port 5000.

Schritt 4:Systemdienst erstellen

Wir können die OSRM-Routing-Engine manuell mit osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm ausführen , aber es ist bequemer, osrm-routed als systemd-Dienst im Hintergrund auszuführen. Drücken Sie Ctrl+C um den aktuellen osrm-routed-Prozess zu stoppen und eine systemd-Service-Unit-Datei für osrm-routed mit dem folgenden Befehl zu erstellen.

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

Fügen Sie die folgenden Zeilen in die Datei ein.

[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

Speichern und schließen Sie die Datei. Ändern Sie den Besitz von /srv/osrm/osrm-backend/ Verzeichnis.

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

Jetzt können wir das osrm-routed starten und aktivieren systemd-Dienst.

sudo systemctl start osrm-routed

sudo systemctl enable osrm-routed

Status prüfen.

systemctl status osrm-routed

Wenn die osrm-routed Dienst nicht aktiv ist (wird ausgeführt), können Sie den folgenden Befehl ausführen, um zu sehen, was falsch ist.

sudo journalctl -eu osrm-routed

Schritt 5:Konfigurieren Sie den Apache-Webserver

Wir können den Apache-Webserver als Reverse-Proxy für osrm-routed konfigurieren Service, damit wir einen Domänennamen verwenden können, um auf den Routing-Service zuzugreifen und auch die HTTPS-Verschlüsselung zu aktivieren.

Installieren Sie den Apache-Webserver.

sudo apt install apache2

Um Apache als Reverse-Proxy zu verwenden, müssen wir den proxy aktivieren , proxy_http und rewrite Modul.

sudo a2enmod proxy proxy_http rewrite

Erstellen Sie dann eine virtuelle Hostdatei für OSRM.

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

Fügen Sie die folgenden Texte in die Datei ein. Ersetzen Sie osrm.your-domain.com mit Ihrem tatsächlichen Domainnamen und vergessen Sie nicht, dafür einen DNS-A-Eintrag zu erstellen.

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

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

Speichern und schließen Sie die Datei. Aktivieren Sie dann diesen virtuellen Host.

sudo a2ensite osrm.conf

Laden Sie Apache neu, damit die Änderungen wirksam werden.

sudo systemctl reload apache2

Jetzt können Sie per Fernzugriff auf OSRM zugreifen, indem Sie den Domänennamen eingeben (osrm.your-domain.com ) in der Adressleiste des Browsers.

Schritt 6:HTTPS aktivieren

Wir können HTTPS aktivieren, indem wir ein kostenloses TLS-Zertifikat installieren, das von Let’s Encrypt ausgestellt wurde. Im Tutorial zur Einrichtung des OSM-Kachelservers haben wir bereits den Let’s Encrypt-Client (certbot) aus dem Snap-Store installiert. Wir müssen also nur den folgenden Befehl ausführen, um das TLS-Zertifikat zu erhalten und zu installieren.

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

Wo:

  • --apache :Verwenden Sie das Apache-Plugin.
  • --agree-tos :Nutzungsbedingungen akzeptieren.
  • --redirect :HTTPS durch 301-Umleitung erzwingen.
  • --hsts :Fügen Sie jeder HTTP-Antwort den Strict-Transport-Security-Header hinzu. Erzwingen, dass der Browser immer TLS für die Domäne verwendet. Schützt vor SSL/TLS-Stripping.
  • --staple-ocsp :Aktiviert OCSP-Heften. Eine gültige OCSP-Antwort wird an das Zertifikat geheftet, das der Server während TLS anbietet.

Das Zertifikat sollte nun abgerufen und automatisch installiert werden. Und Sie können über eine sichere HTTPS-Verbindung auf die Webmin-Weboberfläche zugreifen.

Schritt 7:Integrieren Sie OSRM mit einer Slippy Map

Ich gehe davon aus, dass Ihre Slippy-Karte mithilfe der Leaflet-JavaScript-Bibliothek angezeigt wird und Sie Ihrer Slippy-Karte den Nominatim-Geokodierungsdienst hinzugefügt haben.

Um OSRM mit einer Slippy Map zu integrieren, können wir ein Plugin namens Leaflet Routing Machine verwenden. Fügen Sie zunächst die JavaScript- und CSS-Datei der Leaflet-Routing-Maschine in Ihre Slippy Map ein. Beachten Sie, dass sie nach dem Haupt-JavaScript für Leaflet und dem JavaScript für Leaflet Control Geocoder platziert werden sollten.

<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>

Fügen Sie als Nächstes die folgenden Zeilen zu <script>...</script> hinzu Snippet im HTML-Text.

     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);

So:

<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>

Speichern und schließen Sie die Datei. Laden Sie dann die Karte in Ihrem Webbrowser neu, Sie sollten ein Bedienfeld in der oberen rechten Ecke sehen, wo Sie die Start- und Zieladresse eingeben können.

Sie können die Wegpunkte auf die Karte ziehen und OSRM berechnet die Route automatisch neu.


Ubuntu
  1. So installieren Sie R unter Ubuntu 20.04

  2. So installieren Sie Open Real Estate unter Ubuntu 16.04

  3. Ubuntu-Installation | Wie installiere ich Ubuntu 11.10 (Oneiric Ocelot)?

  4. So installieren Sie TensorFlow „Machine Learning“ auf Ubuntu 21.04

  5. Wie installiere ich Ubuntu auf einem Headless-Rechner?

So installieren Sie RStudio Server Open Source unter Ubuntu 20.04 LTS

So installieren Sie Ubuntu 21.04 (Hirsute Hippo) auf VirtualBox Machine

So installieren Sie ein soziales Open-Source-Netzwerk unter Ubuntu 16.04

So installieren Sie Open Visual Traceroute unter Ubuntu 16.04 LTS

So installieren Sie Open Eshop unter Ubuntu 16.04 LTS

So installieren Sie Open Web Analytics unter Ubuntu 18.04 LTS