תכנון מסלול

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

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

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

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

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

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

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

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

מידע נוסף על תכנון מסלול באמצעות אסימון מסלול זמין במאמרים בקשה של אסימון מסלול ב-Routes API ובמאמר מעבר מ-Polylines לאסימוני מסלול ב-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. מבקשים טוקן מסלול באחת מהשיטות הבאות:

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

    ה-method‏ setDestinations מעבירה את סטטוס הבקשה ל-callback שלה. אם נמצא מסלול מהמיקום של המשתמש ליעד שצוין, הסטטוס הוא .OK (GMSRouteStatusOK).

תרחישים עם כמה עצירות

אפשר להגדיר עד 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:location 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.