תכנון מסלול

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

  • קו פוליגוני של הנתיב

  • יעדי המסלול

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

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

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

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

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

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

למה להשתמש באסימון נתיב למטרות מסלול

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

שלב 1: יצירת אסימון נתיב באמצעות ה-API המועדף למסלולים או למסלולים

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

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

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

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

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

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

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

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

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

  • משתמש בנקודת ההתחלה של הרכב.

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

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

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

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

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