रास्ते की योजना बनाना

कभी-कभी, आपको अपने ऐप्लिकेशन में उपयोगकर्ताओं को दिखाए जाने वाले रास्ते को प्लान करना पड़ सकता है. Routes API या Route Optimization API से मिले रूट टोकन का इस्तेमाल करके, तय किए गए रास्ते के लिए दो चीज़ें तय की जा सकती हैं:

  • रास्ते के लिए पॉलीलाइन

  • आपके रूट के मकसद

उदाहरण के लिए, यहां रूटिंग के कुछ उदाहरण दिए गए हैं:

  • डिलीवरी में लगने वाले समय को कम करना: खाने-पीने की चीज़ें डिलीवर करने वाला कारोबार, डिलीवरी में लगने वाले समय को कम करना चाहेगा.

  • यात्रा में लगने वाले समय या ईंधन की खपत को कम करना: लॉजिस्टिक्स कारोबार, अपने ड्राइवरों की परफ़ॉर्मेंस को बेहतर बनाना और ईंधन की लागत को कम करना चाहता है.

  • मंज़िल तक पहुंचने में लगने वाले समय को कम करना: सेवा डिस्पैच करने वाले ऑपरेशन में, ऑपरेटर को जॉब के अनुरोध तक पहुंचने में लगने वाले समय को कम किया जा सकता है.

  • लागत कम करना और सुरक्षा बढ़ाना: राइड-शेयरिंग कारोबार, ऐसा रास्ता ढूंढ सकता है जो यात्रियों के लिए कम लागत वाला हो और सुरक्षा की वजहों से कुछ इलाकों से न गुज़रता हो.

रूट टोकन का इस्तेमाल करके रूट प्लान करने के बारे में ज़्यादा जानने के लिए, Routes API में रूट टोकन पाएं और Route Optimization API में ट्रांज़िशन पॉलीलाइन और रूट टोकन देखें.

रास्ते के मकसद के लिए, रूट टोकन का इस्तेमाल क्यों करें

Routes API या Route Optimization API से मिले रूट टोकन की मदद से, आपको दिए गए रूट पर ज़्यादा कंट्रोल मिलता है:

  • Navigation SDK के इस्तेमाल के लिए, पहले से कोई रास्ता तय करें.

  • Navigation SDK के लिए सबसे अच्छा रास्ता चुनें. अगर Routes API में रास्ते जनरेट करते समय, रास्ते के टोकन का अनुरोध किया जाता है, तो आपको जनरेट किए गए हर रास्ते के लिए एक टोकन मिलता है. इसके बाद, उस रास्ते के लिए टोकन चुना जा सकता है जिसका इस्तेमाल आपको Navigation SDK टूल को पास करते समय करना है.

  • पहले से ही कीमत का अनुमान लगाएं. इसमें ईटीए और दूरी का अनुमान लगाना शामिल है. हालांकि, असल लागत और समय अलग-अलग हो सकता है, लेकिन इस अनुमान से, रास्ते की अनुमानित और असल लागत के बीच का अंतर कम हो जाता है.

  • रास्ते के लिए ज़्यादा बेहतर मकसद तय करें. जैसे, ईको-फ़्रेंडली रास्ता या सबसे छोटा रास्ता.

रूट टोकन कैसे काम करते हैं

रूट के मकसद का इस्तेमाल करके रूट प्लान करने के लिए, Routes API या Route Optimization API का इस्तेमाल किया जा सकता है. इनमें से किसी भी एपीआई से मिले रूट टोकन को Navigation SDK टूल को पास किया जा सकता है. इससे यह तय किया जा सकता है कि वह आपके वाहन को किस तरह रूट करे.

रूट टोकन का अनुरोध करने और उसका इस्तेमाल करने पर, यह जानकारी मिलती है:

  1. Routes API या Route Optimization API, एन्क्रिप्ट किया गया रूट टोकन दिखाता है. इसमें रूट पॉलीलाइन और रूट के मकसद शामिल होते हैं.

  2. Navigation SDK टूल को रूट टोकन पास किया जाता है.

  3. Navigation SDK, आपके तय किए गए रास्ते पर नेविगेशन शुरू करता है. भले ही, कोई तेज़ रास्ता उपलब्ध हो.

  4. यात्रा के दौरान, अगर ट्रैफ़िक या सड़क की स्थिति बदलती है या वाहन तय किए गए रास्ते से हट जाता है, तो Navigation SDK एक नया रास्ता कैलकुलेट करता है. यह रास्ता, आपके रूट टोकन में सेट किए गए रास्ते के मकसद और रूटिंग के विकल्पों के हिसाब से तय होता है.

इस प्रोसेस से, असल रास्ते और आपके तय किए गए रास्ते के बीच की दूरी को कम से कम किया जाता है.

तय किए गए रास्ते का पूरी तरह से पालन न करने की वजह

नेविगेशन, आपके तय किए गए रास्ते पर शुरू होता है. हालांकि, इन स्थितियों में असल रास्ता अलग हो सकता है:

  • वाहन, प्लान की गई शुरुआती जगह से दूर शुरू होता है.
  • यात्रा के दौरान ट्रैफ़िक या सड़क की स्थिति में बदलाव हो.
  • वाहन, तय किए गए रास्ते से हट जाता है.

इन अंतरों की वजह से, यात्रा की दूरी, ईटीए, और अन्य अहम पहलुओं पर असर पड़ सकता है.

रूट टोकन का इस्तेमाल करके रूट प्लान करना

रूट टोकन बनाकर और फिर उसे Navigation SDK टूल को पास करके, रूट प्लान किया जा सकता है. इसके लिए, यह तरीका अपनाएं:

पहला चरण: Routes API या Route Optimization API का इस्तेमाल करके रूट टोकन बनाना

  1. इनमें से किसी एक तरीके का इस्तेमाल करके, रूट टोकन का अनुरोध करें:

  2. रूट टोकन का इस्तेमाल करने की ज़रूरी शर्तें पूरी करने के लिए, Routes API का अनुरोध सेट अप करें:

    • travelMode को DRIVE या TWO_WHEELER पर सेट करें.
    • routingPreference को TRAFFIC_AWARE या TRAFFIC_AWARE_OPTIMAL पर सेट करें.
    • Via वेपॉइंट का इस्तेमाल न करें.

दूसरा चरण: Navigation SDK को रूट टोकन पास करना

  1. रूट टोकन को सेव करना: Navigation SDK में, रूट टोकन को सेव करने के लिए एक स्ट्रिंग सेट अप करें. उदाहरण के लिए:

    String routeToken = "route token returned by Routes API";
    

    लौटाए गए रूट टोकन का उदाहरण:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. Navigator.setDestinationsWithToken तरीके का इस्तेमाल करके, Navigation SDK को रूट टोकन पास करें. Navigation SDK, रूट टोकन से मंज़िल और रास्ते के विकल्प हासिल करता है. इसलिए, आपको वेपॉइंट या यात्रा का मोड पास करने की ज़रूरत नहीं होती.

    setDestinationsWithToken(String routeToken, RouteDescriptionLoadCallback callback);
    setDestinationsWithToken(String routeToken, DisplayOptions displayOptions, RouteDescriptionLoadCallback callback);
    

  3. अपने कॉलबैक में रूट का स्टेटस देखें. जब Navigation SDK, रास्ते का हिसाब लगा लेता है, तो वह आपके कॉलबैक को RouteDescription पास करता है. अगर इसे वाहन की जगह से आपके रूट टोकन में मौजूद डेस्टिनेशन तक का कोई रूट मिलता है, तो RouteDescription.getRouteStatus, Navigator.RouteStatus.OK दिखाता है. इसके बाद, आपको निर्देश मिलने शुरू हो जाते हैं. उदाहरण के लिए:

    navigator.setDestinationsWithToken(
        routeToken,
        routeDescription -> {
          if (routeDescription.getRouteStatus() == Navigator.RouteStatus.OK) {
            navigator.startGuidance();
          }
        });
    

देखें कि Navigation SDK ने आपके रूट टोकन को लागू किया है या नहीं

OK रूट स्टेटस का मतलब है कि नेविगेशन SDK को कोई रूट मिला है. हालांकि, ज़रूरी नहीं है कि यह वही रूट हो जो आपने प्लान किया था. यह देखने के लिए कि रूट आपके तय किए गए रूट से मेल खाता है या नहीं, अपने कॉलबैक में यह तरीका अपनाएं:

  1. पुष्टि करें कि RouteDescription.getRouteStatus, Navigator.RouteStatus.OK दिखाता है. Navigation SDK, रूट टोकन की जानकारी सिर्फ़ तब देता है, जब उसे कोई रूट मिलता है. ज़्यादा जानकारी के लिए, दूसरा चरण देखें.

  2. RouteTokenExecutionDetails ऑब्जेक्ट पाने के लिए, RouteDescription.getRouteTokenExecutionDetails को कॉल करें. अगर सर्वर, रूट टोकन की जानकारी नहीं देता है, तो यह तरीका null दिखाता है.

  3. RouteTokenExecutionDetails ऑब्जेक्ट पर getTokenExecutionStatus को कॉल करें. अगर यह TOKEN_SUCCESSFULLY_APPLIED दिखाता है, तो इसका मतलब है कि रास्ता आपके तय किए गए रास्ते से मेल खाता है. कोई अन्य स्टेटस दिखने का मतलब है कि रास्ता आपके तय किए गए रास्ते से अलग हो सकता है. हर स्टेटस के बारे में ज़्यादा जानकारी के लिए, टोकन के लागू होने की स्थिति की वैल्यू देखें.

  4. ज़रूरी नहीं: अगर स्टेटस TOKEN_SUCCESSFULLY_APPLIED है, तो उसी RouteTokenExecutionDetails ऑब्जेक्ट पर getResolvedParameters को कॉल करें. इससे यह पता लगाया जा सकता है कि रास्ते में कौनसे रूटिंग विकल्प इस्तेमाल किए जाते हैं. जैसे, क्या टोल से बचा जा सकता है. ज़्यादा जानकारी के लिए, राउटिंग के लिए तय किए गए विकल्प देखें.

टोकन के इस्तेमाल की स्थिति की वैल्यू

अगर रास्ते की स्थिति OK है, तो टोकन के लागू होने की किसी भी स्थिति के साथ निर्देश देना शुरू किया जा सकता है. स्टेटस से पता चलता है कि रास्ता आपके तय किए गए रास्ते के मुताबिक है या नहीं.

स्थिति तय किए गए रास्ते के हिसाब से नेविगेट करना ब्यौरा
TOKEN_SUCCESSFULLY_APPLIED हां Navigation SDK ने आपके रूट टोकन को लागू कर दिया है.
TOKEN_APPLIED_WITH_LOCATION_MISMATCH ऐसा ज़रूरी नहीं है Navigation SDK, आपके तय किए गए रास्ते को फिर से नहीं बना सका. इसकी वजह यह है कि रास्ते के अनुरोध में मौजूद कोई जगह, आपके रूट टोकन में मौजूद जगह से 25 मीटर से ज़्यादा दूर थी. setDestinationsWithToken के साथ, इसका मतलब है कि डिवाइस आपके रूट टोकन में मौजूद ऑरिजिन से 25 मीटर से ज़्यादा दूर था. रास्ता अब भी आपकी मंज़िलों तक जाता है. हालांकि, Navigation SDK यह पुष्टि नहीं कर सकता कि इसमें आपके रूट टोकन के रूटिंग विकल्पों का इस्तेमाल किया गया है या नहीं. जैसे, टोल से बचना.
TOKEN_IGNORED_OTHER ऐसा ज़रूरी नहीं है Navigation SDK, किसी दूसरी वजह से आपके तय किए गए रास्ते को फिर से नहीं बना सका. उदाहरण के लिए, आपके तय किए गए रास्ते पर कोई सड़क बंद है. रास्ता अब भी आपकी मंज़िलों तक जाता है. हालांकि, Navigation SDK यह पुष्टि नहीं कर सकता कि इसमें आपके रूट टोकन के रूटिंग विकल्पों का इस्तेमाल किया गया है या नहीं. जैसे, टोल से बचना.
NO_TOKEN_PROVIDED लागू नहीं रास्ते के अनुरोध में, रास्ते का टोकन शामिल नहीं था.
UNKNOWN अज्ञात स्टेटस की जानकारी नहीं है.

अगर रास्ता आपके तय किए गए रास्ते के मुताबिक नहीं है और सटीक रास्ता ज़रूरी है, तो स्टेटस लॉग करें या वाहन की मौजूदा जगह से नए रास्ते के टोकन का अनुरोध करें. उदाहरण के लिए, आपने इसका इस्तेमाल कीमत का हिसाब लगाने के लिए किया हो.

रास्ते के विकल्प तय किए गए

getResolvedParameters, RouteTokenResolvedParameters ऑब्जेक्ट दिखाता है. अगर रूटिंग के विकल्प उपलब्ध नहीं हैं, तो null दिखाता है. RouteTokenResolvedParameters में ये तरीके शामिल हैं:

  • getTravelMode: यात्रा का वह मोड जिसका इस्तेमाल रूट करता है, जैसे कि RoutingOptions.TravelMode.DRIVING. Navigation SDK, RoutingOptions.TravelMode.DRIVING की जानकारी तब भी देता है, जब रास्ते में यात्रा का ऐसा मोड इस्तेमाल किया जाता है जिसकी कोई वैल्यू मैच नहीं होती या जब यात्रा का मोड उपलब्ध नहीं होता.
  • getAvoidTolls: क्या रास्ते में टोल नहीं है.
  • getAvoidHighways: क्या रास्ते में हाइवे शामिल नहीं हैं.
  • getAvoidFerries: इससे पता चलता है कि रास्ते में फ़ेरी का इस्तेमाल किया गया है या नहीं.

उदाहरण

यहां दिए गए कोड के उदाहरण में, रूट टोकन का इस्तेमाल करके रूट प्लान करने, यह देखने कि Navigation SDK ने टोकन लागू किया है या नहीं, और निर्देश देना शुरू करने का तरीका बताया गया है.

String routeToken = "route token returned by Routes API";

// Existing flow to get a Navigator.
NavigationApi.getNavigator(...);

// Handle the result of the route calculation.
RouteDescriptionLoadCallback callback =
    routeDescription -> {
      // Check whether the Navigation SDK found a route.
      if (routeDescription.getRouteStatus() != Navigator.RouteStatus.OK) {
        Log.w(TAG, "Route status: " + routeDescription.getRouteStatus());
        return;
      }

      // Check whether the Navigation SDK applied the route token.
      RouteTokenExecutionDetails executionDetails =
          routeDescription.getRouteTokenExecutionDetails();
      if (executionDetails == null) {
        Log.i(TAG, "Route token details aren't available.");
      } else if (executionDetails.getTokenExecutionStatus()
          != RouteTokenExecutionDetails.TokenExecutionStatus.TOKEN_SUCCESSFULLY_APPLIED) {
        Log.w(TAG, "The route might differ from your planned route.");
      }

      navigator.startGuidance();
    };

// Set destinations using the route token.
navigator.setDestinationsWithToken(routeToken, callback);

// Or with display options.
DisplayOptions displayOptions = new DisplayOptions();
navigator.setDestinationsWithToken(routeToken, displayOptions, callback);

रूट टोकन और Navigation SDK टूल कैसे इंटरैक्ट करते हैं

Navigation SDK, आपके तय किए गए रास्ते को इस तरह मैनेज करता है:

  • आपके रूट टोकन में सेट किए गए रूटिंग विकल्पों का इस्तेमाल करता है. यह आपके ऐप्लिकेशन में मौजूद इन सेटिंग का इस्तेमाल नहीं करता. इसमें यात्रा के दौरान नए रास्ते का हिसाब लगाने की सेटिंग भी शामिल है:

    • RoutingOptions.avoidHighways
    • RoutingOptions.avoidTolls
    • RoutingOptions.avoidFerries
    • Navigator.setLicensePlateRestrictionInfo
    • आपके ऐप्लिकेशन में सेट किया गया यात्रा मोड
  • रास्ते का हिसाब लगाते समय या उसमें बदलाव करते समय, इन सेटिंग का पालन करता है:

    • आपके रूट टोकन से रूट के मकसद, जैसे कि ईको रूटिंग या सबसे छोटा रास्ता. अगर नेविगेशन SDK को रास्ते में बदलाव करना है, तो वह उन रूट ऑब्जेक्टिव का इस्तेमाल करता है जो आपने रूट टोकन का अनुरोध करते समय तय किए थे.
    • आपके रूट टोकन से वेपॉइंट से जुड़े विकल्प, जैसे कि सड़क के किनारे की प्राथमिकता.