RoughRoute - अंदर का रास्ता, बाहर एक वास्तविक सड़क मार्ग
OpenStreetMap डेटा पर निर्मित एक ऑफ़लाइन मिनी-राउटर। इसे ऑर्डर किए गए वेपॉइंट दें और यह एक पॉलीलाइन लौटाता है जो वास्तविक सड़कों का अनुसरण करता है - रनटाइम पर कोई नेटवर्क कॉल नहीं, एकल-अंक मिलीसेकंड में।
मुफ़्त और खुला स्रोत · Rust · MIT License
🧭 सीधी रेखा कोई सड़क नहीं है
कोई भी चीज़ जो गति का अनुकरण करती है - एक mock-GPS प्लेबैक टूल, एक डेमो, एक मानचित्र एनीमेशन - को एक ऐसे पथ की आवश्यकता होती है जो ऐसा लगे कि यह संचालित था, न कि इमारतों के माध्यम से एक सीधी रेखा। पूर्ण रूटिंग इंजन इसे हल करते हैं, लेकिन वे भारी होते हैं, और उनमें से अधिकांश नेटवर्क कॉल के दूसरे छोर पर एक सर्वर की अपेक्षा करते हैं।
📦 एम्बेड करने के लिए काफी छोटा
RoughRoute एक काम करता है: मार्ग-बिंदु, एक प्रशंसनीय सड़क-अनुगामी रेखा। मानचित्र को समय से पहले एक कॉम्पैक्ट मानचित्र फ़ाइल में संकलित किया जाता है जो आपके ऐप के साथ भेजा जाता है, इसलिए रनटाइम पर कोई सर्वर नहीं होता है, कोई API कुंजी नहीं होती है, और आपको रेट-सीमित करने के लिए कुछ भी नहीं होता है।
यह क्या करता है
📴 रनटाइम पर कोई नेटवर्क नहीं
क्वेरीज़ डिवाइस पर पूर्व-निर्मित मानचित्र फ़ाइल के विरुद्ध चलती हैं। विमान में, सुरंग में, या सीआई में नेटवर्क बंद होने पर काम करता है।
🧩 एक कोर, तीन गोले
वही Rust कोर ब्राउज़र के लिए WebAssembly, UniFFI के माध्यम से एक मूल Android लाइब्रेरी और एक कमांड-लाइन बाइनरी को संकलित करता है।
⚡ एकल-अंकीय मिलीसेकंड क्वेरीज़
A* एक संपीड़ित सड़क नेटवर्क पर। प्लेबैक के हर फ्रेम पर रूट करने के लिए पर्याप्त तेज़, शुरुआत में केवल एक बार नहीं।
🗜 मानचित्र फ़ाइलें मेगाबाइट में मापी गईं
डिग्री-2 पतन और डेल्टा-संपीड़ित ज्यामिति एक प्रयोग करने योग्य क्षेत्र को CDN से बंडल या सेवा करने के लिए पर्याप्त छोटा रखती है।
🚗 गाड़ी चलाना और चलना
एक मानचित्र फ़ाइल एक्सेस बिटमास्क के माध्यम से दोनों प्रोफाइल ले जाती है, इसलिए आप क्षेत्र को दो बार नहीं बनाते और शिप नहीं करते हैं।
🔁 वही इनपुट, वही बाइट्स
रूटिंग नियतात्मक है: समान वेपॉइंट और समान मानचित्र फ़ाइल हमेशा एक ही लाइन उत्पन्न करती है। आउटपुट की तुलना करने वाले परीक्षणों के लिए अच्छी खबर है।
⚙️ तीन कदम
- समय से पहले, एक .osm.pbf क्षेत्र को एक कॉम्पैक्ट .graph फ़ाइल में संकलित करें।
- उस फ़ाइल को शिप करें - उसे ऐप के साथ बंडल करें या CDN के पीछे रखें।
- डिवाइस पर, उस फ़ाइल को लोड करें और क्वेरीज़ को स्थानीय रूप से चलाएँ। आपको निर्देशांक और दूरी वापस मिल जाती है।
⌨️ कमांड लाइन से
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 के अंतर्गत लाइसेंस प्राप्त है।