Mesin perutean berkinerja tinggi yang ditulis dalam C++ dirancang untuk berjalan pada data OpenStreetMap.
Layanan berikut tersedia melalui HTTP API, antarmuka perpustakaan C++ dan wrapper NodeJs:
Untuk mencoba OSRM dengan cepat, gunakan server demo kami yang dilengkapi dengan backend dan frontend di atasnya.
Untuk pengenalan singkat tentang bagaimana jaringan jalan direpresentasikan dalam OpenStreetMap dan bagaimana memetakan fitur jaringan jalan tertentu, lihat wiki OSM tentang perutean atau panduan tentang pemetaan untuk navigasi.
Repositori Project-OSRM terkait:
irc.oftc.net , saluran: #osrm (Webchat)https://lists.openstreetmap.org/listinfo/osrm-talk Cara termudah dan tercepat untuk menyiapkan mesin perutean Anda sendiri adalah dengan menggunakan image Docker yang kami sediakan.
Ada dua jalur pipa pra-pemrosesan yang tersedia:
kami merekomendasikan penggunaan MLD secara default kecuali untuk kasus penggunaan khusus seperti matriks jarak sangat jauh di mana CH masih lebih cocok untuk saat ini. Berikut ini kami jelaskan pipeline MLD. Jika Anda ingin menggunakan pipa CH, ganti osrm-partition dan osrm-customize dengan satu osrm-contract dan ubah opsi algoritma untuk osrm-routed ke --algorithm ch .
Kami mendasarkan image Docker kami (backend, frontend) pada Debian dan memastikannya seringan mungkin. Versi backend yang lebih lama dapat ditemukan di Docker Hub.
Download ekstrak OpenStreetMap misalnya dari Geofabrik
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
Pra-proses ekstrak dengan profil mobil dan mulai server HTTP mesin perutean pada port 5000
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf || echo "osrm-extract failed"
Flag -v "${PWD}:/data" membuat direktori /data di dalam kontainer buruh pelabuhan dan membuat direktori kerja saat ini "${PWD}" tersedia di sana. File /data/berlin-latest.osm.pbf di dalam wadah mengacu pada "${PWD}/berlin-latest.osm.pbf" pada host.
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-partition /data/berlin-latest.osrm || echo "osrm-partition failed"
docker run -t -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-customize /data/berlin-latest.osrm || echo "osrm-customize failed"
Perhatikan bahwa tidak ada file berlin-latest.osrm , tetapi beberapa file berlin-latest.osrm.* , yaitu berlin-latest.osrm bukan jalur file, tetapi jalur "dasar" mengacu pada kumpulan file dan ada opsi untuk menghilangkan akhiran .osrm ini sepenuhnya (misalnya osrm-partition /data/berlin-latest ).
docker run -t -i -p 5000:5000 -v "${PWD}:/data" ghcr.io/project-osrm/osrm-backend osrm-routed --algorithm mld /data/berlin-latest.osrm
Buat permintaan terhadap server HTTP
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
Secara opsional, mulai antarmuka yang ramah pengguna pada port 9966, dan buka di browser Anda
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
Jika Docker mengeluh tidak dapat terhubung ke daemon Docker, pastikan Anda berada di grup docker .
sudo usermod -aG docker $USER
Setelah menambahkan diri Anda ke grup docker , pastikan untuk keluar dan masuk kembali dengan terminal Anda.
Kami mendukung gambar berikut di Container Registry:
| Nama | Keterangan |
|---|---|
latest | master dikompilasi dengan flag rilis |
latest-assertions | master dikompilasi dengan tanda rilis, pernyataan diaktifkan dan simbol debug |
latest-debug | master dikompilasi dengan flag debug |
<tag> | tag spesifik yang dikompilasi dengan tanda rilis |
<tag>-debug | tag tertentu dikompilasi dengan tanda debug |
Berikut ini menargetkan Ubuntu 22.04. Untuk instruksi bagaimana membangun distribusi yang berbeda, macOS atau Windows, lihat Wiki kami.
Instal dependensi
sudo apt install build-essential git cmake pkg-config
libbz2-dev libxml2-dev libzip-dev libboost-all-dev
lua5.2 liblua5.2-dev libtbb-devKompilasi dan instal binari OSRM
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target installBaca kebijakan penggunaan API.
Permintaan sederhana dengan instruksi dan alternatif di Berlin:
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
Pengikatan Node.js menyediakan akses hanya baca ke mesin perutean. Kami menyediakan dokumentasi dan contoh API di sini.
Anda memerlukan rantai alat libstdc++ modern ( >= GLIBCXX_3.4.26 ) untuk kompatibilitas biner jika Anda ingin menggunakan biner yang sudah dibuat sebelumnya. Untuk sistem Ubuntu yang lebih lama, Anda dapat memutakhirkan perpustakaan standar Anda misalnya dengan:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
Anda dapat menginstal binding Node.js melalui npm install @project-osrm/osrm atau dari repositori ini melalui
npm install
yang akan memeriksa dan menggunakan biner bawaan jika tersedia untuk rilis ini dan versi Node Anda, atau melalui
npm install --build-from-source
untuk selalu memaksa pembuatan binding Node.js dari sumber.
Sebelum v5.27.0, paket Node osrm tidak dicakup. Jika Anda mengupgrade dari paket lama, Anda perlu melakukan hal berikut:
npm uninstall osrm --save
npm install @project-osrm/osrm --save
Untuk detail penggunaan, lihat dokumen API ini.
Contoh implementasi oleh pihak ketiga dengan Docker dan Node.js dapat ditemukan di sini.
Saat menggunakan kode dalam publikasi (ilmiah), harap kutip
@inproceedings{luxen-vetter-2011,
author = {Luxen, Dennis and Vetter, Christian},
title = {Real-time routing with OpenStreetMap data},
booktitle = {Proceedings of the 19th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems},
series = {GIS '11},
year = {2011},
isbn = {978-1-4503-1031-4},
location = {Chicago, Illinois},
pages = {513--516},
numpages = {4},
url = {http://doi.acm.org/10.1145/2093973.2094062},
doi = {10.1145/2093973.2094062},
acmid = {2094062},
publisher = {ACM},
address = {New York, NY, USA},
}