תכנון מסלול

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

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

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

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

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

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

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

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

מידע נוסף על תכנון מסלול באמצעות אסימון מסלול זמין במאמרים בקשה של אסימון מסלול ב-Routes API ומעבר בין קווי פוליגון לאסימוני מסלול ב-Route Optimization API.

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

באמצעות אסימון מסלול מ-Routes API,‏ Routes Preferred API או Route Optimization API, יש לכם יותר שליטה על המסלול שמוצג:

  • תכננו מסלול מראש לשימוש ב-Navigation SDK כשזה אפשרי.

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

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

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

איך פועלים אסימוני מסלול

אתם יכולים להשתמש ב-Routes API, ב-Routes Preferred API או ב-Route Optimization API כדי לתכנן מסלול באמצעות יעדי מסלול. אפשר להעביר טוקן מסלול שמוחזר מכל אחד מממשקי ה-API האלה אל Navigation SDK כדי להגדיר איך המערכת תתכנן את המסלול של הרכב.

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

  1. ‫Routes API,‏ Routes Preferred API או Route Optimization API מחזירים טוקן מוצפן של מסלול שכולל את קו הפוליגון של המסלול ואת יעדי המסלול.

  2. מעבירים את אסימון המסלול אל Navigation SDK.

  3. ‫Navigation SDK מאחזר את המסלול, או אם המסלול לא זמין בגלל שינויים בתנאים, הוא מאחזר את המסלול התואם הטוב ביותר.

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

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

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

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

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

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

שלב 1: יוצרים אסימון מסלול באמצעות Routes API,‏ Routes Preferred API או Route Optimization API

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

    • ‫Routes API: computeRoutes. מידע נוסף על בקשת טוקן של מסלול ב-Routes API זמין במאמרים חישוב מסלול ובקשת טוקן של מסלול.

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

    • ‫Route Optimization API: optimizeTours או batchOptimizeTours. מידע נוסף על בקשת אסימון מסלול ב-Route Optimization API זמין במאמר Transition Polylines and Route Tokens.

  2. מגדירים את הבקשה ל-Routes API או ל-Routes Preferred API בהתאם לדרישות לשימוש בטוקן מסלול:

    • מגדירים את travel_mode לערך DRIVE או TWO_WHEELER
    • מגדירים את routing_preference לערך TRAFFIC_AWARE או TRAFFIC_AWARE_OPTIMAL
    • אל תשתמשו בVia נקודות ציון

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

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

    let routeToken = "route token returned by Routes API"
    

    דוגמה לטוקן מסלול שמוחזר:

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

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

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

תרחישים עם כמה יעדים

אפשר להגדיר עד 25 ציוני דרך.

השיטה setDestinations לא תומכת בנסיעות עם כמה עצירות. משתמשים ב-continueToNextDestinationWithCompletion() כדי להעביר את נקודת הציון לקטע הבא של המסלול.

דוגמה

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

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){...}];

איך פועלת האינטראקציה בין טוקנים של מסלולים לבין Navigation SDK

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

  • החלפה של כל היעדים שהוגדרו קודם.

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

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

  • התעלמות מהאפשרויות הבאות שקשורות לניתוב, כי הן לא נחוצות:

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

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

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