תכנון מסלול

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

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

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

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

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

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

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

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

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

למה כדאי להשתמש באסימון מסלול ליעדים של מסלולים

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

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

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

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

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

איך פועלים אסימוני מסלול

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

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

  1. The Routes API, Routs Preferred API או Rute Optimize API מחזיר אסימון נתיב מוצפן כולל את הנתיב הפוליגוני של הנתיב ואת מטרות המסלול.

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

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

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

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

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

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

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

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

שלב 1: יוצרים אסימון נתיב באמצעות Routes API, Routes Preferred API או Route Optimize 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();

ה-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(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 לניווט צריך תשנה את המסלול המוחזר, היא תשתמש במטרות המסלול שציינתם מבקשים את אסימון הנתיב. לכן, צריך להשתמש אפשרויות שקשורות לנקודת ציון שציינתם ב-Roututes API.