תכנון מסלול

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

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

  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?.continueToNextDestination([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

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

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

אפשר להגדיר עד 25 נקודות ציון.

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

דוגמה

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

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 continueToNextDestination:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

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

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

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

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

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

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

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

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

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