محرك توجيه عالي الأداء مكتوب بلغة C++ مصمم للعمل على بيانات OpenStreetMap.
الخدمات التالية متاحة عبر HTTP API وواجهة مكتبة C++ ومجمع NodeJs:
لتجربة OSRM بسرعة، استخدم خادمنا التجريبي الذي يأتي مزودًا بكل من الواجهة الخلفية والواجهة الأمامية في الأعلى.
للحصول على مقدمة سريعة حول كيفية تمثيل شبكة الطرق في OpenStreetMap وكيفية رسم ميزات معينة لشبكة الطرق، قم بإلقاء نظرة على OSM wiki حول التوجيه أو هذا الدليل حول رسم الخرائط للملاحة.
مستودعات مشروع OSRM ذات الصلة:
irc.oftc.net
، القناة: #osrm
(Webchat)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 الخفي، تأكد من وجودك في مجموعة docker
.
sudo usermod -aG docker $USER
بعد إضافة نفسك إلى مجموعة docker
، تأكد من تسجيل الخروج والعودة مرة أخرى باستخدام جهازك الطرفي.
نحن ندعم الصور التالية في سجل الحاوية:
اسم | وصف |
---|---|
latest | master تم تجميعه مع علامة الإصدار |
latest-assertions | master تجميعه باستخدام علامة الإصدار وتمكين التأكيدات ورموز التصحيح |
latest-debug | master تم تجميعه باستخدام علامة التصحيح |
<tag> | علامة محددة تم تجميعها مع علامة الإصدار |
<tag>-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
اقرأ سياسة استخدام واجهة برمجة التطبيقات.
استعلام بسيط مع التعليمات والبدائل في برلين:
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++
حديثة ( >= 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
والتي ستتحقق وتستخدم الثنائيات المعدة مسبقًا إذا كانت متوفرة لهذا الإصدار وإصدار Node الخاص بك، أو عبر
npm install --build-from-source
لفرض إنشاء روابط Node.js دائمًا من المصدر.
قبل الإصدار v5.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},
}