กลไกการกำหนดเส้นทางประสิทธิภาพสูงที่เขียนด้วยภาษา C++ ออกแบบมาเพื่อทำงานบนข้อมูล OpenStreetMap
บริการต่อไปนี้พร้อมใช้งานผ่าน HTTP API, อินเทอร์เฟซไลบรารี C++ และ NodeJs wrapper:
หากต้องการลองใช้ OSRM อย่างรวดเร็ว ให้ใช้เซิร์ฟเวอร์สาธิตของเราซึ่งมาพร้อมกับทั้งแบ็กเอนด์และฟรอนต์เอนด์ด้านบน
สำหรับคำแนะนำโดยย่อเกี่ยวกับวิธีการแสดงเครือข่ายถนนใน OpenStreetMap และวิธีทำแผนที่คุณลักษณะเฉพาะของเครือข่ายถนน โปรดดูที่วิกิ OSM เกี่ยวกับการกำหนดเส้นทาง หรือคู่มือเกี่ยวกับการทำแผนที่สำหรับการนำทาง
ที่เก็บ Project-OSRM ที่เกี่ยวข้อง:
irc.oftc.net
, ช่อง: #osrm
(เว็บแชท)https://lists.openstreetmap.org/listinfo/osrm-talk
วิธีที่ง่ายและรวดเร็วที่สุดในการตั้งค่ากลไกการกำหนดเส้นทางของคุณเองคือการใช้อิมเมจ Docker ที่เรามีให้
มีไปป์ไลน์ก่อนการประมวลผลสองแบบให้เลือก:
เราขอแนะนำให้ใช้ MLD เป็นค่าเริ่มต้น ยกเว้นกรณีการใช้งานพิเศษ เช่น เมทริกซ์ระยะทางที่มีขนาดใหญ่มาก โดยที่ CH ยังคงเหมาะสมกว่าในขณะนี้ ต่อไปนี้เราจะอธิบายไปป์ไลน์ MLD หากคุณต้องการใช้ไปป์ไลน์ CH แทนที่ osrm-partition
และ osrm-customize
ด้วย osrm-contract
เดียวและเปลี่ยนตัวเลือกอัลกอริทึมสำหรับ osrm-routed
เป็น --algorithm ch
เรายึดอิมเมจ Docker ของเรา (แบ็กเอนด์, ฟรอนต์เอนด์) บน Debian และตรวจสอบให้แน่ใจว่ามันมีน้ำหนักเบาที่สุดเท่าที่จะเป็นไปได้ แบ็กเอนด์เวอร์ชันเก่าสามารถพบได้บน Docker Hub
ดาวน์โหลดสารสกัด OpenStreetMap เช่นจาก Geofabrik
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
ประมวลผลการแยกข้อมูลล่วงหน้าด้วยโปรไฟล์รถยนต์ และเริ่มต้นเซิร์ฟเวอร์ HTTP ของกลไกการกำหนดเส้นทางบนพอร์ต 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"
ธง -v "${PWD}:/data"
สร้างไดเร็กทอรี /data
ภายในคอนเทนเนอร์นักเทียบท่าและทำให้ไดเร็กทอรีการทำงานปัจจุบัน "${PWD}"
พร้อมใช้งานที่นั่น ไฟล์ /data/berlin-latest.osm.pbf
ภายในคอนเทนเนอร์อ้างอิงถึง "${PWD}/berlin-latest.osm.pbf"
บนโฮสต์
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"
โปรดทราบว่าไม่มีไฟล์ berlin-latest.osrm
แต่มีไฟล์ berlin-latest.osrm.*
หลายไฟล์ เช่น berlin-latest.osrm
ไม่ใช่พาธของไฟล์ แต่เป็นพาธ "ฐาน" ที่อ้างถึงชุดของไฟล์และมีตัวเลือกให้ละเว้น ส่วนต่อท้าย .osrm
นี้สมบูรณ์ (เช่น 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
ส่งคำขอกับเซิร์ฟเวอร์ HTTP
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
เลือกที่จะเริ่มต้นส่วนหน้าที่เป็นมิตรต่อผู้ใช้บนพอร์ต 9966 และเปิดในเบราว์เซอร์ของคุณ
docker run -p 9966:9966 osrm/osrm-frontend
xdg-open 'http://127.0.0.1:9966'
ในกรณีที่ Docker บ่นว่าไม่สามารถเชื่อมต่อกับ Docker daemon ได้ ตรวจสอบให้แน่ใจว่าคุณอยู่ในกลุ่ม docker
sudo usermod -aG docker $USER
หลังจากเพิ่มตัวเองในกลุ่ม docker
แล้ว อย่าลืมออกจากระบบและกลับเข้าสู่ระบบใหม่อีกครั้งด้วยเทอร์มินัลของคุณ
เรารองรับอิมเมจต่อไปนี้ใน Container Registry:
ชื่อ | คำอธิบาย |
---|---|
latest | master ที่คอมไพล์ด้วยแฟล็ก release |
latest-assertions | master ที่คอมไพล์ด้วยแฟล็กรีลีส การเปิดใช้งานการยืนยัน และสัญลักษณ์การดีบัก |
latest-debug | master ที่คอมไพล์ด้วยแฟล็ก debug |
<tag> | แท็กเฉพาะที่คอมไพล์ด้วยแฟล็ก release |
<tag>-debug | แท็กเฉพาะที่คอมไพล์ด้วยแฟล็ก debug |
เป้าหมายต่อไปนี้ Ubuntu 22.04 สำหรับคำแนะนำวิธีสร้างบนดิสทริบิวชั่นต่างๆ, macOS หรือ Windows โปรดดู Wiki ของเรา
ติดตั้งการพึ่งพา
sudo apt install build-essential git cmake pkg-config
libbz2-dev libxml2-dev libzip-dev libboost-all-dev
lua5.2 liblua5.2-dev libtbb-dev
คอมไพล์และติดตั้งไบนารี OSRM
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
อ่านนโยบายการใช้งาน API
แบบสอบถามง่ายๆ พร้อมคำแนะนำและทางเลือกอื่นๆ ในเบอร์ลิน:
curl "https://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true&alternatives=true"
การเชื่อมโยง Node.js ให้การเข้าถึงกลไกการกำหนดเส้นทางแบบอ่านอย่างเดียว เรามีเอกสารประกอบ API และตัวอย่างที่นี่
คุณจะต้องมี libstdc++
toolchain ที่ทันสมัย ( >= GLIBCXX_3.4.26
) สำหรับความเข้ากันได้แบบไบนารี หากคุณต้องการใช้ไบนารีที่สร้างไว้ล่วงหน้า สำหรับระบบ Ubuntu รุ่นเก่า คุณสามารถอัปเกรดไลบรารีมาตรฐานของคุณได้ เช่น:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-9-dev
คุณสามารถติดตั้งการเชื่อมโยง Node.js ผ่านทาง npm install @project-osrm/osrm
หรือจากที่เก็บนี้ผ่านทาง
npm install
ซึ่งจะตรวจสอบและใช้ไบนารีที่สร้างไว้ล่วงหน้าว่าพร้อมใช้งานสำหรับรุ่นนี้และเวอร์ชันโหนดของคุณหรือไม่ หรือผ่านทาง
npm install --build-from-source
เพื่อบังคับให้สร้างการเชื่อมโยง Node.js จากแหล่งที่มาเสมอ
ก่อนเวอร์ชัน 5.27.0 แพ็กเกจ osrm
Node จะไม่ถูกกำหนดขอบเขต หากคุณกำลังอัพเกรดจากแพ็คเกจเก่า คุณจะต้องดำเนินการดังต่อไปนี้:
npm uninstall osrm --save
npm install @project-osrm/osrm --save
สำหรับรายละเอียดการใช้งาน โปรดดูเอกสาร API เหล่านี้
คุณสามารถดูการใช้งานที่เป็นแบบอย่างโดยบุคคลที่สามด้วย Docker และ Node.js ได้ที่นี่
เมื่อใช้รหัสในสิ่งพิมพ์ (ทางวิทยาศาสตร์) โปรดอ้างอิง
@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},
}