תכנון מסלול

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

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

  • מטרות המסלול

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

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

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

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

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

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

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

בעזרת אסימון נתיב מה-API ל-Routes Preferred API, ה-Routes Preferred API או Route Optimize 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, מגדירים מחרוזת לאחסון אסימון הנתיב. לדוגמה:

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

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

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

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

    לדוגמה:

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

השיטה 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(TravelMode.DRIVING)
          .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

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

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

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

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

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

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

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

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