תכנון מסלול

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

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

  • יעדי המסלול

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

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

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

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

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

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

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

עם אסימון נתיב מה-API המועדף, 'מסלולים' או 'מסלולים', מקבלים יותר שליטה במסלול הנתון:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    String routeToken = "route token returned by Routes API";

    דוגמה לאסימון מסלול שהוחזר:

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

    setDestinations(List destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions);

    לדוגמה:

    CustomRoutesOptions customRoutesOptions =
          CustomRoutesOptions.builder()
          .setRouteToken(routeToken)
          .build();

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

למידע נוסף על שיטה זו, ראה Navigator.setDestinations

דוגמה

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

    ArrayList <Waypoint> destinations = Lists.newArrayList();
    Waypoint waypoint1 =
       Waypoint.builder()
          .setLatLng(10, 20)
          .setTitle("title")
          .setVehicleStopover(true)
          .build();
    destinations.add(waypoint1);
    Waypoint waypoint2 =
       Waypoint.builder()
          .setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
          .setTitle("title")
          .setVehicleStopover(true)
           .build()
    destinations.add(waypoint2);

    String routeToken = "route token returned by Routes API";

    CustomRoutesOptions customRoutesOptions =
       CustomRoutesOptions.builder()
          .setRouteToken(routeToken)
          .setTravelMode(CustomRoutesOptions.TravelMode.TWO_WHEELER)
          .build();

    // Existing flow to get a Navigator.
    NavigationApi.getNavigator(...);

    // Existing flow for requesting routes.
    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions);

    // Or with display options.
    DisplayOptions displayOptions = new DisplayOptions();

    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions, displayOptions);

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

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

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

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

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

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

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

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

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