OSRM (Open Source Routing Machine) je super rychlý směrovací modul pro silniční sítě OpenStreetMap (OSM). V předchozích kurzech jsme vysvětlili proces nastavení samostatně hostovaného dlaždicového serveru OpenStreetMap a jak přidat funkci vyhledávání adres do mapy pomocí Nominatim. Tento tutoriál vám ukáže, jak přidat navigační funkce do vaší OpenStreetMap s OSRM, která poskytuje trasování aut , trasa na kole a pěší trasa .
Tento tutoriál funguje také na Ubuntu 18.04.
Předpoklady
Abyste mohli postupovat podle tohoto návodu, měli byste mít spuštěný a spuštěný server dlaždic OSM. Pokud ne, postupujte podle níže uvedeného návodu a nastavte si svůj vlastní server dlaždic OSM.
- Jak nastavit OpenStreetMap Tile Server na Ubuntu 20.04
Měli byste mít také přístup ke službě geokódování, jako je Nominatim pro vyhledávání adres.
- Nastavit OSM Nominatim Geocoding Server na Ubuntu 20.04
Jakmile jsou požadavky splněny, postupujte podle pokynů níže a nastavte server OSRM.
Krok 1:Sestavte OSRM ze zdroje
Nainstalujte balíčky závislostí.
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
Vytvořte osrm
uživatel. (Pro tohoto uživatele není třeba vytvářet heslo.)
sudo useradd -d /srv/osrm -s /bin/bash -m osrm
Udělte oprávnění svému vlastnímu uživatelskému účtu.
sudo apt install acl sudo setfacl -R -m u:username:rwx /srv/osrm/
Změňte na /srv/osrm/
adresář.
cd /srv/osrm/
Stáhněte si zdrojový kód OSRM z jeho úložiště Github.
git clone https://github.com/Project-OSRM/osrm-backend.git
Vytvořte build
adresář.
mkdir build
Přejděte do tohoto adresáře a nakonfigurujte prostředí sestavení.
cd build cmake /srv/osrm/osrm-backend/
Zkompilujte zdrojový kód.
make
Nainstalujte binární soubory.
sudo make install
Budou nainstalovány následující binární soubory.
- /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:
Krok 2:Instalace obrazovky GNU
V dalším kroku budeme muset z OpenStreetMap extrahovat silniční sítě, což může trvat dlouho. Váš počítač může být odpojený od internetu, proto se doporučuje použít nástroj GNU Screen, abyste udrželi relaci naživu. Obrazovka instalace na serveru Ubuntu 20.04:
sudo apt install screen
Poté úvodní obrazovka:
screen
Při prvním spuštění se zobrazí úvodní text, stačí stisknout Enter
do konce. Poté budete moci spouštět příkazy jako obvykle.
Krok 3:Vygenerujte směrovací data OSRM
Nyní musíme stáhnout data OpenStreetMap a učinit je použitelnými pro směrování. Spusťte následující příkaz ke stažení mapových dat celé planety (56G) ve formátu PBF (ProtoBufBinary).
wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf -P /srv/osrm/osrm-backend
Pokud chcete mapu jednotlivé země/státu/provincie/města, přejděte na http://download.geofabrik.de. Například stáhněte mapová data Velké Británie (1,2G) pomocí následujícího příkazu.
wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf -P /srv/osrm/osrm-backend
BBBike.org také poskytuje výňatky z více než 200 měst a regionů po celém světě v různých formátech.
Ujistěte se, že jste v /srv/osrm/osrm-backend/
adresář.
cd /srv/osrm/osrm-backend/
Extrahujte graf z dat OpenStreetMap.
osrm-extract britain-and-ireland-latest.osm.pbf --threads=10
Ve výchozím nastavení bude používat car.lua
profilu.
Nyní pravděpodobně nemusíte na svém serveru dělat další věci. Protože používáte obrazovku, můžete stisknout Ctrl+A , uvolněte tyto klávesy a poté stiskněte D tlačítko pro odpojení od aktuální relace obrazovky. Zobrazí se zpráva jako níže.
[detached from 32113.pts-1.focal]
To mi říká, že předchozí ID relace obrazovky je 32113. Můžete se odhlásit z relace SSH a dokonce vypnout počítač. Nebojte se, osrm-extract
proces stále běží. Když se potřebujete vrátit a zkontrolovat průběh, SSH na váš server a spuštěním následujícího příkazu získáte předchozí ID relace obrazovky.
screen -ls
Ukázkový výstup:
There is a screen on: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Detached) 1 Socket in /run/screen/S-linuxbabe.
Poté se můžete znovu připojit k předchozí relaci obrazovky.
screen -r 32113
Tento proces je náročný na paměť. (Na mém serveru používá 7 GB RAM.) Po dokončení bude soubor se stejným názvem, ale s .osrm
rozšíření. Spusťte následující příkaz k rozdělení tohoto grafu rekurzivně do buněk
osrm-partition britain-and-ireland-latest.osrm
Přizpůsobte buňky výpočtem směrovacích vah pro všechny buňky.
osrm-customize britain-and-ireland-latest.osrm
Nyní můžete spustit směrovací modul.
osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm
Jak vidíte, naslouchá na TCP portu 5000.
Krok 4:Vytvoření služby systemd
Směrovací modul OSRM můžeme spustit ručně pomocí osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm
, ale je pohodlnější spouštět osrm-routed jako službu systemd na pozadí. Stiskněte Ctrl+C
zastavte aktuální proces směrovaný osrm a pomocí následujícího příkazu vytvořte soubor servisní jednotky systemd pro směrování osrm.
sudo nano /etc/systemd/system/osrm-routed.service
Vložte do souboru následující řádky.
[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
Uložte a zavřete soubor. Změňte vlastnictví /srv/osrm/osrm-backend/
adresář.
sudo chown osrm:osrm /srv/osrm/osrm-backend/ -R
Nyní můžeme spustit a povolit osrm-routed
systemd service.
sudo systemctl start osrm-routed sudo systemctl enable osrm-routed
Zkontrolujte stav.
systemctl status osrm-routed
Pokud osrm-routed
služba není aktivní (běží), můžete spustit následující příkaz a zjistit, co je špatně.
sudo journalctl -eu osrm-routed
Krok 5:Konfigurace webového serveru Apache
Webový server Apache můžeme nakonfigurovat jako reverzní proxy pro osrm-routed
službu, takže můžeme použít název domény pro přístup ke směrovací službě a také povolit šifrování HTTPS.
Nainstalujte webový server Apache.
sudo apt install apache2
Chcete-li používat Apache jako reverzní proxy, musíme povolit proxy
, proxy_http
a rewrite
modul.
sudo a2enmod proxy proxy_http rewrite
Poté vytvořte soubor virtuálního hostitele pro OSRM.
sudo nano /etc/apache2/sites-available/osrm.conf
Přidejte do souboru následující texty. Nahraďte osrm.your-domain.com
s vaším skutečným názvem domény a nezapomeňte pro něj vytvořit záznam DNS A.
<VirtualHost *:80> ServerName osrm.your-domain.com ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ </VirtualHost>
Uložte a zavřete soubor. Poté povolte tohoto virtuálního hostitele.
sudo a2ensite osrm.conf
Znovu načtěte Apache, aby se změny projevily.
sudo systemctl reload apache2
Nyní můžete vzdáleně přistupovat k OSRM zadáním názvu domény (osrm.your-domain.com
) v adresním řádku prohlížeče.
Krok 6:Povolte HTTPS
HTTPS můžeme povolit instalací bezplatného certifikátu TLS vydaného od Let’s Encrypt. V tutoriálu nastavení dlaždicového serveru OSM jsme již nainstalovali klienta Let’s Encrypt (certbot) z úložiště Snap. K získání a instalaci certifikátu TLS tedy stačí spustit následující příkaz.
sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d osrm.your-domain.com
Kde:
--apache
:Použijte plugin Apache.--agree-tos
:Souhlas se smluvními podmínkami.--redirect
:Vynutit HTTPS přesměrováním 301.--hsts
:Přidejte hlavičku Strict-Transport-Security do každé odpovědi HTTP. Vynucení prohlížeče, aby pro doménu vždy používal TLS. Chrání před odstraněním SSL/TLS.--staple-ocsp
:Umožňuje sešívání OCSP. Platná odpověď OCSP je přišita k certifikátu, který server nabízí během TLS.
Certifikát by nyní měl být získán a automaticky nainstalován. A budete mít přístup k webovému rozhraní Webmin přes zabezpečené připojení HTTPS.
Krok 7:Integrujte OSRM s kluzkou mapou
Předpokládám, že vaše kluzká mapa je zobrazena pomocí knihovny Leaflet JavaScript a že jste do své kluzké mapy přidali službu geokódování Nominatim.
Pro integraci OSRM s kluzkou mapou můžeme použít plugin s názvem Leaflet Routing Machine. Nejprve do své kluzké mapy zahrňte JavaScript a soubor CSS pro stroj pro směrování letáků. Všimněte si, že by měly být umístěny za hlavním JavaScriptem letáku a JavaScriptem Geocoderu kontroly letáku.
<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>
Dále přidejte následující řádky do <script>...</script>
úryvek v těle 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);
Takhle:
<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>
Uložte a zavřete soubor. Poté znovu načtěte mapu do webového prohlížeče, v pravém horním rohu byste měli vidět ovládací panel, kde můžete zadat počáteční a cílovou adresu.
Trasové body můžete přetáhnout na mapu a OSRM automaticky přepočítá trasu.