תכנון מסלול

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

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

    • מגדירים את travel_mode לערך DRIVING או 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.

מידע נוסף על השיטה הזו זמין במאמר GMSNavigator.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){...}];

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

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

  • מבטלים את כל היעדים שהוגדרו קודם.

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

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

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

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

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

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