סקירה כללית
ניתן לחשב מסלולים (באמצעות מגוון שיטות
של תחבורה) באמצעות DirectionsService
לאובייקט. האובייקט הזה מתקשר עם המסלול ב-Google Maps API
שירות שמקבל בקשות לקבלת מסלול ומחזיר נתיב יעיל.
זמן הנסיעה הוא הגורם העיקרי לאופטימיזציה, אבל יש גם גורמים אחרים
כגון המרחק, מספר הפיתות ופרטים רבים נוספים.
אפשר לטפל בתוצאות המסלול האלה בעצמך או להשתמש
אובייקט אחד (DirectionsRenderer
) כדי לעבד אותם
תוצאות.
כשמציינים את המוצא או היעד בבקשת מסלול,
אפשר לציין מחרוזת שאילתה (לדוגמה, "שיקגו, ישראל" או
'Darwin, NSW, Australia', הערך של LatLng
או
אובייקט Place.
השירות 'מסלול הגעה' יכול להחזיר מסלולים מרובי חלקים באמצעות סדרה
של ציוני דרך. המסלול מוצג כשרטוט של קו פוליגוני
את המסלול במפה, או גם כסדרה של טקסט
תיאור בתוך רכיב <div>
(לדוגמה,
"יש לפנות ימינה לרמפה של גשר ויליאמבורג").
תחילת העבודה
לפני השימוש בשירות 'מסלולים' ב-Maps JavaScript API, צריך לוודא ש-Directions API מופעל במסוף Google Cloud, שהגדרתם עבור ממשק ה-API של JavaScript של מפות Google.
כדי להציג את רשימת ממשקי ה-API המופעלים:
- נכנסים אל מסוף Google Cloud.
- לוחצים על הלחצן Select a project. ואז לבחור את אותו הפרויקט שהגדרתם Maps JavaScript API ולוחצים על Open.
- ברשימת ממשקי ה-API במרכז הבקרה, מחפשים Directions API.
- אם ה-API מופיע ברשימה, אז לא צריך לבצע פעולה נוספת. אם ה-API לא מופיע ברשימה,
להפעיל אותו:
- בחלק העליון של הדף, בוחרים באפשרות ENABLE API כדי להציג את ספרייה. לחלופין, בתפריט שבצד שמאל, בוחרים באפשרות ספרייה.
- מחפשים את Directions API ובוחרים אותו רשימת התוצאות.
- בוחרים באפשרות הפעלה. כשהתהליך מסתיים, Directions API מופיע ברשימת ממשקי ה-API מרכז השליטה.
תמחור ומדיניות
תמחור
החל מ-16 ביולי 2018, נכנסה לתוקף תוכנית תמחור ותשלומים חדשה לפי שימוש למפות, למסלולים ולמקומות. למידע נוסף על התמחור החדש ומגבלות שימוש לשימוש בשירות JavaScript Directions, ראה שימוש וחיוב ל-Directions API.
מדיניות
השימוש בשירות 'מסלול הגעה' חייב להיות בהתאם המדיניות שמתוארת ל-Directions API.
בקשות לקבלת מסלול
הגישה לשירות 'מסלול הגעה' היא אסינכרונית, מאחר
Google Maps API צריך לבצע קריאה למשתמש
השרת. לכן, צריך להעביר קריאה חוזרת
להרצה לאחר השלמת הבקשה. הזה
שיטת הקריאה החוזרת אמורה לעבד את התוצאות. שימו לב
שירות המסלול עשוי להחזיר יותר ממסלול נסיעה אפשרי אחד
כמערך של routes[]
נפרד.
כדי להשתמש במסלול ב-Maps JavaScript API, יש ליצור אובייקט של
מקלידים DirectionsService
ומתקשרים
DirectionsService.route()
כדי לשלוח בקשה
לשירות 'מסלול הגעה',
DirectionsRequest
ייצוג מילולי של אובייקט
שמכיל את מונחי הקלט ושיטת קריאה חוזרת לביצוע
עם קבלת התגובה.
הליטרל של האובייקט DirectionsRequest
מכיל את
השדות הבאים:
{ origin: LatLng | String | google.maps.Place, destination: LatLng | String | google.maps.Place, travelMode: TravelMode, transitOptions: TransitOptions, drivingOptions: DrivingOptions, unitSystem: UnitSystem, waypoints[]: DirectionsWaypoint, optimizeWaypoints: Boolean, provideRouteAlternatives: Boolean, avoidFerries: Boolean, avoidHighways: Boolean, avoidTolls: Boolean, region: String }
הסבר על השדות האלה:
origin
(חובה) מציין את מיקום ההתחלה מ- שלפיו ניתן לחשב את המסלול. אפשר לציין את הערך הזהString
(לדוגמה, "שיקגו, ישראל"), כLatLng
או כאובייקט Place. אם משתמשים Place (מיקום), אפשר לציין מזהה מקום, מחרוזת שאילתה או מיקוםLatLng
. אפשר לאחזר מזהי מקומות מהקידוד הגיאוגרפי, שירותי השלמה אוטומטית של חיפוש מקומות API של מפות Google ל-JavaScript. לדוגמה לשימוש במזהי מקומות מ'מקום' השלמה אוטומטית. מקום השלמה אוטומטית והוראות.- מיקום הסיום
destination
(חובה) מציין את מיקום הסיום שאליו יחושב המסלול. האפשרויות זהות השדהorigin
מתואר למעלה. travelMode
(חובה) מציין מה אמצעי תחבורה שישמש לחישוב מסלול. נתונים תקפים הערכים מצוינים במצבי נסיעה שלמטה.transitOptions
(אופציונלי) מציין ערכים החלים רק על בקשות שבהןtravelMode
TRANSIT
מתוארים ערכים חוקיים בקטע אפשרויות תחבורה ציבורית שבהמשך.drivingOptions
(אופציונלי) מציין ערכים החלים רק על בקשות שבהןtravelMode
DRIVING
מתוארים ערכים חוקיים בקטע אפשרויות נהיגה שבהמשך.unitSystem
(אופציונלי) מציין מה שלנו שישמשו להצגת תוצאות. הערכים החוקיים הם: שמפורט בקטע Unit Systems (מערכות יחידות) למטה.waypoints[]
(אופציונלי) מציין מערך שלDirectionsWaypoint
. שינוי של ציוני דרך מסלול על ידי ניתוב שלו דרך המיקומים שצוינו. יש לציין ציון דרך כאובייקט עם שדות מוצגת למטה:location
מציין את המיקום של כ-LatLng
, Place (מיקום) או כאובייקטString
, שיועבר לקידוד גיאוגרפי.stopover
הוא ערך בוליאני שמציין שציון הדרך הוא עצירה במסלול, שכוללת את את ההשפעה של פיצול הנתיב לשני מסלולים.
(לקבלת מידע נוסף על ציוני דרך, ראו שימוש ציוני דרך במסלולים בהמשך.)
optimizeWaypoints
(אופציונלי) מציין ייתכן שהמסלול שצוין ב-waypoints
יהיה לבצע אופטימיזציה על ידי סידור מחדש של ציוני הדרך בסדר יעיל יותר. אםtrue
, שירות 'מסלול הגעה' יחזיר אתwaypoints
שהוזמן מחדש בשדהwaypoint_order
.(למידע נוסף מידע נוסף ראו שימוש בנקודות דרך במסלולים below.)provideRouteAlternatives
(אופציונלי) כשהיא מוגדרת אלtrue
מציין ששירות 'מסלולים' עשוי לספק יותר מנתיב אחד חלופי בתשובה. שימו לב מתן מסלולים חלופיים עשוי להאריך את זמן התגובה השרת. האפשרות הזו זמינה רק לבקשות ללא ציוני דרך מתווכים.avoidFerries
(אופציונלי) כשמגדירים את הערך הואtrue
מציין שהמסלולים המחושבים להימנע ממעבורות, אם אפשר.avoidHighways
(אופציונלי) כשמגדירים את הערך הואtrue
מציין שהמסלולים המחושבים להימנע מכבישים מהירים, אם ניתן.avoidTolls
(אופציונלי) כשמגדירים את הערך הואtrue
מציין שהמסלולים המחושבים להימנע מכבישי אגרה, אם ניתן.region
(אופציונלי) מציין את הערך קוד אזור, מצוין כ-ccTLD ("דומיין ברמה עליונה") בשני תווים. (למידע נוסף, ראו הטיה לפי אזור למטה).
הנה DirectionsRequest
לדוגמה:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', waypoints: [ { location: 'Joplin, MO', stopover: false },{ location: 'Oklahoma City, OK', stopover: true }], provideRouteAlternatives: false, travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(/* now, or future date */), trafficModel: 'pessimistic' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
מצבי נסיעה
כאשר מחשבים מסלול, צריך לציין באיזה אמצעי תחבורה להשתמש. הנסיעות הבאות המצבים הנתמכים בשלב הזה:
DRIVING
(ברירת מחדל) מציין מסלול נסיעה רגיל באמצעות רשת הדרכים.BICYCLING
מבקש/ת רכיבה על אופניים מסלולים דרך שבילי אופניים רחובות מועדפים.TRANSIT
מבקש מסלול דרך מסלולים של תחבורה ציבורית.WALKING
מבקש מסלול הליכה דרך שבילים להולכי רגל מדרכות.
עיינו בפרטי הכיסוי של הפלטפורמה של מפות Google
כדי לקבוע באיזו מידה המדינה תומכת במסלולים. אם מבקשים
את ההוראות לאזור שבו סוג הכיוון אינו זמין
התשובה תחזיר את
DirectionsStatus
="ZERO_RESULTS
".
הערה: ייתכן שמסלול ההליכה לא יהיה ברור
בשבילים להולכי רגל, לכן מסלולי הליכה יחזירו אזהרות
DirectionsResult
. צריך תמיד להציג את האזהרות האלה
משתמש. אם לא משתמשים בברירת המחדל של DirectionsRenderer
,
אחראים לוודא שהאזהרות מוצגות.
אפשרויות תחבורה ציבורית
האפשרויות הזמינות לבקשת מסלול משתנות בהתאם לאמצעי הנסיעה.
כשמבקשים מסלול לתחבורה ציבורית, avoidHighways
,
avoidTolls
, waypoints[]
וגם
המערכת תתעלם מ-optimizeWaypoints
אפשרויות. אפשר לציין
אפשרויות מסלול ספציפיות לתחבורה ציבורית דרך
TransitOptions
בליטרל של אובייקט.
מסלולי תחבורה ציבורית הם תלויי זמן. המסלול יוחזר רק עבור פעמים בעתיד.
הליטרל של האובייקט TransitOptions
מכיל את הדברים הבאים
שדות:
{ arrivalTime: Date, departureTime: Date, modes[]: TransitMode, routingPreference: TransitRoutePreference }
הסבר על השדות האלה:
arrivalTime
(אופציונלי) מציין זמן ההגעה כאובייקטDate
. אם זמן ההגעה הוא שצוין, המערכת תתעלם משעת היציאה.departureTime
(אופציונלי) מציין שעת היציאה כאובייקטDate
. המערכת תתעלם מ-departureTime
אםarrivalTime
מצוינת. ברירת המחדל תהיה עכשיו (כלומר, השעה הנוכחית) אם לא קיים ערך מוגדר עבורdepartureTime
אוarrivalTime
.modes[]
(אופציונלי) הוא מערך שמכיל ערך אחד או עוד מילולית של אובייקטיםTransitMode
. השדה הזה יכול להכיל רק נכללות אם הבקשה כוללת מפתח API. בכלTransitMode
מציין אמצעי תחבורה מועדף. מותר להזין את הערכים הבאים:BUS
מציין שהמסלול המחושב צריך להעדיף נסיעות באוטובוס.RAIL
מציין שהמסלול שחושב צריך להעדיף נסיעות ברכבת, חשמלית, רכבת קלה הרכבת התחתית.SUBWAY
מציין שהמסלול שחושב צריך להעדיף נסיעה ברכבת תחתית.TRAIN
מציין שהמסלול המחושב צריך להעדיף נסיעה ברכבת.TRAM
מציין המסלול שחושב צריך לכלול נסיעות בחשמלית וברכבת קלה.
routingPreference
(אופציונלי) מציין העדפות עבור מסלולי תחבורה ציבורית. בעזרת האפשרות הזו תוכלו להטות את האפשרויות שמוחזרות, במקום לקבל את המסלול הטוב ביותר שמוגדר כברירת מחדל על ידי ה-API. אפשר לציין את השדה הזה רק אם הבקשה כוללת מפתח API. מותר להזין את הערכים הבאים:FEWER_TRANSFERS
מציין שהמסלול המחושב צריך להעדיף מספר מוגבל של העברות.LESS_WALKING
מציין שהמסלול המחושב צריך להעדיף כמויות מוגבלות של הליכה.
למטה מוצגת דוגמה של DirectionsRequest
בתחבורה ציבורית:
{ origin: 'Hoboken NJ', destination: 'Carroll Gardens, Brooklyn', travelMode: 'TRANSIT', transitOptions: { departureTime: new Date(1337675679473), modes: ['BUS'], routingPreference: 'FEWER_TRANSFERS' }, unitSystem: google.maps.UnitSystem.IMPERIAL }
אפשרויות נהיגה
ניתן להגדיר אפשרויות ניתוב למסלולי נסיעה דרך
DrivingOptions
לאובייקט.
האובייקט DrivingOptions
מכיל את השדות הבאים:
{ departureTime: Date, trafficModel: TrafficModel }
הסבר על השדות האלה:
departureTime
(חובה עבור ליטרל האובייקטdrivingOptions
כדי להיות חוקי) מציין את את שעת היציאה הרצויה כאובייקטDate
. הערך חייב להיות מוגדר לשעה הנוכחית או לזמן כלשהו בעתיד. זה לא יכול להיות ב בעבר. (ה-API ממיר את כל התאריכים ל-UTC כדי להבטיח טיפול עקבי באזורי זמן שונים.) לקוחות של תוכנית הפרימיום של הפלטפורמה של מפות Google, אם כוללים אתdepartureTime
בבקשה, ה-API מחזיר המסלול הטוב ביותר בהתחשב במצב התנועה הצפוי באותו זמן, וגם כולל את משך הזמן החזוי בתנועה (duration_in_traffic
) בתשובה. אם לא תציינו שעת יציאה (כלומר, אם הבקשה לא כוללתdrivingOptions
), המסלול שהוחזר מסלול טוב בדרך כלל, מבלי להביא בחשבון את מצב התנועה.trafficModel
(אופציונלי) מציין את ההנחות הבאות לחישוב הזמן בתנועה. ההגדרה הזו משפיעה על הערך שהוחזר בשדהduration_in_traffic
בתשובה, שבו מוצג משך הזמן החזוי בתנועה על סמך ממוצעים היסטוריים. ברירת המחדל היאbestguess
. מותר להזין את הערכים הבאים:bestguess
(ברירת המחדל) מצייןduration_in_traffic
צריך להיות אומדן הנסיעה הטוב ביותר בהינתן מה שידוע לגבי מצב התנועה ההיסטורי וגם תנועה בזמן אמת. התנועה בזמן אמת הופכת לחשובה יותר ככלdepartureTime
היום.pessimistic
מציין צריך להאריך אתduration_in_traffic
בנסיעה בפועל ברוב הימים, אבל בימים מסוימים עם תנועה רעה במיוחד תנאים מסוימים עלולים לחרוג מהערך הזה.optimistic
מציין הערך שלduration_in_traffic
צריך להיות קצר יותר מהערך בפועל ברוב הימים, אם כי מדי פעם, בימים מצב התנועה עשוי להיות מהיר יותר מהערך הזה.
בהמשך מוצגת דוגמה DirectionsRequest
למסלול נסיעה:
{ origin: 'Chicago, IL', destination: 'Los Angeles, CA', travelMode: 'DRIVING', drivingOptions: { departureTime: new Date(Date.now() + N), // for the time N milliseconds from now. trafficModel: 'optimistic' } }
מערכות יחידה
כברירת מחדל, מסלולים מחושבים ומוצגים באמצעות
מערכת היחידה של המדינה או האזור של המקור.
(הערה: מקורות מבוטאים באמצעות
ברירת מחדל של קואורדינטות של קו רוחב/אורך ולא כתובות
ליחידות מטריות). לדוגמה, מסלול מ-
"שיקגו, אילינוי" אל "טורונטו, אונטריו" יציג תוצאות במיילים,
המסלול ההפוך יציג תוצאות בקילומטרים. שלך
לשנות את מערכת היחידות הזו על ידי הגדרה מפורשת של
בקשה באמצעות אחד מהפרמטרים הבאים של UnitSystem
ערכים:
UnitSystem.METRIC
מציין במערכת המטרית. המרחקים מוצגים לפי קילומטרים.UnitSystem.IMPERIAL
מציין את השימוש בשיטה האימפריאלית (באנגלית). המרחקים מוצגים לפי מיילים.
הערה: רק ההגדרה הזו של מערכת היחידה משפיעה על הטקסט שמוצג למשתמש. גם התוצאה של המסלול מכיל ערכים של מרחק, שלא מוצגים למשתמש, במטרים.
הטייה אזורית למסלולים
שירות המסלולים של Google Maps API מחזיר תוצאות של כתובות שהושפעו
לפי הדומיין (אזור או מדינה) שממנו טענתם את קוד ה-JavaScript
אתחול. (רוב המשתמשים טוענים את https://maps.googleapis.com/
פעולה זו מגדירה דומיין מרומז לארצות הברית.) אם תטען את
אתחול מדומיין נתמך אחר, יתקבלו תוצאות
הושפעו מהדומיין הזה. לדוגמה, חיפושים של "חיפה" מאי
מחזירים תוצאות שונות מאפליקציות שנטענים
https://maps.googleapis.com/
(ארצות הברית)
טוען את http://maps.google.es/
(ספרד).
תוכל גם להגדיר את שירות 'מסלול הגעה' כדי להחזיר תוצאות חיפוש מוטות
אזור מסוים באמצעות הפרמטר region
. הפרמטר הזה
מקבל קוד אזור, המוגדר כ-Unicode בן שני תווים (לא מספרי)
תג משנה של אזור. ברוב המקרים, התגים האלה ממופים ישירות אל ccTLD ("ברמה העליונה"
דומיין) של שני תווים, כמו 'uk' ב-'co.uk' למשל. בחלק מהמקרים
במקרים מסוימים, התג region
תומך גם בקודי ISO-3166-1,
לפעמים שונים מערכי ccTLD, למשל, GB עבור 'בריטניה').
כשמשתמשים בפרמטר region
:
- יש לציין רק מדינה אחת או אזור אחד. המערכת מתעלמת מכמה ערכים. עלול להוביל לכך שהבקשה נכשלה.
- אפשר להשתמש רק בתגי משנה של אזור בני שני תווים (בפורמט Unicode CLDR). כל השאר יובילו לשגיאות.
הטיה לפי אזורים נתמכת רק עבור המדינות והאזורים שתומכים לקבלת מסלול. בודקים את פרטי הכיסוי בפלטפורמה של מפות Google כדי לראות את הכיסוי הבינלאומי של Directions API
הצגת המסלול
שליחת בקשה לקבלת מסלול אל
DirectionsService
עם השיטה route()
מחייבת ביצוע של קריאה חוזרת (callback) שמופעל לאחר השלמת
בקשת שירות. הקריאה החוזרת (callback) הזו תחזיר
DirectionsResult
וגם DirectionsStatus
בתשובה.
הסטטוס של שאילתת המסלול
הפונקציה DirectionsStatus
עשויה להחזיר את הערכים הבאים:
OK
מציין שהתשובה מכילהDirectionsResult
תקין.NOT_FOUND
מציין לפחות אחד מהערכים מיקומים שצוינו במקור, ביעד או ביעד של הבקשה לא ניתן לבצע קידוד גיאוגרפי של נקודות הדרך.ZERO_RESULTS
מציין שלא נמצא מסלול בין המוצא ליעד.MAX_WAYPOINTS_EXCEEDED
מציין גם את זה סופקו הרבה שדות מסוגDirectionsWaypoint
בDirectionsRequest
. אפשר לעיין בקטע שלמטה בנושא מגבלות של נקודות דרך.MAX_ROUTE_LENGTH_EXCEEDED
מציין את המסלול המבוקש ארוך מדי ואי אפשר לעבד אותו. השגיאה הזו מתקבלת כשהן מורכבות יותר הוא מוחזר המסלול. כדאי לנסות לצמצם את מספר ציוני הדרך, הפניות או הוראות.INVALID_REQUEST
מציין שסיפקת,DirectionsRequest
, לא היה חוקי. הבעיה הנפוצה ביותר הסיבות לקוד השגיאה הזה הן בקשות שחסר בהן רכיב נקודת מוצא או יעד, או בקשת תחבורה ציבורית שכוללת ציוני דרך.OVER_QUERY_LIMIT
מציין שדף האינטרנט נשלחו יותר מדי בקשות בפרק הזמן המותר.REQUEST_DENIED
מציין שדף האינטרנט אין הרשאה להשתמש בשירות המסלול.UNKNOWN_ERROR
מציין בקשה לקבלת מסלול לא ניתן לעבד בגלל שגיאה בחיבור לשרת. הבקשה עשויה להצליח אם תנסה שוב.
עליך לוודא ששאילתת המסלול החזירה ערך חוקי תוצאות על ידי בדיקת הערך הזה לפני עיבוד התוצאה.
הצגת התוצאה של מסלול
השדה DirectionsResult
מכיל את התוצאה של
שאילתה לקבלת מסלול, שתוכלו לטפל בה בעצמכם או להעביר
לאובייקט DirectionsRenderer
, שיכול
לטפל אוטומטית בהצגת התוצאה במפה.
כדי להציג DirectionsResult
באמצעות
DirectionsRenderer
, עליך לבצע את
הבאים:
- יוצרים אובייקט
DirectionsRenderer
. - קריאה אל
setMap()
בכלי לרינדור כדי לבצע את החיבור אותו למפה שהועברה. - קוראים לפונקציה
setDirections()
במעבד, להעביר אליו אתDirectionsResult
כמו שצוין למעלה. מכיוון שהכלי לרינדור הואMVCObject
, הוא יזהה באופן אוטומטי שינויים במאפיינים ולעדכן את המפה לאחר שהמסלול המשויך אליה השתנה.
הדוגמה הבאה מחשבת מסלולים בין
שני מיקומים בכביש 66, שבהם נקודת המוצא והיעד
מוגדרים לפי הערכים "start"
ו-"end"
הנתונים
ברשימות הנפתחות. DirectionsRenderer
משמש לתצוגה של הקו הפוליגוני בין
ואת המיקום של הסמנים במקור,
היעד וכל ציוני דרך, אם רלוונטי.
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'DRIVING' }; directionsService.route(request, function(result, status) { if (status == 'OK') { directionsRenderer.setDirections(result); } }); }
בגוף ה-HTML:
<div> <strong>Start: </strong> <select id="start" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="chicago, il">Chicago</option> <option value="st louis, mo">St Louis</option> <option value="joplin, mo">Joplin, MO</option> <option value="oklahoma city, ok">Oklahoma City</option> <option value="amarillo, tx">Amarillo</option> <option value="gallup, nm">Gallup, NM</option> <option value="flagstaff, az">Flagstaff, AZ</option> <option value="winona, az">Winona</option> <option value="kingman, az">Kingman</option> <option value="barstow, ca">Barstow</option> <option value="san bernardino, ca">San Bernardino</option> <option value="los angeles, ca">Los Angeles</option> </select> </div>
הדוגמה הבאה מציגה מסלול באמצעות אמצעי ההגעה בין הייט-אשבורי לחוף אושן ב: סן פרנסיסקו, קליפורניה:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var haight = new google.maps.LatLng(37.7699298, -122.4469157); var oceanBeach = new google.maps.LatLng(37.7683909618184, -122.51089453697205); var mapOptions = { zoom: 14, center: haight } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); } function calcRoute() { var selectedMode = document.getElementById('mode').value; var request = { origin: haight, destination: oceanBeach, // Note that JavaScript allows us to access the constant // using square brackets and a string value as its // "property." travelMode: google.maps.TravelMode[selectedMode] }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
בגוף ה-HTML:
<div> <strong>Mode of Travel: </strong> <select id="mode" onchange="calcRoute();"> <option value="DRIVING">Driving</option> <option value="WALKING">Walking</option> <option value="BICYCLING">Bicycling</option> <option value="TRANSIT">Transit</option> </select> </div>
DirectionsRenderer
לא רק מטפל בתצוגה
של הקו הפוליגוני ושל כל הסמנים שמשויכים אליו, אבל הוא יכול להתמודד גם עם
הצגת המסלול כסדרת שלבים. לבצע
לכן, התקשר אל setPanel()
במכשיר
DirectionsRenderer
, מעבירים אותה
<div>
שבו יוצג המידע הזה.
כך תוכלו גם לוודא שאתם מציגים את זכויות היוצרים המתאימות
וכל אזהרות שעשויות להיות משויכות אל
תוצאה אחת.
הנחיות טקסט יסופקו באמצעות
הגדרת השפה המועדפת, או השפה שצוינה
טוען את ה-JavaScript של ה-API באמצעות הפרמטר language
הפרמטר. (מידע נוסף זמין במאמר הבא:
התאמה לשוק המקומי.) במקרה של מסלול תחבורה ציבורית, השעה תהיה
יוצג באזור הזמן של תחנת התחבורה הציבורית.
הדוגמה הבאה זהה לזו שמוצגת למעלה,
אבל כולל חלונית <div>
שבה
הצגת מסלול:
function initMap() { var directionsService = new google.maps.DirectionsService(); var directionsRenderer = new google.maps.DirectionsRenderer(); var chicago = new google.maps.LatLng(41.850033, -87.6500523); var mapOptions = { zoom:7, center: chicago } var map = new google.maps.Map(document.getElementById('map'), mapOptions); directionsRenderer.setMap(map); directionsRenderer.setPanel(document.getElementById('directionsPanel')); } function calcRoute() { var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin:start, destination:end, travelMode: 'DRIVING' }; directionsService.route(request, function(response, status) { if (status == 'OK') { directionsRenderer.setDirections(response); } }); }
בגוף ה-HTML:
<div id="map" style="float:left;width:70%;height:100%"></div> <div id="directionsPanel" style="float:right;width:30%;height:100%"></div>
האובייקט Directions result
כששולחים בקשה למסלול
DirectionsService
, קיבלת תשובה שכוללת
קוד סטטוס ותוצאה, כמו DirectionsResult
לאובייקט. DirectionsResult
הוא אובייקט מילולי
עם השדות הבאים:
geocoded_waypoints[]
מכיל מערך שלDirectionsGeocodedWaypoint
אובייקטים, שכל אחד מהם מכיל פרטים על הקידוד הגיאוגרפי של נקודת המוצא, היעד וציוני הדרך.routes[]
מכיל מערך שלDirectionsRoute
אובייקטים. כל מסלול מציין דרך להגיע מהמוצא ליעד שצויןDirectionsRequest
באופן כללי, יש רק מסלול אחד מוחזר עבור כל בקשה נתונה, אלא אם הבקשה השדהprovideRouteAlternatives
מוגדר ל-true
, שבמסגרתו ניתן להחזיר מספר מסלולים.
הערה: הנכס via_waypoint
הוצא משימוש
במסלולים חלופיים. גרסה 3.27 היא הגרסה האחרונה של ה-API שמוסיפה תוספות דרך ציוני דרך
במסלולים חלופיים. בגרסאות 3.28 ואילך של ה-API, אפשר להמשיך בהטמעה
מסלולים שניתנים לגרירה באמצעות שירות 'מסלול' על ידי השבתת הגרירה של נתיבים חלופיים.
יש לאפשר גרירה רק של הנתיב הראשי. המשתמשים יכולים לגרור את המסלול הראשי עד שהוא יתאים
מסלול חלופי.
מסלולים עם קואורדינטות עם קואורדינטות
DirectionsGeocodedWaypoint
מכיל פרטים על הקידוד הגיאוגרפי של
נקודת המוצא, היעד ונקודות הדרך.
DirectionsGeocodedWaypoint
הוא מילולי של אובייקט עם
בשדות הבאים:
geocoder_status
מציין את קוד הסטטוס שנוצר מפעולת הקידוד הגיאוגרפי. השדה הזה יכול להכיל את הערכים הבאים."OK"
מציין שלא התרחשו שגיאות; הכתובת שנותחה בהצלחה לפחות קואורדינטות אחד הוחזרו."ZERO_RESULTS"
מציין שהקידוד הגיאוגרפי הצליח אבל לא החזיר תוצאות. מצב כזה יכול לקרות אם הועבר באמצעות הקואורדינטותaddress
שלא קיימים.
-
partial_match
מציין שהקואורדינטות לא חזרו התאמה מדויקת לבקשה המקורית, למרות שהיא הצליחה להתאים חלק הכתובת המבוקשת. מומלץ לבדוק את הבקשה המקורית לתיקון שגיאות כתיב ו/או כתובת חלקית.התאמות חלקיות מתרחשות בדרך כלל עבור כתובות של רחובות שאינן קיימות הרשות המוניציפאלית שציינתם בבקשה. התאמות חלקיות עשויות להיות גם שמוחזר כשהבקשה תואמת לשני מיקומים או יותר באותו רשות מוניציפאלית. לדוגמה, "הרצל, ישראל" יחזיר התאמה חלקית לשניהם הנרי סטריט ורחוב הנרייטה. שימו לב שאם בקשה כוללת רכיב הכתובת שגוי, שירות הקידוד הגיאוגרפי עשוי להציע address. גם הצעות שמופעלות באופן הזה יסומנו כהצעות חלקיות. להתאים לבחירה.
place_id
הוא מזהה ייחודי של מקום, ואפשר להשתמש בו עם ממשקי API אחרים של Google. לדוגמה, אפשר להשתמש ב-place_id
עם מקומות Google API לקבלת פרטים על עסק מקומי, כמו מספר טלפון שעות פתיחה, ביקורות של משתמשים ועוד. לצפייה סקירה כללית על מזהה המקום.types[]
הוא מערך שמציין את הסוג של הוחזרה תוצאה. מערך זה מכיל קבוצה של אפס תגים או יותר המזהים סוג התכונה שמוחזר בתוצאה. לדוגמה, קואורדינטות של "פרדס חנה" מחזירה 'locality' שמציין ש-"שיקגו" היא עיר, מחזירה גם את המילה 'political' שמציין שזו ישות פוליטית.
מסלולי מסלול
הערה: לאובייקט DirectionsTrip
מהדור הקודם יש
השם השתנה ל-DirectionsRoute
. שימו לב שמסלול
מתייחס לכל המסע מתחילתו ועד סופו, במקום
קטע מטיול של הורים.
DirectionsRoute
מכילה תוצאה אחת מ-
המוצא והיעד שצוינו. מסלול זה עשוי לכלול
רגל אחת או יותר (מסוג DirectionsLeg
)
בהתאם לציון ציוני הדרך. כמו כן,
מכיל גם מידע על זכויות יוצרים ואזהרה,
יוצגו למשתמש בנוסף לפרטי הניתוב.
DirectionsRoute
הוא מילולי של אובייקט עם
בשדות הבאים:
legs[]
מכיל מערך שלDirectionsLeg
אובייקטים, שכל אחד מהם מכיל מידע על קטע במסלול, משני מיקומים בתוך המסלול הנתון. תוצג רגל נפרדת לכל משבצת ציון הדרך או היעד שצוינו. (מסלול ללא ציוני דרך יכלולDirectionsLeg
אחד בדיוק.) כל רגל מורכבת מתוך סדרה שלDirectionStep
.waypoint_order
מכיל מערך שמציין את הסדר של ציוני הדרך מסלול. המערך הזה עשוי להכיל סדר שונה אםDirectionsRequest
עברoptimizeWaypoints: true
.overview_path
מכיל מערך של ערכיLatLng
שמייצגים ערך משוער (מוחלק) של המסלול שנוצר.overview_polyline
מכילpoints
יחיד שמכיל קובץ מקודד ייצוג של קו פוליגוני של המסלול. הקו הפוליגוני הזה הוא נתיב משוער (מוחלק) של ההנחיות שהתקבלו.bounds
מכילLatLngBounds
שמציין את הגבולות של הקו הפוליגוני לאורך המסלול הנתון.copyrights
מכיל את הטקסט זכויות יוצרים להיות שמוצגים עבור מסלול זה.warnings[]
מכיל מערך של אזהרות שיוצגו בעת הצגת המסלול. אם לא להשתמש באובייקטDirectionsRenderer
שסופק, צריך לטפל באזהרות האלה ולהציג אותן בעצמכם.fare
מכיל את מחיר הכרטיס הכולל (כלומר, המחיר הכולל) עלויות כרטיסים) במסלול הזה. הנכס הזה מוחזר רק לנסיעה בתחבורה ציבורית בקשות ורק למסלולים שבהם מידע המחיר זמין לכולם רגליים בתחבורה ציבורית. המידע כולל:currency
: מטבע לפי תקן ISO 4217 שמציין את המטבע שבו מצוין הסכום.value
: סכום המחיר הכולל, במטבע שצוין למעלה.
רגלי המסלול
הערה: לאובייקט DirectionsRoute
מהדור הקודם יש
השם השתנה ל-DirectionsLeg
.
DirectionsLeg
מגדיר רגל אחת של
הנסיעה מהמוצא אל היעד במסלול המחושב.
במסלולים שאין בהם ציוני דרך, המסלול יכלול
"רגל", אבל לגבי נתיבים שמגדירים נקודת ציון אחת או יותר,
המסלול יכלול רגל אחת או יותר, שתואם ל-
שלבים ספציפיים בתהליך.
DirectionsLeg
הוא ליטרל של אובייקט עם
השדות הבאים:
steps[]
מכיל מערך שלDirectionsStep
אובייקטים שמציינים מידע על כל שלב נפרד בשלבי המסע.distance
מציין את המרחק הכולל שמכוסה ברגל הזאת, כאובייקטDistance
של בצורה הבאה:value
מציין את המרחק במטריםtext
מכיל ייצוג במחרוזת של המרחק, שמוצג כברירת מחדל ביחידות שבו נעשה שימוש במקור. (לדוגמה, מיילים ישמשו כל מקור בתוך ארצות הברית.) אפשר לשנות את ההגדרה הזו על ידי הגדרה ספציפית שלUnitSystem
בשאילתה המקורית. לתשומת ליבכם: בלי קשר למערכת היחידות שבה אתם משתמשים, השדהdistance.value
תמיד מכיל ערך במטרים.
יכול להיות ששדות אלה לא יוגדרו אם המרחק לא ידוע.
duration
מציין את משך הזמן הכולל של את הרגל, כאובייקטDuration
של בצורה הבאה:value
מציין את משך הזמן ב- שניות.text
מכיל ייצוג במחרוזת של משך הזמן.
יכול להיות ששדות אלה לא יוגדרו אם משך הזמן לא ידוע.
duration_in_traffic
מציין את משך הזמן הכולל של התהליך רגל, תוך התייחסות למצב התנועה הנוכחי. הפונקציהduration_in_traffic
מוחזרת רק אם כל התנאים הבאים נכון:- הבקשה לא כוללת ציוני דרך לעצירות ביניים. כלומר, בחלק מהמקרים
כוללים ציוני דרך שבהם
stopover
הואtrue
. - הבקשה מתייחסת באופן ספציפי למסלול נסיעה -
הערך של
mode
מוגדר ל-driving
. departureTime
נכלל כחלק מ השדהdrivingOptions
בבקשה.- יש מצב תנועה במסלול המבוקש.
השדה
duration_in_traffic
מכיל את השדות הבאים:value
מציין את משך הזמן בשניות.text
מכיל ייצוג קריא לאנשים של משך הזמן.
- הבקשה לא כוללת ציוני דרך לעצירות ביניים. כלומר, בחלק מהמקרים
כוללים ציוני דרך שבהם
arrival_time
מכיל את זמן ההגעה המשוער לקטע הזה. הנכס הזה מוחזר רק למסלול לתחבורה ציבורית. התוצאה מוחזרת כאובייקטTime
עם שלושה מאפיינים:value
השעה שצוינה כ-JavaScript אובייקטDate
.text
השעה שצוינה כמחרוזת. השעה היא תוצג באזור הזמן של תחנת התחבורה הציבורית.time_zone
מכיל את אזור הזמן של התחנה הזו. הוא השם של אזור הזמן כפי שמוגדר אזור זמן IANA מסד נתונים, למשל 'America/New_York'.
departure_time
מכיל את זמן היציאה המשוער עבור הרגל הזה, מוגדר כאובייקטTime
.departure_time
זמין רק למסלול לתחבורה ציבורית.start_location
מכיל את הערךLatLng
ממקור הרגל הזה. כי שירות האינטרנט Directions מחשב מסלול בין מיקומים באמצעות אפשרות התחבורה הקרובה ביותר (בדרך כלל כביש) ב- נקודות ההתחלה והסיום,start_location
יכול להיות שונה מהמקור שצוין של הרגל הזו, אם, לדוגמה, הדרך לא נמצאת ליד נקודת המוצא.end_location
מכיל אתLatLng
של היעד של הרגל הזה. כיDirectionsService
מחשב מסלול בין מיקומים באמצעות אפשרות התחבורה הקרובה ביותר (בדרך כלל כביש) נקודות התחלה וסיום,end_location
יכול להיות שונה מהיעד שצוין של הקטע, אם לדוגמה, הכביש לא קרוב ליעד.start_address
מכיל את הכתובת שאנשים יכולים לקרוא. (בדרך כלל כתובת) של תחילת הקטע.
יש לקרוא את התוכן הזה כפי שהוא. לא לנתח באופן פרוגרמטי את של הכתובת בפורמט הנכון.end_address
מכיל את הכתובת שאנשים יכולים לקרוא. (בדרך כלל כתובת) בקצה של הקטע הזה.
יש לקרוא את התוכן הזה כפי שהוא. לא לנתח באופן פרוגרמטי את של הכתובת בפורמט הנכון.
שלבים במסלול
DirectionsStep
הוא היחידה האטומית ביותר של
של המסלול, שמכיל שלב אחד שמתאר שלב ספציפי,
להוראה במסע. לדוגמה "פנה שמאלה ב-W. 4th St. " השלב לא
מתאר רק את ההוראה, אבל כולל גם את המרחק ואת משך הזמן
מידע שקשור לאופן שבו השלב הזה קשור לשלב הבא.
לדוגמה, שלב שמצוין כ-"Merge into I-80 West" (מיזוג למערב ה-I-80) עשוי להכיל
משך הזמן של '37 מיילים' ו-"40 דקות", שמציין שהשלב הבא
נמצא במרחק 40 דקות הליכה מהשלב הזה.
בעת שימוש בשירות 'מסלולים' כדי לחפש מסלול לתחבורה ציבורית,
מערך הצעדים יכלול נתונים נוספים של Transit
מידע ספציפי בצורת אובייקט transit
. אם המיקום
המסלול כולל כמה אמצעי תחבורה, מסלול מפורט
יסופק להליכה או להליכה במערך steps[]
.
לדוגמה, שלב הליכה יכלול מסלול מתחילתו ועד סופו
מיקומים: "Walk to Innes Ave & Fitch St". השלב הזה יכלול
מסלול הליכה מפורט למסלול הזה בsteps[]
מערך, כמו: 'Head North-west', 'פנה שמאלה אל ארליוס ווקר', וגם
"פנה שמאלה אל Innes Ave".
DirectionsStep
הוא ליטרל של אובייקט עם
השדות הבאים:
instructions
מכיל הוראות לשלב הזה בתוך מחרוזת טקסט.distance
מכיל את המרחק שמרחק זה מכסה עד לשלב הבא, כאובייקטDistance
. (לעיון בתיאור ב-DirectionsLeg
למעלה). יכול להיות שהשדה הזה לא מוגדר אם המרחק לא ידוע.duration
מכיל הערכה של הזמן הנדרש כדי לבצע את השלב עד לשלב הבא, אובייקטDuration
. (ניתן לעיין בתיאור בDirectionsLeg
above.) יכול להיות שהשדה הזה לא מוגדר אם משך הזמן לא ידוע.- הכתובת
start_location
מכילה את הקוד הגאוגרפיLatLng
מנקודת ההתחלה של השלב הזה. end_location
מכילLatLng
של הוא נקודת הסיום של השלב הזה.polyline
מכילpoints
יחיד שמכיל קובץ מקודד ייצוג קו פוליגוני של השלב. הקו הפוליגוני הזה הוא נתיב משוער (מוחלק) של השלב.steps[]
בליטרל של אובייקטDirectionsStep
כולל מסלול מפורט להליכה או למסלול בתחבורה ציבורית לקבלת מסלול. שלבים משניים זמינים רק למסלול לתחבורה ציבורית.travel_mode
מכילTravelMode
שנעשה בו שימוש ב- השלב הזה. מסלול תחבורה ציבורית עשוי לכלול שילוב של הליכה ו מסלול לתחבורה ציבורית.path
מכיל מערך שלLatLngs
שמתאר במהלך השלב הזה.transit
מכיל מידע ספציפי לתחבורה ציבורית, כמו שעות ההגעה והיציאה, והשם של קו התחבורה הציבורית.
מידע ספציפי על תחבורה ציבורית
מסלול לתחבורה ציבורית מחזיר מידע נוסף שאינו רלוונטי עבור
אמצעי תחבורה אחרים. הנכסים הנוספים האלה נחשפים
באמצעות האובייקט TransitDetails
, מוחזר כמאפיין של
DirectionsStep
. מהאובייקט TransitDetails
אפשר לגשת למידע נוסף עבור TransitStop
,
TransitLine
, TransitAgency
וגם
VehicleType
אובייקטים כפי שמתואר בהמשך.
פרטי תחבורה ציבורית
האובייקט TransitDetails
חושף את התוכן הבא
נכסים:
arrival_stop
מכילTransitStop
אובייקט שמייצג את תחנת ההגעה/העצירה עם הכיתוב הבא: נכסים:name
שם התחנה של התחבורה הציבורית. למשל "Union Square".location
המיקום של התחנה/התחבורה הציבורית, מיוצגת בתורLatLng
.
departure_stop
מכילTransitStop
אובייקט שמייצג את תחנת היציאה/העצירה.arrival_time
מכיל את זמן ההגעה, המוגדר בתור אובייקטTime
עם שלושה מאפיינים:value
השעה שצוינה כ-JavaScript אובייקטDate
.text
השעה שצוינה כמחרוזת. השעה היא תוצג באזור הזמן של תחנת התחבורה הציבורית.time_zone
מכיל את אזור הזמן של התחנה הזו. הוא השם של אזור הזמן כפי שמוגדר אזור זמן IANA מסד נתונים, למשל 'America/New_York'.
departure_time
מכיל את זמן היציאה, המוגדר בתור אובייקטTime
.headsign
מציין את כיוון הנסיעה הקו הזה, כפי שהוא מסומן על הרכב או בתחנת היציאה. בדרך כלל מדובר בתחנה של תחנת העצירה.headway
אם הוא זמין, הוא מציין את המספר הצפוי של שניות בין יציאה מאותה תחנה באותו זמן. עבור לדוגמה, עם ערךheadway
של 600, הייתם צריכים לצפות עוד כמה דקות אם אתם אמורים לפספס את האוטובוס.line
מכילTransitLine
ייצוג מילולי של אובייקט שמכיל מידע על קו התחבורה הציבורית השלב הזה. השדהTransitLine
מספק את השם והאופרטור של את השורה, יחד עם מאפיינים אחרים שמתואריםTransitLine
מסמכי עזר.num_stops
מכיל את מספר העצירות בשלב הזה. כולל את תחנת ההגעה, אבל לא את תחנת היציאה. לדוגמה, אם המסלול כולל יציאה מעצירה א', מעבר דרך עצירות ב' C, והגעה לתחנה ד',num_stops
תחזיר 3.
קו תחבורה ציבורית
האובייקט TransitLine
חושף את המאפיינים הבאים:
name
מכיל את השם המלא של קו התחבורה הציבורית הזה. לדוגמה: " 7 Avenue Express" או "סנט קרוסטאון".short_name
מכיל את השם המקוצר של התחבורה הציבורית הזו השורה הזו. בדרך כלל זה יהיה מספר שורה, למשל 2. או M14.agencies
הוא מערך שמכיל ערך אחד אובייקטTransitAgency
. האובייקטTransitAgency
מספק מידע על המפעיל של הקו הזה, כולל המאפיינים הבאים:name
מכיל את השם של חברת התחבורה הציבורית.phone
מכיל את מספר הטלפון של התחבורה הציבורית שלך.url
מכיל את כתובת ה-URL של חברת התחבורה הציבורית.
הערה: אם מתבצע רינדור של מסלול התחבורה הציבורית באופן ידני במקום להשתמש באובייקט
DirectionsRenderer
, צריך להציג את השמות וכתובות ה-URL של חברות התחבורה הציבורית שמטפלות בנסיעה. תוצאות.url
מכיל כתובת URL של קו התחבורה הציבורית הזה שסופקה על ידי חברת התחבורה הציבורית.icon
מכילה כתובת URL של הסמל שמשויך לשורה הזו. ברוב הערים יוצגו סמלים כלליים שמשתנים בהתאם לסוג הרכב. במידה מסוימת בקווי תחבורה ציבורית, כמו מערכת הרכבת התחתית של ניו יורק, יש סמלים ספציפיים השורה הזו.color
מכיל את הצבע שבו משתמשים בדרך כלל בשילוט הזה תחבורה ציבורית. הצבע יצוין כמחרוזת הקסדצימלית, למשל: #FF0033.text_color
מכיל את צבע הטקסט שנמצא בשימוש נפוץ עבור שילוט של הקו הזה. הצבע יצוין כמחרוזת הקסדצימלית.vehicle
מכיל אובייקטVehicle
ש כוללים את המאפיינים (properties) הבאים:name
מכיל את שם הרכב בקו הזה. למשל "Subway"type
מכיל את סוג כלי הרכב שבו נעשה שימוש בקו הזה. אפשר לקרוא במסמכי התיעוד בנושא סוג כלי רכב. את הרשימה המלאה של הערכים הנתמכים.icon
מכיל כתובת URL של הסמל שמשויך לרוב עם סוג כלי הרכב הזה.local_icon
מכיל את כתובת ה-URL של הסמל המשויך עם סוג כלי הרכב הזה, על סמך השילוט המקומי לתחבורה.
סוג הרכב
האובייקט VehicleType
חושף את התוכן הבא
נכסים:
ערך | הגדרה |
---|---|
VehicleType.RAIL |
רכבת. |
VehicleType.METRO_RAIL |
תחבורה ציבורית קלה. |
VehicleType.SUBWAY |
רכבת קלה תת-קרקעית. |
VehicleType.TRAM |
רכבת קלה מעל פני הקרקע. |
VehicleType.MONORAIL |
רכבת מונורייל. |
VehicleType.HEAVY_RAIL |
רכבת כבדה. |
VehicleType.COMMUTER_TRAIN |
רכבת עילית. |
VehicleType.HIGH_SPEED_TRAIN |
רכבת מהירה. |
VehicleType.BUS |
אוטובוס. |
VehicleType.INTERCITY_BUS |
אוטובוס בינעירוני. |
VehicleType.TROLLEYBUS |
טרוליבוס. |
VehicleType.SHARE_TAXI |
מונית שירות היא סוג של אוטובוס עם אפשרות לרדת ולבחור להעלות נוסעים בכל מקום במסלול. |
VehicleType.FERRY |
מעבורת. |
VehicleType.CABLE_CAR |
כלי רכב שמשתמש בכבל, בדרך כלל על הקרקע. כבל אווירי
מכוניות עשויות להיות מסוג VehicleType.GONDOLA_LIFT . |
VehicleType.GONDOLA_LIFT |
רכבל אווירי. |
VehicleType.FUNICULAR |
כלי רכב שמושך שיפוע תלול באמצעות כבל. פוניקולר מורכב בדרך כלל משתי מכוניות, וכל מכונית משמשת כמשקל נגד עבור השני. |
VehicleType.OTHER |
כל שאר כלי הרכב יחזירו סוג כזה. |
בדיקת תוצאות של מסלול נסיעה
רכיבי DirectionsResults
—
DirectionsRoute
, DirectionsLeg
DirectionsStep
ו-TransitDetails
— יכולים להיות
של הבדיקה וישמשו במהלך ניתוח תגובה למסלול.
חשוב: אם אתם מבצעים רינדור של תחבורה ציבורית
מסלול באופן ידני במקום להשתמש בDirectionsRenderer
עליך להציג את השמות וכתובות ה-URL של חברות התחבורה הציבורית.
שירות תוצאות הנסיעה.
הדוגמה הבאה מציגה מסלולי הליכה לתיירים
אטרקציות בניו יורק. אנחנו בודקים את המסלול
DirectionsStep
כדי להוסיף סמנים לכל שלב, וגם
לצרף מידע אל InfoWindow
עם הוראות
של השלב הזה.
הערה: מכיוון שאנחנו מחשבים מסלולי הליכה, אנחנו מציגים גם
אזהרות למשתמש בחלונית <div>
נפרדת.
var map; var directionsRenderer; var directionsService; var stepDisplay; var markerArray = []; function initMap() { // Instantiate a directions service. directionsService = new google.maps.DirectionsService(); // Create a map and center it on Manhattan. var manhattan = new google.maps.LatLng(40.7711329, -73.9741874); var mapOptions = { zoom: 13, center: manhattan } map = new google.maps.Map(document.getElementById('map'), mapOptions); // Create a renderer for directions and bind it to the map. var rendererOptions = { map: map } directionsRenderer = new google.maps.DirectionsRenderer(rendererOptions) // Instantiate an info window to hold step text. stepDisplay = new google.maps.InfoWindow(); } function calcRoute() { // First, clear out any existing markerArray // from previous calculations. for (i = 0; i < markerArray.length; i++) { markerArray[i].setMap(null); } // Retrieve the start and end locations and create // a DirectionsRequest using WALKING directions. var start = document.getElementById('start').value; var end = document.getElementById('end').value; var request = { origin: start, destination: end, travelMode: 'WALKING' }; // Route the directions and pass the response to a // function to create markers for each step. directionsService.route(request, function(response, status) { if (status == "OK") { var warnings = document.getElementById("warnings_panel"); warnings.innerHTML = "" + response.routes[0].warnings + ""; directionsRenderer.setDirections(response); showSteps(response); } }); } function showSteps(directionResult) { // For each step, place a marker, and add the text to the marker's // info window. Also attach the marker to an array so we // can keep track of it and remove it when calculating new // routes. var myRoute = directionResult.routes[0].legs[0]; for (var i = 0; i < myRoute.steps.length; i++) { var marker = new google.maps.Marker({ position: myRoute.steps[i].start_point, map: map }); attachInstructionText(marker, myRoute.steps[i].instructions); markerArray[i] = marker; } } function attachInstructionText(marker, text) { google.maps.event.addListener(marker, 'click', function() { stepDisplay.setContent(text); stepDisplay.open(map, marker); }); }
בגוף ה-HTML:
<div> <strong>Start: </strong> <select id="start"> <option value="penn station, new york, ny">Penn Station</option> <option value="grand central station, new york, ny">Grand Central Station</option> <option value="625 8th Avenue New York NY 10018">Port Authority Bus Terminal</option> <option value="staten island ferry terminal, new york, ny">Staten Island Ferry Terminal</option> <option value="101 E 125th Street, New York, NY">Harlem - 125th St Station</option> </select> <strong>End: </strong> <select id="end" onchange="calcRoute();"> <option value="260 Broadway New York NY 10007">City Hall</option> <option value="W 49th St & 5th Ave, New York, NY 10020">Rockefeller Center</option> <option value="moma, New York, NY">MOMA</option> <option value="350 5th Ave, New York, NY, 10118">Empire State Building</option> <option value="253 West 125th Street, New York, NY">Apollo Theatre</option> <option value="1 Wall St, New York, NY">Wall St</option> </select> <div>
שימוש בנקודות דרך במסלולים
כפי שצוין ב-DirectionsRequest,
אפשר גם לציין ציוני דרך
(מסוג DirectionsWaypoint
) בעת חישוב
מסלולים המשתמשים בשירות 'מסלול' להליכה, לרכיבה על אופניים או לנהיגה
לקבלת מסלול. אין ציוני דרך לקבלת מסלולים לתחבורה ציבורית.
נקודות דרך מאפשרות לחשב מסלולים דרך מיקומים נוספים,
במקרה כזה, המסלול המוחזר עובר דרך נקודות הציון הנתונות.
waypoint
כולל את השדות הבאים:
location
(חובה) מציין את הכתובת של ציון הדרך.stopover
(אופציונלי) מציין אם ציון הדרך הוא תחנה בפועל במסלול (true
) או במקום זאת רק העדפה לנתב דרך המיקום (false
). עצירות הביניים הןtrue
כברירת מחדל.
כברירת מחדל, שירות 'מסלול הגעה' מחשב מסלול דרך
את ציוני הדרך שסופקו בסדר הנתון. אופציונלי:
עשוי להעביר את optimizeWaypoints: true
בתוך
DirectionsRequest
כדי לאפשר לשירות המסלול
לשפר את המסלול המוצג על ידי סידור מחדש של נקודות הדרך
כדי שיהיה יעיל יותר. (האופטימיזציה הזו היא יישום של
בעיה עם אנשי מכירות בנסיעות.) זמן הנסיעה הוא הגורם העיקרי
שעברו אופטימיזציה, אך גורמים אחרים כמו מרחק, מספר פניות ועוד
נלקחים בחשבון כאשר מחליטים איזה מסלול הוא היעיל ביותר. הכול
נקודות ציון חייבות להיות חניות ביניים כדי שהשירות 'מסלול' יבצע אופטימיזציה
מסלול.
אם מנחים את שירות 'מסלול הגעה' לבצע אופטימיזציה של הסדר
בציוני הדרך שלו, הסדר שלהם יוחזר
השדה waypoint_order
בתוך
אובייקט DirectionsResult
.
הדוגמה הבאה מחשבת מסלולים חוצי-מדינות דרך
בארצות הברית באמצעות מגוון נקודות התחלה, נקודות קצה
וציוני דרך. (כדי לבחור כמה ציוני דרך, מקישים על
לחיצה על Ctrl כשבוחרים פריטים מהרשימה).
לתשומת ליבך, אנחנו בודקים את routes.start_address
ו-routes.end_address
כדי לספק
באמצעות הטקסט של נקודות ההתחלה והסיום של כל מסלול.
TypeScript
function initMap(): void { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 6, center: { lat: 41.85, lng: -87.65 }, } ); directionsRenderer.setMap(map); (document.getElementById("submit") as HTMLElement).addEventListener( "click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); } ); } function calculateAndDisplayRoute( directionsService: google.maps.DirectionsService, directionsRenderer: google.maps.DirectionsRenderer ) { const waypts: google.maps.DirectionsWaypoint[] = []; const checkboxArray = document.getElementById( "waypoints" ) as HTMLSelectElement; for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: (checkboxArray[i] as HTMLOptionElement).value, stopover: true, }); } } directionsService .route({ origin: (document.getElementById("start") as HTMLInputElement).value, destination: (document.getElementById("end") as HTMLInputElement).value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById( "directions-panel" ) as HTMLElement; summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance!.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer(); const map = new google.maps.Map(document.getElementById("map"), { zoom: 6, center: { lat: 41.85, lng: -87.65 }, }); directionsRenderer.setMap(map); document.getElementById("submit").addEventListener("click", () => { calculateAndDisplayRoute(directionsService, directionsRenderer); }); } function calculateAndDisplayRoute(directionsService, directionsRenderer) { const waypts = []; const checkboxArray = document.getElementById("waypoints"); for (let i = 0; i < checkboxArray.length; i++) { if (checkboxArray.options[i].selected) { waypts.push({ location: checkboxArray[i].value, stopover: true, }); } } directionsService .route({ origin: document.getElementById("start").value, destination: document.getElementById("end").value, waypoints: waypts, optimizeWaypoints: true, travelMode: google.maps.TravelMode.DRIVING, }) .then((response) => { directionsRenderer.setDirections(response); const route = response.routes[0]; const summaryPanel = document.getElementById("directions-panel"); summaryPanel.innerHTML = ""; // For each route, display summary information. for (let i = 0; i < route.legs.length; i++) { const routeSegment = i + 1; summaryPanel.innerHTML += "<b>Route Segment: " + routeSegment + "</b><br>"; summaryPanel.innerHTML += route.legs[i].start_address + " to "; summaryPanel.innerHTML += route.legs[i].end_address + "<br>"; summaryPanel.innerHTML += route.legs[i].distance.text + "<br><br>"; } }) .catch((e) => window.alert("Directions request failed due to " + status)); } window.initMap = initMap;
מגבלות והגבלות של ציוני דרך
בכפוף למגבלות השימוש ולמגבלות הבאות:
- המספר המרבי של ציוני דרך שמותר להשתמש בשירות 'מסלול הגעה' ב-Maps JavaScript API הוא 25, וגם המוצא והיעד. המגבלות זהות עבור Directions API שירות אינטרנט.
- עבור שירות האינטרנט Directions API, לקוחות יכולים להשתמש ב-25 תווים נקודות ציון, וגם המוצא והיעד.
- לקוחות של תוכנית הפרימיום של הפלטפורמה של מפות Google יכולים 25 נקודות ציון, וגם המוצא והיעד.
- אין תמיכה בנקודות דרך לקבלת מסלולי תחבורה ציבורית.
מסלולים שניתנים לגרירה
המשתמשים יכולים לשנות מסלולי רכיבה על אופניים, הליכה או נסיעה שמוצגים באמצעות
DirectionsRenderer
באופן דינמי, אם
ניתנת לגרירה, כך שהמשתמש יכול לבחור ולשנות
אחר על ידי לחיצה על הנתיבים שנוצרו על ידי המפה וגרירתם.
מצוין אם תצוגת כלי הרינדור מאפשרת גרירה
מסלול הגעה על ידי הגדרה של נכס draggable
שלו
אל true
. אין אפשרות לגרור מסלול לתחבורה ציבורית.
כאשר ניתן לגרור הנחיות, המשתמש יכול לבחור כל נקודה
הנתיב (או ציון הדרך) של התוצאה המעובדת ומזיזים את
את הרכיב למיקום חדש. DirectionsRenderer
יתעדכנו באופן דינמי ויוצגו לכם הנתיב שהשתנה. לאחר הפרסום,
ציון דרך יתווסף למפה (יצוין על ידי
סמן לבן קטן). בחירה והעברה של פלח נתיב
לשנות את הקטע במסלול, תוך בחירה ותזוזה
סמן ציון דרך (כולל נקודות התחלה ונקודת סיום) ישנה את
רגליים במסלול שעוברות באותה נקודת ציון.
מכיוון שכיוונים שניתנים לגרירה משתנים ומעובדים בצד הלקוח,
מומלץ לעקוב אחר directions_changed
ולטפל בהם
האירוע ב-DirectionsRenderer
שיקבל הודעה כאשר
המשתמש שינה את המסלול המוצג.
הקוד הבא מציג נסיעה מפרת' בחוף המערבי של אוסטרליה
לסידני בחוף המזרחי. הקוד עוקב אחר
אירוע אחד (directions_changed
) לעדכון המרחק הכולל
של כל השלבים בתהליך.
TypeScript
function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. } ); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel") as HTMLElement, }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer ); } function displayRoute( origin: string, destination: string, service: google.maps.DirectionsService, display: google.maps.DirectionsRenderer ) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result: google.maps.DirectionsResult) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result: google.maps.DirectionsResult) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i]!.distance!.value; } total = total / 1000; (document.getElementById("total") as HTMLElement).innerHTML = total + " km"; } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: -24.345, lng: 134.46 }, // Australia. }); const directionsService = new google.maps.DirectionsService(); const directionsRenderer = new google.maps.DirectionsRenderer({ draggable: true, map, panel: document.getElementById("panel"), }); directionsRenderer.addListener("directions_changed", () => { const directions = directionsRenderer.getDirections(); if (directions) { computeTotalDistance(directions); } }); displayRoute( "Perth, WA", "Sydney, NSW", directionsService, directionsRenderer, ); } function displayRoute(origin, destination, service, display) { service .route({ origin: origin, destination: destination, waypoints: [ { location: "Adelaide, SA" }, { location: "Broken Hill, NSW" }, ], travelMode: google.maps.TravelMode.DRIVING, avoidTolls: true, }) .then((result) => { display.setDirections(result); }) .catch((e) => { alert("Could not display directions due to: " + e); }); } function computeTotalDistance(result) { let total = 0; const myroute = result.routes[0]; if (!myroute) { return; } for (let i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; document.getElementById("total").innerHTML = total + " km"; } window.initMap = initMap;