OSRM (Mesin Perutean Sumber Terbuka) adalah mesin perutean super cepat untuk jaringan jalan OpenStreetMap (OSM). Dalam tutorial sebelumnya, kami menjelaskan proses pengaturan server ubin OpenStreetMap yang dihosting sendiri dan cara menambahkan fungsionalitas pencarian alamat ke peta Anda dengan Nominatim. Tutorial ini akan menunjukkan cara menambahkan fungsionalitas navigasi ke OpenStreetMap Anda dengan OSRM, yang menyediakan perutean mobil , perutean sepeda , dan perutean jalan kaki .
Tutorial ini juga berfungsi di Ubuntu 18.04.
Prasyarat
Untuk mengikuti tutorial ini, Anda harus memiliki server ubin OSM dan berjalan. Jika tidak, ikuti tutorial di bawah ini untuk menyiapkan server ubin OSM Anda sendiri.
- Cara Menyetel Server Ubin OpenStreetMap di Ubuntu 20.04
Anda juga harus memiliki akses ke layanan geocoding seperti Nominatim untuk pencarian alamat.
- Menyiapkan OSM Nominatim Geocoding Server di Ubuntu 20.04
Setelah persyaratan terpenuhi, ikuti petunjuk di bawah ini untuk menyiapkan server OSRM.
Langkah 1:Bangun OSRM Dari Sumber
Instal paket ketergantungan.
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
Buat osrm
pengguna. (Tidak perlu membuat kata sandi untuk pengguna ini.)
sudo useradd -d /srv/osrm -s /bin/bash -m osrm
Berikan izin ke akun pengguna Anda sendiri.
sudo apt install acl sudo setfacl -R -m u:username:rwx /srv/osrm/
Ubah ke /srv/osrm/
direktori.
cd /srv/osrm/
Unduh kode sumber OSRM dari repositori Github-nya.
git clone https://github.com/Project-OSRM/osrm-backend.git
Buat build
direktori.
mkdir build
Ubah ke direktori ini dan konfigurasikan lingkungan build.
cd build cmake /srv/osrm/osrm-backend/
Kompilasi kode sumber.
make
Instal binari.
sudo make install
Binari berikut akan diinstal.
- /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:
Langkah 2:Instal Layar GNU
Pada langkah selanjutnya, kita perlu mengekstrak jaringan jalan dari OpenStreetMap, yang bisa memakan waktu lama. Komputer Anda mungkin terputus dari Internet, jadi disarankan untuk menggunakan utilitas Layar GNU untuk menjaga sesi Anda tetap hidup. Layar instal di server Ubuntu 20.04:
sudo apt install screen
Kemudian layar mulai:
screen
Saat peluncuran pertama, Anda akan melihat teks pengantar, cukup tekan Enter
untuk mengakhiri. Kemudian Anda akan dapat menjalankan perintah seperti biasa.
Langkah 3:Buat Data Perutean OSRM
Sekarang kita perlu mengunduh data OpenStreetMap dan membuatnya dapat digunakan untuk perutean. Jalankan perintah berikut untuk mengunduh data peta seluruh planet (56G) dalam format PBF (ProtoBufBinary).
wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf -P /srv/osrm/osrm-backend
Jika Anda menginginkan peta masing-masing negara/negara bagian/provinsi/kota, kunjungi http://download.geofabrik.de. Misalnya, unduh data peta Inggris Raya (1.2G) dengan perintah berikut.
wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf -P /srv/osrm/osrm-backend
BBBike.org juga menyediakan ekstrak lebih dari 200 kota dan wilayah di seluruh dunia dalam format yang berbeda.
Pastikan Anda berada di /srv/osrm/osrm-backend/
direktori.
cd /srv/osrm/osrm-backend/
Ekstrak grafik dari data OpenStreetMap.
osrm-extract britain-and-ireland-latest.osm.pbf --threads=10
Secara default, ini akan menggunakan car.lua
profil.
Sekarang Anda mungkin tidak perlu melakukan hal lain di server Anda. Karena Anda menggunakan Layar, Anda dapat menekan Ctrl+A , lepaskan tombol tersebut, lalu tekan D untuk melepaskan dari sesi Layar saat ini. Anda akan melihat pesan seperti di bawah ini.
[detached from 32113.pts-1.focal]
Ini memberitahu saya bahwa ID sesi Layar sebelumnya adalah 32113. Anda dapat keluar dari sesi SSH dan bahkan mematikan komputer Anda. Jangan khawatir, osrm-extract
proses masih berjalan. Saat Anda perlu kembali dan memeriksa kemajuan, SSH ke server Anda dan jalankan perintah berikut untuk mendapatkan ID Sesi Layar sebelumnya.
screen -ls
Contoh keluaran:
There is a screen on: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Detached) 1 Socket in /run/screen/S-linuxbabe.
Kemudian Anda dapat melampirkan kembali ke sesi Layar sebelumnya.
screen -r 32113
Proses ini intensif memori. (Ini menggunakan RAM 7GB di server saya.) Setelah selesai, akan ada file dengan nama file yang sama tetapi dengan .osrm
perpanjangan. Jalankan perintah berikut untuk mempartisi grafik ini secara rekursif ke dalam sel
osrm-partition britain-and-ireland-latest.osrm
Sesuaikan sel dengan menghitung bobot perutean untuk semua sel.
osrm-customize britain-and-ireland-latest.osrm
Sekarang Anda dapat memulai mesin perutean.
osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm
Seperti yang Anda lihat, ia mendengarkan pada port TCP 5000.
Langkah 4:Membuat layanan systemd
Kita dapat menjalankan mesin perutean OSRM secara manual dengan osrm-routed --algorithm=MLD britain-and-ireland-latest.osrm
, tetapi lebih nyaman untuk menjalankan osrm-routed sebagai layanan systemd di latar belakang. Tekan Ctrl+C
untuk menghentikan proses osrm-routed saat ini dan membuat file unit layanan systemd untuk osrm-routed dengan perintah berikut.
sudo nano /etc/systemd/system/osrm-routed.service
Masukkan baris berikut ke dalam 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
Simpan dan tutup file. Ubah kepemilikan /srv/osrm/osrm-backend/
direktori.
sudo chown osrm:osrm /srv/osrm/osrm-backend/ -R
Sekarang kita dapat memulai dan mengaktifkan osrm-routed
layanan systemd.
sudo systemctl start osrm-routed sudo systemctl enable osrm-routed
Periksa status.
systemctl status osrm-routed
Jika osrm-routed
service tidak aktif (berjalan), Anda dapat menjalankan perintah berikut untuk melihat apa yang salah.
sudo journalctl -eu osrm-routed
Langkah 5:Konfigurasi server web Apache
Kita dapat mengonfigurasi server web Apache sebagai proxy terbalik untuk osrm-routed
layanan, sehingga kami dapat menggunakan nama domain untuk mengakses layanan perutean dan juga mengaktifkan enkripsi HTTPS.
Instal server web Apache.
sudo apt install apache2
Untuk menggunakan Apache sebagai proxy terbalik, kita perlu mengaktifkan proxy
, proxy_http
dan rewrite
modul.
sudo a2enmod proxy proxy_http rewrite
Kemudian buat file host virtual untuk OSRM.
sudo nano /etc/apache2/sites-available/osrm.conf
Tambahkan teks berikut ke dalam file. Ganti osrm.your-domain.com
dengan nama domain Anda yang sebenarnya dan jangan lupa untuk membuat catatan DNS A untuk itu.
<VirtualHost *:80> ServerName osrm.your-domain.com ProxyPass / http://127.0.0.1:5000/ ProxyPassReverse / http://127.0.0.1:5000/ </VirtualHost>
Simpan dan tutup file. Kemudian aktifkan host virtual ini.
sudo a2ensite osrm.conf
Muat ulang Apache agar perubahan diterapkan.
sudo systemctl reload apache2
Sekarang Anda dapat mengakses OSRM dari jarak jauh dengan memasukkan nama domain (osrm.your-domain.com
) di bilah alamat browser.
Langkah 6:Aktifkan HTTPS
Kami dapat mengaktifkan HTTPS dengan menginstal sertifikat TLS gratis yang dikeluarkan dari Let's Encrypt. Dalam tutorial penyiapan server ubin OSM, kami telah menginstal klien Let's Encrypt (certbot) dari toko Snap. Jadi kita hanya perlu menjalankan perintah berikut untuk mendapatkan dan menginstal sertifikat TLS.
sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d osrm.your-domain.com
Dimana:
--apache
:Gunakan plugin Apache.--agree-tos
:Menyetujui persyaratan layanan.--redirect
:Memaksa HTTPS dengan pengalihan 301.--hsts
:Tambahkan header Strict-Transport-Security ke setiap respons HTTP. Memaksa browser untuk selalu menggunakan TLS untuk domain. Mempertahankan dari SSL/TLS Stripping.--staple-ocsp
:Mengaktifkan Stapel OCSP. Respons OCSP yang valid ditempelkan ke sertifikat yang ditawarkan server selama TLS.
Sertifikat sekarang harus diperoleh dan diinstal secara otomatis. Dan Anda akan dapat mengakses antarmuka web Webmin melalui koneksi HTTPS yang aman.
Langkah 7:Integrasikan OSRM dengan Slippy Map
Saya berasumsi bahwa peta slippy Anda ditampilkan menggunakan perpustakaan JavaScript Leaflet, dan Anda telah menambahkan layanan geocoding Nominatim ke peta slippy Anda.
Untuk mengintegrasikan OSRM dengan slippy map, kita dapat menggunakan plugin bernama Leaflet Routing Machine. Pertama, sertakan file JavaScript dan CSS mesin perutean Leaflet ke peta slippy Anda. Perhatikan bahwa mereka harus ditempatkan setelah JavaScript Leaflet utama dan JavaScript Geocoder Kontrol Leaflet.
<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>
Selanjutnya, tambahkan baris berikut ke <script>...</script>
cuplikan di badan 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);
Seperti ini:
<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>
Simpan dan tutup file. Kemudian muat ulang peta di browser web Anda, Anda akan melihat panel kontrol di sudut kanan atas, tempat Anda dapat memasukkan alamat awal dan alamat tujuan.
Anda dapat menarik titik jalan pada peta dan OSRM akan menghitung ulang rute secara otomatis.