תכנון מסלול

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

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

  • יעדי המסלול

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. ממשקי Routes API,‏ Routes Preferred API או Route Optimization API מחזירים אסימון מסלול מוצפן שכולל את קו הפוליגון של המסלול ואת יעדי המסלול.

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

  3. Navigation 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. מעבירים את אסימון הנתיב ל-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
  • מעקבים:

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

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