GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come installare OSRM su Ubuntu 20.04 – Macchina di routing open source

OSRM (macchina di routing open source) è un motore di routing super veloce per le reti stradali OpenStreetMap (OSM). Nei tutorial precedenti, abbiamo spiegato il processo di configurazione di un server di tile OpenStreetMap self-hosted e come aggiungere la funzionalità di ricerca degli indirizzi alla mappa con Nominatim. Questo tutorial ti mostrerà come aggiungere funzionalità di navigazione alla tua OpenStreetMap con OSRM, che fornisce percorso per auto , percorsi in bicicletta e percorso pedonale .

Questo tutorial funziona anche su Ubuntu 18.04.

Prerequisiti

Per seguire questo tutorial, dovresti avere un server tile OSM attivo e funzionante. In caso contrario, segui il tutorial qui sotto per configurare il tuo server tile OSM.

  • Come configurare il server di tile OpenStreetMap su Ubuntu 20.04

Dovresti anche avere accesso a un servizio di geocodifica come Nominatim per la ricerca degli indirizzi.

  • Configura il server di geocodifica OSM Nominatim su Ubuntu 20.04

Una volta soddisfatti i requisiti, segui le istruzioni seguenti per configurare il server OSRM.

Passaggio 1:crea OSRM dal sorgente

Installa i pacchetti di dipendenze.

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

Crea il osrm utente. (Non è necessario creare una password per questo utente.)

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

Concedi le autorizzazioni al tuo account utente.

sudo apt install acl

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

Passa a /srv/osrm/ directory.

cd /srv/osrm/

Scarica il codice sorgente OSRM dal suo repository Github.

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

Crea la build directory.

mkdir build

Passa a questa directory e configura l'ambiente di compilazione.

cd build

cmake /srv/osrm/osrm-backend/

Compila il codice sorgente.

make

Installa i binari.

sudo make install

Verranno installati i seguenti binari.

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

Fase 2:installa GNU Screen

Nel passaggio successivo, dovremo estrarre le reti stradali da OpenStreetMap, operazione che può richiedere molto tempo. Il tuo computer potrebbe essere disconnesso da Internet, quindi ti consigliamo di utilizzare l'utilità GNU Screen per mantenere attiva la tua sessione. Schermata di installazione sul server Ubuntu 20.04:

sudo apt install screen

Quindi schermata iniziale:

screen

Al primo avvio, vedrai un testo introduttivo, premi semplicemente Enter finire. Quindi sarai in grado di eseguire i comandi come al solito.

Fase 3:Genera dati di routing OSRM

Ora dobbiamo scaricare i dati di OpenStreetMap e renderli utilizzabili per il routing. Eseguire il comando seguente per scaricare i dati della mappa dell'intero pianeta (56G) in formato PBF (ProtoBufBinary).

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

Se desideri una mappa di un singolo paese/stato/provincia/città, vai su http://download.geofabrik.de. Ad esempio, scarica i dati della mappa della Gran Bretagna (1.2G) con il seguente comando.

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

BBBike.org fornisce anche estratti di oltre 200 città e regioni in tutto il mondo in diversi formati.

Assicurati di essere nel /srv/osrm/osrm-backend/ directory.

cd /srv/osrm/osrm-backend/

Estrai un grafico dai dati di OpenStreetMap.

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

Per impostazione predefinita, utilizzerà il car.lua profilo.

Ora probabilmente non hai bisogno di fare altre cose sul tuo server. Dato che stai usando Screen, puoi premere Ctrl+A , rilascia quei tasti, quindi premi D tasto per disconnettersi dalla sessione Screen corrente. Vedrai un messaggio come di seguito.

[detached from 32113.pts-1.focal]

Questo mi dice che l'ID della sessione dello schermo precedente è 32113. Puoi disconnetterti dalla sessione SSH e persino spegnere il computer. Non preoccuparti, osrm-extract il processo è ancora in esecuzione. Quando devi tornare indietro e controllare lo stato di avanzamento, SSH nel tuo server ed esegui il comando seguente per ottenere l'ID della sessione dello schermo precedente.

screen -ls

Esempio di output:

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

Quindi puoi ricollegarti alla precedente sessione di Screen.

screen -r 32113

Questo processo richiede molta memoria. (Utilizza 7 GB di RAM sul mio server.) Una volta terminato, ci sarà un file con lo stesso nome file ma con .osrm estensione. Esegui il comando seguente per partizionare questo grafico in modo ricorsivo in celle

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

Personalizza le celle calcolando i pesi di routing per tutte le celle.

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

Ora puoi avviare il motore di routing.

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

Come puoi vedere, è in ascolto sulla porta TCP 5000.

Fase 4:creazione di un servizio systemd

Possiamo eseguire manualmente il motore di routing OSRM con osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm , ma è più conveniente eseguire osrm-routed come servizio systemd in background. Premi Ctrl+C per interrompere il processo osrm-routed corrente e creare un file dell'unità di servizio systemd per osrm-routed con il comando seguente.

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

Inserisci le seguenti righe nel file.

[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

Salva e chiudi il file. Modifica la proprietà del /srv/osrm/osrm-backend/ directory.

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

Ora possiamo avviare e abilitare osrm-routed servizio systemd.

sudo systemctl start osrm-routed

sudo systemctl enable osrm-routed

Controlla lo stato.

systemctl status osrm-routed

Se il osrm-routed il servizio non è attivo (in esecuzione), puoi eseguire il comando seguente per vedere cosa c'è che non va.

sudo journalctl -eu osrm-routed

Fase 5:Configura il server web Apache

Possiamo configurare il server web Apache come proxy inverso per osrm-routed servizio, quindi possiamo utilizzare un nome di dominio per accedere al servizio di routing e abilitare anche la crittografia HTTPS.

Installa il server web Apache.

sudo apt install apache2

Per utilizzare Apache come proxy inverso, dobbiamo abilitare il proxy , proxy_http e rewrite modulo.

sudo a2enmod proxy proxy_http rewrite

Quindi crea un file host virtuale per OSRM.

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

Aggiungi i seguenti testi nel file. Sostituisci osrm.your-domain.com con il tuo nome di dominio effettivo e non dimenticare di creare un record DNS A per esso.

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

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

Salva e chiudi il file. Quindi abilita questo host virtuale.

sudo a2ensite osrm.conf

Ricarica Apache per rendere effettive le modifiche.

sudo systemctl reload apache2

Ora puoi accedere da remoto a OSRM inserendo il nome del dominio (osrm.your-domain.com ) nella barra degli indirizzi del browser.

Passaggio 6:abilita HTTPS

Possiamo abilitare HTTPS installando un certificato TLS gratuito emesso da Let's Encrypt. Nel tutorial sull'installazione del server tile OSM, abbiamo già installato il client Let's Encrypt (certbot) dallo Snap Store. Quindi dobbiamo solo eseguire il seguente comando per ottenere e installare il certificato TLS.

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

Dove:

  • --apache :usa il plugin Apache.
  • --agree-tos :Accetta i termini di servizio.
  • --redirect :Forza HTTPS tramite reindirizzamento 301.
  • --hsts :aggiungi l'intestazione Strict-Transport-Security a ogni risposta HTTP. Forzare il browser a utilizzare sempre TLS per il dominio. Difende dallo stripping SSL/TLS.
  • --staple-ocsp :Abilita la pinzatura OCSP. Una risposta OCSP valida viene pinzata al certificato offerto dal server durante TLS.

Il certificato dovrebbe ora essere ottenuto e installato automaticamente. E potrai accedere all'interfaccia web di Webmin tramite una connessione HTTPS sicura.

Passaggio 7:integra OSRM con una mappa Slippy

Presumo che la tua mappa slippy venga visualizzata utilizzando la libreria JavaScript Leaflet e che tu abbia aggiunto il servizio di geocodifica Nominatim alla tua mappa slippy.

Per integrare OSRM con una mappa scivolosa, possiamo utilizzare un plugin chiamato Leaflet Routing Machine. Innanzitutto, includi il file JavaScript e CSS della macchina per l'instradamento del volantino nella tua mappa slippy. Tieni presente che devono essere posizionati dopo il JavaScript principale del volantino e il JavaScript del geocoder di controllo del volantino.

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

Quindi, aggiungi le seguenti righe a <script>...</script> snippet nel corpo 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);

In questo modo:

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

Salva e chiudi il file. Quindi ricarica la mappa nel tuo browser web, dovresti vedere un pannello di controllo nell'angolo in alto a destra, dove puoi inserire l'indirizzo di partenza e l'indirizzo di destinazione.

Puoi trascinare i waypoint sulla mappa e OSRM ricalcolerà automaticamente il percorso.


Ubuntu
  1. Come installare R su Ubuntu 20.04

  2. Come installare Open Real Estate su Ubuntu 16.04

  3. Installazione Ubuntu | Come installare Ubuntu 11.10 (Oneiric Ocelot)?

  4. Come installare TensorFlow " Machine Learning " su Ubuntu 21.04

  5. Come installare Ubuntu su una macchina senza testa?

Come installare RStudio Server open source su Ubuntu 20.04 LTS

Come installare Ubuntu 21.04 (Hirsute Hippo) su VirtualBox Machine

Come installare il social network open source su Ubuntu 16.04

Come installare Open Visual Traceroute su Ubuntu 16.04 LTS

Come installare Open Eshop su Ubuntu 16.04 LTS

Come installare Open Web Analytics su Ubuntu 18.04 LTS