תכנון מסלול

לפעמים כדאי לתכנן את המסלול שהאפליקציה מספקת לנהגים. שימוש באסימון מסלול מ-Routes API (או Routes Preferred API) יכול לעזור לכם לציין שני דברים למסלול המתוכנן:

  • קו פוליגוני למסלול

  • יעדי המסלול שלך

לדוגמה, הנה כמה דוגמאות ליעדי ניתוב שעשויים להיות:

  • פחות זמן למשלוח: יכול להיות שעסקים שמספקים אוכל ירצה לקצר את הזמן שלוקח לספק את האוכל.

  • צמצום זמן הנסיעה או צריכת הדלק: יכול להיות שעסקים לוגיסטיים ירצו לשפר את היעילות של הנהגים ולהפחית את עלויות הדלק.

  • קצרו את הזמן עד ליעד: יכול להיות שפעולה של שליחת שירות תצמצם את הזמן שנדרש כדי להעביר אופרטורים לבקשת משימה.

  • הפחתת העלויות ושיפור הבטיחות: אם יש לכם עסק לנסיעות משותפות, יכול להיות שתרצו למצוא מסלול שעולה פחות לנוסעים, ולהימנע מאזורים מסוימים מטעמי בטיחות.

למידע נוסף על תכנון מסלול באמצעות אסימון מסלול, קראו את המאמר בקשת אסימון מסלול.

למה כדאי להשתמש באסימון מסלול ליעדי מסלול

עם אסימון מסלול מ-Routs או Routes Preferred API יש לכם יותר שליטה במסלול שסופק:

  • כדאי לתכנן מסלול מראש לשימוש ב-SDK של הניווט, כשהדבר אפשרי.

  • בחירת המסלול הטוב ביותר לשימוש ב-SDK של הניווט. אם מבקשים אסימוני מסלול כשיוצרים מסלולים ב-Routes API, מקבלים אסימון מסלול לכל מסלול שנוצר. לאחר מכן אפשר לבחור את האסימון של המסלול שרוצים להשתמש בו כשמעבירים אותו ל-Navigation SDK.

  • הערכת המחיר מראש, כולל הערכות של זמן ההגעה המשוער והמרחק. העלות והזמן בפועל עשויים להשתנות, אבל ההערכה הזו מצמצמת את הפער בין העלות הצפויה לעלות בפועל במסלול.

  • מציינים יעדי מסלול מתקדמים יותר, כמו מסלול חסכוני או המסלול הקצר ביותר.

איך פועלים אסימוני המסלול של Routes API

אתם יכולים להשתמש ב-Routs API או ב-Routes Preferred API כדי לתכנן מסלול בהתאם ליעדי המסלול. ה-Routes API מחזיר אסימון מסלול שאפשר להעביר ל-Navigation SDK על מנת להנחות את אופן הניתוב של הרכב.

זה מה שקורה כשמבקשים אסימון מסלול מ-Routes API ומשתמשים בו:

  1. ה-Routes API מחזיר אסימון מסלול מוצפן שכולל את הקו הפוליגוני של המסלול ואת מטרות המסלול.

  2. אתם מעבירים את אסימון המסלול אל ה-SDK של הניווט.

  3. ה-SDK של הניווט מאחזר את המסלול, או אם המסלול לא זמין עקב שינויים בתנאים, הוא מאחזר את המסלול המתאים ביותר.

  4. במהלך הנסיעה במסלול, אם מצב התנועה או תנאי הדרך משתנים או אם כלי הרכב סוטה מהמסלול המתוכנן, המסלולים ששונו מנסים כל הזמן להתאים את המסלול הטוב ביותר על סמך יעדי המסלול באסימון.

התהליך הזה מגדיל ככל האפשר את המידה של המסלול בפועל למסלול המתוכנן שלך.

למה ייתכן שלא ניתן יהיה לעקוב בדיוק אחרי מסלול מתוכנן

חשוב על המסלול המתוכנן ויעדי המסלול כקווים מנחים בלבד: הם לא מיועדים. יכול להיות שתראו הבדל בין המסלול המתוכנן למסלול שמסופק על ידי הניווט המודרך, בגלל הבדלים בתנאי הכביש, במיקום ההתחלה או בפרמטרים אחרים שהשתנו מאז שיצרתם את המסלול המתוכנן. ההבדל הזה עלול לגרום לחוסר התאמה בין היעד המתוכנן ליעד שלכם ביחס למרחק ולזמן ההגעה המשוער, בין יתר תכונות הנסיעה החשובות.

תכנון מסלול באמצעות אסימון מסלול

ניתן לתכנן מסלול על ידי יצירת אסימון מסלול והעברה שלו ל-SDK של הניווט, כפי שמתואר בשלבים הבאים:

שלב 1: יצירת אסימון מסלול באמצעות ה-Rutes או Routes Preferred API

  1. מבקשים אסימון מסלול באחת מהשיטות הבאות:

    • Routes API: computeRoutes. למידע נוסף על בקשת אסימון מסלול ב-Routs API תוכלו לקרוא את המאמרים Compute a path ו-בקשת אסימון מסלול.

    • Routes Preferred API: computeCustomRoutes. למידע נוסף על בקשת אסימון מסלול ב-Routs Preferred API, קראו את המאמר תכנון מסלול.

  2. מגדירים את בקשת המסלול בהתאם לדרישות לשימוש באסימון מסלול:

    • הגדרה של travel_mode לערך 'DRIVING'
    • הגדרה של routing_preference לערך 'TRAFFIC_AWARE' או 'TRAFFIC_AWARE_OPTIMAL'
    • אין להשתמש בציוני דרך דרך

שלב 2: מעבירים את אסימון המסלול אל ה-SDK לניווט

  1. אחסון אסימון המסלול: ב-API של הניווט, מגדירים מחרוזת לאחסון אסימון המסלול. למשל:

    let routeToken = "route token returned by Routes API"

    דוגמה לאסימון מסלול שהוחזר:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. מעבירים את אסימון הנתיב ל-SDK לניווט באמצעות השיטה mapView.navigator setDestinations, ומציינים את אותן ציוני דרך ביעד שבהם השתמשתם כדי ליצור את אסימון המסלול:

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

השיטה Navigator.setDestinations מחזירה את סטטוס הבקשה. אם נמצא מסלול מהמיקום של המשתמש ליעד הנתון, הוא מחזיר RouteStatus.OK.

מידע נוסף על השיטה הזו זמין בכתובת Navigator.setDestinations.

דוגמה

הדוגמאות הבאות ממחישות איך לאחזר מסלול מתוכנן.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

הסבר על האינטראקציה בין אסימוני מסלול לבין ה-API של הניווט

זו האינטראקציה בין המסלול שנוצר על ידי ה-SDK של הניווט לבין המסלול המתוכנן באסימון המסלול:

  • שינוי כל היעדים שהוגדרו בעבר.

  • משתמש במיקום ההתחלה של הרכב.

  • מתבצעת התאמה של מצב הכביש והתנועה. קראו את המאמר סיבות אפשריות לכך שלא יתבצע מעקב מדויק אחרי מסלול מתוכנן.

  • מתעלם מהאפשרויות הבאות הקשורות לניתוב, ללא צורך:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • מעקבים:

    • אפשרויות שקשורות לנקודת ציון דרך, כמו העדפה לצד הדרך.

    • יעדי המסלול. אם ה-SDK של הניווט צריך להתאים את המסלול המוחזר, הוא ישתמש ביעדי הנתיב שציינתם כשביקשתם את אסימון המסלול. לכן צריך להשתמש באותן אפשרויות שקשורות לציוני הדרך שציינתם ב-Routs API.