למי המדריך הזה מיועד: המדריך הזה מיועד למפתחים שיוצרים שירותים לתכנון נסיעות ולביצוע נסיעות באמצעות משאיות או כלי רכב גדולים אחרים. מקרי שימוש רלוונטיים כוללים חישוב של זמני נסיעה ומרחקים, חישוב של זמני הגעה משוערים או יצירה של מסלולים שישמשו אפליקציית ניווט.
מה כולל המדריך הזה: במדריך הזה מוסבר איך להשתמש ב-Routes API עם תכונת הניתוב לרכבים גדולים כדי לבקש מסלולים, מרחק נסיעה, זמן נסיעה משוער וזמני הגעה משוערים שמתחשבים במאפיינים הספציפיים של רכב גדול, כמו משאית מסחרית או אוטובוס נוסעים.
מידע על ביצוע חישובים ברמת צי הרכב לרכבים גדולים באמצעות Route Optimization API זמין במסמכי העזרה בנושא ניהול מסלולים למשאיות ב-Route Optimization.
מה תלמדו
במדריך הזה תלמדו איך:
- יצירת בקשת ניתוב תקינה.
- מציינים פרופיל רכב עבור הרכב הפיזי, באמצעות מידות, משקל ומאפיינים אחרים.
- פירוש התשובה, כולל אסימון המסלול ודגלי הבטיחות של הנסיעה.
דרישות מוקדמות
- צריך ליצור פרויקט בענן ב-Google Cloud ולהפעיל בו את Routes API.
- צריך להקצות לפרויקט את האפשרות 'ניתוב לרכבים גדולים'. כדי להשלים את השלב הזה, צריך לפנות לנציג Google.
מגבלות
לפני שמתחילים, חשוב להכיר את המגבלות והדרישות הבאות.
- זמינות גיאוגרפית: ניתוב של כלי רכב גדולים זמין רק ב-48 המדינות הרציפות בארצות הברית.
- התכונה 'ניתוב כלי רכב גדולים' היא גרסת טרום-השקה. הנהגים לא יכולים להסתמך רק על המסלולים שמוחזרים על ידי ה-API הזה כדי להבטיח בטיחות או חוקיות. אין ערובה לכך שהמסלולים מתאימים לרכב, ושימוש בהם עלול לחשוף את הנהגים לסכנות כמו גשרים נמוכים או כבישים שאסור לנסוע בהם עם רכבים גדולים.
- מסלולים במאמץ הכי טוב. במקרים מסוימים, ה-API לא יכול למצוא מסלול שעומד באופן מלא בהגבלות על נסיעות. במקום זאת, היא מחזירה מסלול 'במאמץ הכי טוב' שעשוי עדיין לעבור באזורים מוגבלים. התשובה של Routes API מציינת בבירור את המסלולים האלה בשדה
routeRestrictionsPartiallyIgnored. במקרים כאלה, מומלץ לתכנן את המסלול בקפידה, ועדיף להשתמש במקורות נתונים אחרים. אל תשתמשו במסלול שסומן כמקור מידע יחיד לתכנון או לניווט. - תכונות שלא נתמכות: אנחנו פועלים להוספת פונקציונליות נוספת למוצר הזה, אבל כרגע אי אפשר להשתמש בתכונות הבאות כשמתווים מסלול לרכבים גדולים:
- מחירי אגרה למשאיות
- מגבלות מהירות
- ניתוב של חומרים מסוכנים רדיואקטיביים
- מכסות שימוש: כל הבקשות כפופות למכסות הרגילות של שאילתות לשנייה (QPS).
יצירת בקשה למסלול משאית
כדי לקבל מסלול נסיעה למשאית, שולחים בקשת HTTPS לנקודת קצה ל-API של Routes API עם פרמטרים ספציפיים שמתארים את הרכב.
נקודות קצה
אפשר להשתמש בשתי נקודות קצה לניתוב משאיות:
-
computeRoutes: חישוב של מסלול יחיד בין נקודת מוצא אחת ליעד אחד. -
computeRouteMatrix: מחשבת את המרחק ואת משך הזמן של מטריצה של נקודות מוצא ויעדים, אבל לא מחזירה קו פוליגון של מסלול.
פרמטרים מרכזיים של בקשות
גוף הבקשה צריך לכלול את הפרטים הבאים:
-
travelMode: מגדירים את הערך הזה ל-TRUCK. -
routingPreference: מגדירים את הערך הזה ל-TRAFFIC_AWARE_OPTIMAL. -
routeModifiers: האובייקט הזה מכיל את האובייקטvehicleInfoשבו מגדירים את מאפייני הרכב. האובייקטvehicleInfoמתואר בפירוט בהמשך.
איך מציינים פרופיל רכב
כדי לשלוח בקשה, צריך לספק גוף בקשה עם vehicleInfo
אובייקט שמתאר את הרכב. אפשר להתייחס למידע הזה כמפרט שתואם לפרטים הפיזיים של הרכב שלכם בעולם האמיתי. השירות דורש את הפרטים האלה כדי להחזיר מסלולים שמתחשבים בהגבלות על הכבישים על סמך המאפיינים של הרכב.
מידות של כלי רכב
צריך לציין את משקל הרכב בקילוגרמים ואת מידות הרכב במילימטרים, כמו שמצוין בשמות השדות. לדוגמה, צריך לציין את הגובה הכולל במילימטרים (totalHeightMm). מכיוון שלעתים קרובות מידות של משאיות מצוינות ברגל או במטר, יכול להיות שיהיה צורך בהמרת יחידות.
המרת מידות אימפריאליות למידות מטריות
כשממירים מיחידות אימפריאליות, חשוב תמיד לקחת בחשבון את המידות הספציפיות של הרכב, לצד המגבלות הסטנדרטיות לגבי גודל של כבישים ומעברים תת-קרקעיים. הדבר חשוב במיוחד כשמדובר בערכים חלקיים. בהתאם לגודל הרכב בפועל, עיגול כלפי מעלה של ערך חלקי יכול לגרום להגבלות יתר על המסלול של הרכב.
לדוגמה:
- רוחב: לטריילרים רבים בארה"ב יש רוחב של 8' 6", ששווה ל-2,590.8 מ"מ. עיגול כלפי מעלה ל-2,591 מ"מ יצביע על כך שהרכב גדול מ-8' 6", ולכן הוא יסווג כרכב גדול מדי בכבישים בארה"ב. התוצאה תהיה מסלול שחושב לפי אילוצים שונים באופן משמעותי מאלה שהתכוונתם אליהם.
- גובה: מסלול שעובר מתחת לגשר בגובה 11' לא יתאים למשאית עם נגרר טיפוסית בגובה 13.5'. עם זאת, משאיות קטנות יותר, באורך של כ-10 רגל, יוכלו לעבור במעבר התת-קרקעי. לכן, חשוב מאוד לציין את מאפייני הרכב בצורה מדויקת.

בקטע הקוד הבא מוצג אובייקט vehicleInfo לדוגמה:
"vehicleInfo": {
"totalAxleCount": 5,
"totalHeightMm": 4114,
"totalLengthMm": 21945,
"totalWidthMm": 2590,
"totalWeightKg": 32658,
"trailerInfo": [{
"lengthMm": 16154
}
vehicleInfo שדות אובייקט
בטבלה הבאה מוצגות כל ההגדרות של כלי רכב ומטענים שאפשר לשלוח עם הבקשה.
| שדה | תיאור | הערות / ערכים |
|---|---|---|
totalHeightMm
|
הגובה המקסימלי של הרכב. | במילימטרים, מעוגל כלפי מטה. פרטים נוספים על עיגול זמינים במאמר בנושא המרת יחידות אימפריאליות ליחידות מטריות. |
totalWidthMm
|
הרוחב המקסימלי של הרכב. | במילימטרים, מעוגל כלפי מטה. |
totalLengthMm
|
האורך המשולב הכולל של כלי הרכב וכל הנגררים. | במילימטרים, מעוגל כלפי מטה. |
totalWeightKg
|
המשקל הכולל של הרכב (כולל נגררים ומטען). | בקילוגרמים, מעוגל כלפי מטה. |
totalAxleCount
|
המספר הכולל של הסרנים ברכב ובכל הנגררים. | מדויקת. |
trailerInfo (אופציונלי)
|
מערך של אובייקטים, אחד לכל טריילר. | לא מציינים את התג הזה אם מדובר ברכב ללא נגררים, כמו משאית סגורה. |
hazardousGoodsTypes (אופציונלי)
|
מערך שמציין חומרים מסוכנים שנמצאים על הסיפון. | EXPLOSIVES, GASES, FLAMMABLE, COMBUSTIBLE, ORGANIC, POISON, CORROSIVE, ASPIRATION_HAZARD, ENVIRONMENTAL_HAZARD, OTHER |
שימוש במסכות שדות
כדי לקבל את התוצאות הטובות ביותר, כדאי לכלול את הכותרת X-Goog-FieldMask בבקשה כדי לציין בדיוק את השדות שרוצים בתגובה. השימוש במסכות שדות מקטין את זמן האחזור ומבטיח שתקבלו שדות חשובים של ייעוץ. לפחות, תמיד צריך לכלול את routes.travelAdvisory.routeRestrictionsPartiallyIgnored במסכת השדות, כי הוא מציין אם במסלול יש הגבלה אחת או יותר שחלות על הרכב שלכם.
מידע נוסף על FieldMasks עם Routes API זמין במאמר הזה.
כבישי אגרה
כדי להגדיר עדיפות למסלולים ללא תשלום, מציינים avoidTolls במאפיין routeModifiers של בקשה. מידע נוסף על שינויים במסלול זמין במאמר הגדרת תכונות של מסלול כדי להימנע מהן.
ציון של avoidTolls לא מבטיח שנתיבים ללא תשלום יופיעו בתגובה. במקרים מסוימים, כדי לנסוע בין נקודת המוצא ליעד צריך להשתמש בכביש אגרה. אם כוללים את routes.warnings ב-fieldmask של בקשת Routes API, מסלולים שמכילים כבישי אגרה יסומנו בהתאם בשדה הזה.
דוגמה מלאה לבקשת curl
זוהי בקשת curl מלאה למשאית טיפוסית עם נגרר. בדוגמה הזו מופיעים נקודת הקצה, הכותרות וגוף הבקשה.
curl --location 'https://routes.googleapis.com/directions/v2:computeRoutes' \
--header 'Content-Type: application/json' \
--header 'X-Goog-Api-Key: YOUR_API_KEY' \
--header 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.routeToken,routes.travelAdvisory.routeRestrictionsPartiallyIgnored' \
--data '{
"origin": {
"location": {
"latLng": {
"latitude": 40.883274,
"longitude": -74.704574
}
}
},
"destination": {
"location": {
"latLng": {
"latitude": 40.991920,
"longitude": -75.183371
}
}
},
"travelMode": "TRUCK",
"routingPreference": "TRAFFIC_AWARE_OPTIMAL",
"routeModifiers": {
"vehicleInfo": {
"totalAxleCount": 5,
"totalHeightMm": 4114,
"totalLengthMm": 21945,
"totalWidthMm": 2590,
"totalWeightKg": 32658,
"trailerInfo": [{
"lengthMm": 16154
}]
}
}
}'
פרשנות של התגובה של computeRoutes
בקשה מוצלחת ל-Routes API מחזירה אובייקט תגובה בפורמט JSON שמכיל מסלול אפשרי אחד או יותר.
שדות תשובה עיקריים
- גיאומטריית מסלול מקודדת:
routes.polyline. אפשר להשתמש בנתונים האלה כדי לרנדר את המסלול במפה. - משך הנסיעה המשוער:
routes.duration(בשניות). משך הנסיעה בניתוב לרכבים גדולים מחושב באמצעות מודל חדש שאומן על מהירויות נסיעה שנמדדו בפועל של משאיות ברשת הכבישים. אפשר להשתמש בו גם כדי לחשב את זמן ההגעה המשוער (ETA) על ידי הוספת משך הנסיעה המשוער לשעת ההמראה הצפויה. - המרחק הכולל של המסלול:
routes.distanceMeters(במטרים). - אסימון מסלול:
routes.routeToken. זהו אסימון אטום שמייצג את המסלול המדויק שחושב. מעבירים את הטוקן הזה ל-Navigation SDK כדי לוודא לנהג מוצג אותו מסלול ספציפי למשאית. פרטים נוספים על האופן שבו עושים זאת מופיעים במדריך בנושא מתן הוראות הגעה מפורטות.
בדיקה לאיתור סימון של מסלולים לא בטוחים
כשמקבלים תשובה, הדבר הראשון שצריך לעשות הוא לבדוק אם יש דגלים שמעידים על בטיחות המסלול. אם מסלול שסופק מכיל הגבלה אחת או יותר שהופכות אותו ללא מתאים לרכב, הערך של השדה travelAdvisory.routeRestrictionsPartiallyIgnored יהיה true.
השדה הזה משמש כדגל כדי לענות על השאלה: "האם המסלול הזה מסומן כבעל בעיה פוטנציאלית?"
-
false(או לא מופיע בתשובה): המסלול לא מסומן. המערכת מצאה מסלול שלדעתה עומד בדרישות הפרמטרים שציינתם בבקשה. -
true: המסלול מסומן. המערכת לא הצליחה למצוא מסלול שעומד בכל הדרישות, והחזירה מסלול 'במאמץ' שלא בטוח או חוקי. חשוב לנסוע במסלול הזה בזהירות רבה.
דוגמה: תגובה computeRoutes
זוהי דוגמה לתשובה לבקשה שמוצגת למעלה. שימו לב: באובייקט travelAdvisory לא נכלל הדגל routeRestrictionsPartiallyIgnored. המשמעות היא שהמסלול לא מסומן ויש להניח שהוא תואם באופן מלא לפרופיל הרכב.
{
"routes": [
{
"distanceMeters": 3426,
"duration": "312s",
"travelAdvisory": {},
"routeToken": "CogCCogBChA7b39q54cKGCys_VXaDADjEhgszp8YhZFw0xvzm7SygpvCeIvJ7V0r6XIaJZ6BxNkMa_8HhhqlAci7hYMXi6UCpPgDW-yoAf8gzgHiEYyJAnoiAQU6AQFCB27cD9UCwwdKCMX2Ij7RpxY_eAGqARdUNENZWllLS0tJRGZ2T01QMVptSjRBaxAEGmIKYBIWCAAQAxAGEBMQEhgCQgQaAggFSgIIASIbChdUNENZWmVTc0o0RGZ2T01QMVptSjRBa3ABKAQyJ3RydWNraW5nOjpzZW1pLXRyYWlsZXItdHJ1Y2staGVhdnktc29mdCIVAOzExFsGGGfjVIIY7GXjYbPyONS8EiQiInRydWNraW5nOjpzZW1pLXRyYWlsZXItdHJ1Y2staGVhdnk"
}
]
}
קבלת מטריצה של מסלולי משאיות
כדי לחשב את זמני הנסיעה של הרבה נסיעות פוטנציאליות בבת אחת, אפשר להשתמש בנקודת הקצה computeRouteMatrix לתכנון ברמה גבוהה. כך אפשר להשוות ביעילות בין זמני הנסיעה והמרחקים בין הרבה נקודות מוצא ליעדים. לדוגמה,
אפשר להשתמש בו כדי למצוא את המשאית הקרובה ביותר למיקום איסוף חדש. אחרי שמזהים את מקור הרכב שרוצים להשתמש בו למטרה מסוימת, אפשר לשלוח בקשת computeRoutes כדי לקבל את פרטי המסלול ואת אסימון המסלול של הרכב המוצע.
כדי להשתמש ב-computeRouteMatrix, מציינים את vehicleInfo בכל אובייקט מקור.
בקשה לדוגמה
{
"origins": [
{
"waypoint": { "location": { "latLng": { "latitude": 32.77, "longitude": -96.85 }}},
"routeModifiers": { "vehicleInfo": { /* ...vehicle attributes... */ } }
},
{
"waypoint": { "location": { "latLng": { "latitude": 33.61, "longitude": -112.11 }}},
"routeModifiers": { "vehicleInfo": { /* ...vehicle attributes... */ } }
}
],
"destinations": [
{ "waypoint": { "location": { "latLng": { "latitude": 35.02, "longitude": -106.64 }}}},
{ "waypoint": { "location": { "latLng": { "latitude": 29.77, "longitude": -95.40 }}}}
],
"travelMode": "TRUCK",
"routingPreference": "TRAFFIC_AWARE_OPTIMAL"
}
דוגמה לתשובה
התגובה היא מערך שבו כל אובייקט מכיל את משך הזמן ואת distanceMeters של זוג אחד של נקודת מוצא ויעד.
[
{
"originIndex": 0,
"destinationIndex": 1,
"status": {},
"distanceMeters": 392372,
"duration": "14037s",
"condition": "ROUTE_EXISTS"
},
{ ... }
]
השלבים הבאים
- הצגת מסלול מפורט:
routeTokenכך מציגים מסלול מפורט עם מסלולים ספציפיים למשאיות. - ביצוע אופטימיזציה ברמת הצי: שימוש ב-Route Optimization API עם Large Vehicle Routing.
- הפניית API: רשימה מלאה של כל השדות והערכים האפשריים זמינה ב הפניית API של Routes.