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

कभी-कभी, आपको अपने ऐप्लिकेशन में उपयोगकर्ताओं को दिखाए जाने वाले रास्ते को प्लान करना पड़ सकता है. 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 में, रूट टोकन को सेव करने के लिए एक स्ट्रिंग सेट अप करें. उदाहरण के लिए:

    let routeToken = "route token returned by Routes API"
    

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

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

    आपके ऐप्लिकेशन में सेट किया गया यात्रा का मोड, जैसे कि mapView.travelMode, इनमें से कोई एक वैल्यू होनी चाहिए:

    • .driving (GMSNavigationTravelModeDriving): ड्राइविंग. यह डिफ़ॉल्ट वैल्यू है. इसलिए, ज़्यादातर ऐप्लिकेशन को इसे बदलने की ज़रूरत नहीं होती.
    • .twoWheeler (GMSNavigationTravelModeTwoWheeler): दोपहिया वाहन.

    यात्रा के किसी अन्य मोड का इस्तेमाल करने पर, अनुरोध पूरा नहीं हो पाता. साथ ही, .travelModeUnsupported (GMSRouteStatusTravelModeUnsupported) गड़बड़ी का मैसेज दिखता है. इस्तेमाल की जा सकने वाली किसी भी वैल्यू के साथ, रूट आपके रूट टोकन में मौजूद यात्रा के मोड का इस्तेमाल करता है. उदाहरण के लिए, अगर आपका ऐप्लिकेशन ड्राइविंग के लिए इस्तेमाल किया जाता है और आपका रूट टोकन दोपहिया वाहन के रूट के लिए है, तो नेविगेशन एसडीके दोपहिया वाहन का रूट उपलब्ध कराता है. यह पुष्टि करने के लिए कि रास्ते में यात्रा का कौनसा मोड इस्तेमाल किया गया है, resolvedParameters.travelMode देखें. ज़्यादा जानकारी के लिए, राउटिंग के लिए तय किए गए विकल्प देखें.

  3. अपने कंप्लीशन हैंडलर में रूट का स्टेटस देखें. जब Navigation SDK, रास्ते का हिसाब लगा लेता है, तो वह आपके कंप्लीशन हैंडलर को GMSNavigationRouteDescription पास करता है. अगर इसे वाहन की जगह से आपके रूट टोकन में मौजूद डेस्टिनेशन तक का कोई रूट मिलता है, तो रूट की जानकारी में routeStatus की वैल्यू .OK (GMSRouteStatusOK) होगी. इसके बाद, गाइडेंस शुरू किया जा सकता है. ऐसा न होने पर, आपके कंप्लीशन हैंडलर को भी एक NSError मिलता है, जिसमें गड़बड़ी के बारे में बताया जाता है. उदाहरण के लिए:

    mapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in
      if routeDescription?.routeStatus == .OK {
        self?.mapView.navigator?.isGuidanceActive = true
      }
    }
    

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

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

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

  2. रास्ते की जानकारी का routeTokenExecutionDetails पाएं. यह एक ऐसा ऑब्जेक्ट है जो GMSNavigationRouteTokenExecutionDetails प्रोटोकॉल के मुताबिक होता है. अगर सर्वर, रूट टोकन की जानकारी नहीं देता है, तो इस प्रॉपर्टी की वैल्यू nil होगी.

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

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

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

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

स्थिति तय किए गए रास्ते के हिसाब से नेविगेट करना ब्यौरा
.tokenSuccessfullyApplied हां Navigation SDK ने आपके रूट टोकन को लागू कर दिया है.
.tokenAppliedWithLocationMismatch ऐसा ज़रूरी नहीं है नेविगेशन SDK टूल, आपके तय किए गए रास्ते को फिर से नहीं बना सका. साथ ही, डिवाइस आपके रूट टोकन में मौजूद शुरुआती जगह से 25 मीटर से ज़्यादा दूर था. रास्ता अब भी आपके रूट टोकन से मिले डेस्टिनेशन और रूटिंग के विकल्पों का इस्तेमाल करता है.
.tokenIgnoredOther ऐसा ज़रूरी नहीं है Navigation SDK, किसी दूसरी वजह से आपके तय किए गए रास्ते को फिर से नहीं बना सका. उदाहरण के लिए, आपके तय किए गए रास्ते पर कोई सड़क बंद है. रास्ता अब भी आपके रूट टोकन से मिले डेस्टिनेशन और रूटिंग के विकल्पों का इस्तेमाल करता है.
.noTokenProvided लागू नहीं रास्ते के अनुरोध में, रास्ते का टोकन शामिल नहीं था.
.unknown अज्ञात स्टेटस की जानकारी नहीं है.

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

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

resolvedParameters एक ऐसा ऑब्जेक्ट है जो GMSNavigationRouteTokenResolvedParameters प्रोटोकॉल के मुताबिक काम करता है. अगर रूटिंग के विकल्प उपलब्ध नहीं हैं, तो यह nil के मुताबिक काम करता है. इसमें ये प्रॉपर्टी शामिल हैं:

  • travelMode: यात्रा का वह मोड जिसका इस्तेमाल रूट करता है, जैसे कि .driving (GMSNavigationTravelModeDriving). Navigation SDK, .driving की जानकारी तब भी देता है, जब रूट यात्रा के ऐसे मोड का इस्तेमाल करता है जिसकी कोई मैचिंग वैल्यू नहीं होती या जब यात्रा का मोड उपलब्ध नहीं होता.
  • avoidTolls: क्या रास्ते में टोल नहीं है.
  • avoidHighways: क्या रास्ते में हाइवे शामिल नहीं हैं.
  • avoidFerries: इससे पता चलता है कि रास्ते में फ़ेरी का इस्तेमाल किया गया है या नहीं.
  • avoidTunnels: क्या रास्ता इस तरह से तय किया गया था कि जहां तक हो सके, सुरंगों से बचा जा सके.
  • avoidVignettes: वे देश जहां टोल विनेट से बचने के लिए, रूट का हिसाब लगाया गया था. इसके लिए, यूनिकोड सीएलडीआर के दो अक्षरों वाले रीजन कोड का इस्तेमाल किया गया था. जैसे, स्विट्ज़रलैंड के लिए CH.
  • rerouteStrategy: यात्रा के दौरान नए रास्तों का हिसाब लगाने के लिए, रूटिंग बैकएंड जिस रणनीति का इस्तेमाल करता है. रणनीतियों में .bestBasedOnTokenParameters (GMSNavigationRerouteStrategyBestBasedOnTokenParameters) शामिल है. यह नए रास्तों का हिसाब लगाने के लिए, आपके रूट टोकन में मौजूद रूटिंग पैरामीटर का इस्तेमाल करता है.

अगर टोकन के लागू होने की स्थिति .tokenSuccessfullyApplied नहीं है, तो Navigation SDK सिर्फ़ travelMode, avoidTolls, avoidHighways, और avoidFerries की जानकारी देता है. अन्य प्रॉपर्टी की वैल्यू डिफ़ॉल्ट होती हैं. भले ही, आपने रूट टोकन का अनुरोध करते समय, सुरंगों या टोल विनेट से बचने के लिए कहा हो: avoidTunnels, false (NO) है, avoidVignettes खाली है, और rerouteStrategy, .unknown (GMSNavigationRerouteStrategyUnknown) है.

उदाहरण

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

Swift

let routeToken = "route token returned by Routes API"

mapView.navigator?.setDestinationsWithToken(routeToken) { [weak self] routeDescription, error in
  // Check whether the Navigation SDK found a route.
  guard routeDescription?.routeStatus == .OK else {
    print("Route error: \(error?.localizedDescription ?? "unknown")")
    return
  }

  // Check whether the Navigation SDK applied the route token.
  if let executionDetails = routeDescription?.routeTokenExecutionDetails {
    if executionDetails.tokenExecutionStatus != .tokenSuccessfullyApplied {
      print("The route might differ from your planned route.")
    }
  } else {
    print("Route token details aren't available.")
  }

  self?.mapView.navigator?.isGuidanceActive = true
}

Objective-C

NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinationsWithToken:routeToken
                          completionHandler:^(id<GMSNavigationRouteDescription> _Nullable routeDescription,
                                              NSError *_Nullable error) {
  // Check whether the Navigation SDK found a route.
  if (routeDescription.routeStatus != GMSRouteStatusOK) {
    NSLog(@"Route error: %@", error.localizedDescription);
    return;
  }

  // Check whether the Navigation SDK applied the route token.
  id<GMSNavigationRouteTokenExecutionDetails> executionDetails =
      routeDescription.routeTokenExecutionDetails;
  if (executionDetails == nil) {
    NSLog(@"Route token details aren't available.");
  } else if (executionDetails.tokenExecutionStatus !=
             GMSNavigationRouteTokenExecutionStatusTokenSuccessfullyApplied) {
    NSLog(@"The route might differ from your planned route.");
  }

  mapView.navigator.guidanceActive = YES;
}];

एक से ज़्यादा स्टॉप वाली स्थितियां

ज़्यादा से ज़्यादा 25 वेपॉइंट कॉन्फ़िगर किए जा सकते हैं.

Navigation SDK, अपने-आप अगली मंज़िल पर नहीं जाता. जब वाहन किसी वेपॉइंट पर पहुंच जाए, तब यात्रा का अगला चरण शुरू करने के लिए, continueToNextDestinationWithCompletion: को कॉल करें. यह उन रूट टोकन पर भी लागू होता है जिनमें इंटरमीडिएट वेपॉइंट होते हैं. अगली मंज़िल पर जाने के लिए, Navigation SDK आपके रूट टोकन से मिले रास्ते को फ़ॉलो करता है. यह कोई नया रास्ता नहीं बनाता.

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

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

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
    • आपके ऐप्लिकेशन में सेट किया गया यात्रा मोड
  • रास्ते का हिसाब लगाते समय या उसमें बदलाव करते समय, इन सेटिंग का पालन करता है:

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