أداة مجانية

RoughRoute - نقاط الطريق في، طريق طريق حقيقي خارج

جهاز توجيه صغير غير متصل بالإنترنت يعتمد على بيانات OpenStreetMap. أعطها نقاط طريق مرتبة وستقوم بإرجاع خط متعدد يتبع الطرق الحقيقية - بدون مكالمات الشبكة في وقت التشغيل، في أجزاء من الثانية مكونة من رقم واحد.

مجاني ومفتوح المصدر · Rust · MIT License

المشكلة

🧭 الخط المستقيم ليس طريقا

أي شيء يحاكي الحركة - أداة تشغيل mock-GPS، أو عرض توضيحي، أو رسم متحرك للخريطة - يحتاج إلى مسار يبدو وكأنه مدفوع، وليس خطًا مستقيمًا عبر المباني. تحل محركات التوجيه الكاملة هذه المشكلة، ولكنها ثقيلة، ويتوقع معظمها وجود خادم على الطرف الآخر من مكالمة الشبكة.

الفكرة

📦 صغيرة بما يكفي لتضمينها

RoughRoute يفعل شيئًا واحدًا: نقاط الطريق، خط معقول يتبع الطريق. يتم تجميع الخريطة مسبقًا في ملف خريطة مضغوط يأتي مع التطبيق الخاص بك، لذلك في وقت التشغيل لا يوجد خادم، ولا يوجد مفتاح API، ولا شيء يحد من معدلك.

سمات

ماذا يفعل

📴 لا توجد شبكة في وقت التشغيل

يتم تشغيل الاستعلامات مقابل ملف خريطة تم إنشاؤه مسبقًا على الجهاز. يعمل على متن طائرة، أو في نفق، أو في CI مع إيقاف تشغيل الشبكة.

🧩 جوهر واحد، ثلاث قذائف

يتم تجميع نفس Rust إلى WebAssembly للمتصفح، ومكتبة Android الأصلية عبر UniFFI، وثنائي سطر الأوامر.

⚡ استعلامات ميلي ثانية واحدة

A* عبر شبكة طرق مضغوطة. سريع بما يكفي للتوجيه على كل إطار من التشغيل، وليس مرة واحدة فقط في البداية.

🗜 ملفات الخريطة المقاسة بالميجابايت

يحافظ انهيار الدرجة الثانية والهندسة المضغوطة بالدلتا على منطقة قابلة للاستخدام صغيرة بما يكفي لتجميعها أو تقديمها من CDN.

🚗 القيادة والمشي

يحمل ملف خريطة واحد كلا الملفين من خلال أقنعة الوصول الثنائية، لذا لا يمكنك إنشاء المنطقة وشحنها مرتين.

🔁 نفس الإدخال، نفس البايتات

التوجيه أمر حتمي: نفس الإحداثيات ونفس ملف الخريطة ينتجان دائمًا نفس الخط. أخبار جيدة للاختبارات التي تقارن المخرجات.

كيف يعمل

⚙️ ثلاث خطوات

  1. قبل ذلك، قم بتجميع منطقة .osm.pbf في ملف .graph مضغوط.
  2. قم بشحن هذا الملف - قم بتجميعه مع التطبيق أو ضعه خلف CDN.
  3. على الجهاز، قم بتحميل هذا الملف وتشغيل الاستعلامات محليًا. يمكنك استعادة الإحداثيات والمسافة.
جربه

⌨️ من سطر الأوامر

roughroute build region.osm.pbf -o region.graph

roughroute route region.graph \
  --profile car \
  --via 40.7128,-74.0060 \
  --via 40.7580,-73.9855 \
  --format geojson

أو من المتصفح عبر WebAssembly:

const router = new WasmRouter(graphBytes);
const { coords, distance } = router.route(waypoints, "car");

⚖️ ما لا يفعل عمدا

RoughRoute يتداول بدقة الحجم والسرعة. فهو يتجاهل الشوارع ذات الاتجاه الواحد، وقيود الانعطاف والتكلفة على أساس السرعة، وإذا لم يتمكن من العثور على مسار، فإنه يقوم بإرجاع جزء مستقيم بدلاً من الرفض. هذه هي التجارة الصحيحة للتشغيل والعروض التوضيحية والاحتياطيات دون اتصال بالإنترنت - وهي التجارة الخاطئة للتنقل خطوة بخطوة، حيث تريد محرك توجيه كامل.

مرخص تحت معهد ماساتشوستس للتكنولوجيا. تأتي بيانات الخريطة من المساهمين OpenStreetMap، المرخصين بموجب ODbL.