לפעמים כדאי לתכנן את המסלול שהאפליקציה מספקת למשתמשים. שימוש באסימון מסלול מ-Routes API, מ-Routes Preferred API או מ-Route Optimization API יכול לעזור לכם לציין שני דברים לגבי המסלול המתוכנן:
קו פוליגוני של המסלול
מטרות המסלול
לדוגמה, אלה כמה דוגמאות ליעדים אפשריים של ניתוב:
קיצור זמן האספקה: עסק שמספק משלוחי אוכל יכול לצמצם את זמן האספקה.
צמצום זמן הנסיעה או צריכת הדלק: חברת לוגיסטיקה עשויה לרצות לשפר את היעילות של הנהגים שלה ולהפחית את עלויות הדלק.
צמצום הזמן להגיע ליעד: יכול להיות שצוות שליחת הבקשות בשירות ירצה לצמצם את הזמן שלוקח למפעילים להגיע לבקשת עבודה.
הפחתת העלויות ושיפור הבטיחות: עסק שיתוף נסיעות עשוי לרצות למצוא מסלול שמוזיל את העלויות לנוסעים ומאפשר להימנע מאזורים מסוימים מטעמי בטיחות.
למידע נוסף על תכנון מסלול באמצעות אסימון מסלול, ראו בקשה לאסימון מסלול ב-Routes API וקווים פוליגונליים של מעבר ואסימוני מסלול ב-Route Optimization API.
למה כדאי להשתמש באסימון מסלול למטרות מסלול
אסימון מסלול מ-Routes API, מ-Routes Preferred API או מ-Route Optimization API מאפשר לכם לשלוט טוב יותר במסלול שסופק:
תכנון מסלול מראש כדי ש-Navigation SDK יוכל להשתמש בו כשהדבר אפשרי.
בחירת הנתיב הטוב ביותר ל-Navigation SDK. אם מבקשים אסימוני מסלולים בזמן יצירת מסלולים ב-Routes API, מקבלים אסימון מסלול לכל מסלול שנוצר. לאחר מכן תוכלו לבחור את האסימון של המסלול שבו אתם רוצים להשתמש כשתעבירו אותו ל-Navigation SDK.
לחשב מראש את המחיר, כולל אומדנים של זמן ההגעה המשוער והמרחק. העלות והזמן בפועל עשויים להשתנות, אבל ההערכה הזו מצמצמת את הפער בין העלות הצפויה לבין העלות בפועל של המסלול.
ציון יעדי מסלול מתקדמים יותר, כמו מסלול ידידותי לסביבה או המסלול הקצר ביותר.
איך פועלים אסימוני מסלול
אפשר להשתמש ב-Routes API, ב-Routes Preferred API או ב-Route Optimization API כדי לתכנן מסלול באמצעות יעדי מסלול. אפשר להעביר אסימון מסלול שחזר מכל אחד מממשקי ה-API האלה ל-Navigation SDK כדי להנחות אותו איך לנתב את הרכב.
זה מה שקורה כשמבקשים אסימון נתיב ומשתמשים בו:
ממשקי Routes API, Routes Preferred API או Route Optimization API מחזירים אסימון מסלול מוצפן שכולל את קו הפוליגון של המסלול ואת יעדי המסלול.
מעבירים את אסימון המסלול ל-Navigation SDK.
Navigation SDK מאחזר את המסלול, או אם המסלול לא זמין בגלל תנאים משתנים, הוא מאחזר את המסלול הכי תואם.
במהלך הנסיעה במסלול, אם תנאי התנועה או תנאי הדרך משתנים, או אם הרכב יוצא מהמסלול המתוכנן, המסלולים המשופרים מנסים כל הזמן להתאים את המסלול הטוב ביותר על סמך יעדי המסלול ששמורים באסימון.
התהליך הזה מאפשר למסלול בפועל להיות קרוב ככל האפשר למסלול המתוכנן.
למה יכול להיות שלא תעקבו בדיוק אחרי המסלול המתוכנן
הנתיב המתוכנן ויעדי הנתיב הם הנחיות שצריך לפעול לפיהן, אבל הם לא מחייבים. יכול להיות שתבחינו בהבדל בין המסלול שתכננתם לבין המסלול שמוצג בניווט המדריך. ההבדל יכול לנבוע מתנאי הדרך, ממיקום ההתחלה או מפרמטרים אחרים שהשתנו מאז שיצרתם את המסלול. ההבדל הזה עלול לגרום לחוסר התאמה בין היעדים המתוכננים לבין היעדים בפועל לגבי המרחק והזמן המשוער להגעה, בין היתר.
תכנון מסלול באמצעות אסימון מסלול
כדי לתכנן מסלול, יוצרים אסימון מסלול ומעבירים אותו ל-Navigation SDK, כפי שמתואר בשלבים הבאים:
שלב 1: יוצרים אסימון מסלול באמצעות Routes API, Routes Preferred API או Route Optimization API
מבקשים אסימון מסלול באחת מהשיטות הבאות:
Routes API:
computeRoutes
. למידע נוסף על שליחת בקשה לאסימון מסלול ב-Routes API, ראו חישוב מסלול ושליחת בקשה לאסימון מסלול.Routes Preferred API:
computeCustomRoutes
. למידע נוסף על שליחת בקשה לאסימון מסלול ב-Routes Preferred API, ראו תכנון מסלול.Route Optimization API:
optimizeTours
אוbatchOptimizeTours
. מידע נוסף על שליחת בקשה לקבלת אסימון מסלול ב-Route Optimization API זמין במאמר קווים פוליגונליים של מעבר ואסימוני מסלולים.
מגדירים את הבקשה ל-Routes API או ל-Routes Preferred API כדי לעמוד בדרישות לשימוש באסימון מסלול:
- מגדירים את
travel_mode
לערךDRIVING
אוTWO_WHEELER
- מגדירים את
routing_preference
לערךTRAFFIC_AWARE
אוTRAFFIC_AWARE_OPTIMAL
- אין להשתמש ב-
Via
נקודות ציון
- מגדירים את
שלב 2: העברת אסימון המסלול ל-Navigation SDK
אחסון אסימון המסלול: ב-Navigation SDK, מגדירים מחרוזת לאחסון אסימון המסלול. לדוגמה:
String routeToken = "route token returned by Routes API";
דוגמה לאסימון מסלול שהוחזר:
{ // Other fields "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g", }
מעבירים את אסימון המסלול ל-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
במעקב:
אפשרויות שקשורות לציון דרך, כמו העדפת צד הדרך.
יעדים לנתיב. אם ל-Navigation SDK צריך לשנות את המסלול שהוחזר, הוא משתמש ביעדי המסלול שציינתם בבקשה לקבלת אסימון המסלול. לכן, צריך להשתמש באותן אפשרויות שקשורות לנקודות ציון שציינתם ב-Routes API.