הגדרת נקודה להעברת מסלול

מפתחים באזור הכלכלי האירופי (EEA)

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

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

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

כדי להגדיר ציון דרך ביניים כציון דרך למעבר, מגדירים את המאפיין via של ציון הדרך לערך true במשאב Waypoint של REST או בהודעה Waypoint של gRPC.

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

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

דוגמה: הגדרת נקודת ציון למעבר

הדוגמה הבאה מראה איך להגדיר "via": true בנקודת ציון ביניים בבקשת POST מלאה של computeRoutes:

curl -X POST -d '{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "intermediates": [
    {
      "location":{
        "latLng":{
          "latitude": 37.419734,
          "longitude": -122.0807784
        }
      },
      "via": true
    }
  ],
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

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

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

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

אם מציינים נקודת ציון באמצעות מחרוזת כתובת או קוד OLC, ה-API מבצע גיאו-קידוד של המיקום ומחזיר את מזהה המקום התואם במערך geocodingResults.intermediates בתגובה.

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

דוגמה: בקשה של מזהי מקומות לנקודות ציון למעבר

בדוגמה הבאה מוצגת בקשה עם שלוש נקודות ציון ביניים למעבר, שכל אחת מהן מציינת "via": true:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "intermediates": [
    {
      "address": "450 Serra Mall, Stanford, CA 94305, USA",
      "via": true
    },
    {
      "location":{
        "latLng":{
          "latitude": 37.419734,
          "longitude": -122.0807784
        }
      },
      "via": true
    },
    {
      "address": "1836 El Camino Real, Redwood City, CA 94063",
      "via": true
    }
  ],
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.legs,geocodingResults' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

התשובה כוללת את מערך geocodingResults שמכיל את מזהי המקומות של נקודת המוצא, היעד ושתי נקודות הביניים שציינתם לפי כתובת באינדקס הבקשה 0 ובאינדקס 2. ה-API משמיט את נקודת הביניים באינדקס 1 מ-geocodingResults כי ציינתם אותה באמצעות קואורדינטות של קו אורך וקו רוחב:

{
  "routes": [
    {
      "distanceMeters": 54200,
      "duration": "2400s",
      "legs": [
        {
          "distanceMeters": 54200,
          "duration": "2400s",
          "startLocation": {
            "latLng": {
              "latitude": 37.4220,
              "longitude": -122.0841
            }
          },
          "endLocation": {
            "latLng": {
              "latitude": 37.7786,
              "longitude": -122.3893
            }
          }
        }
      ]
    }
  ],
  "geocodingResults": {
    "origin": {
      "geocoderStatus": {},
      "type": [
        "premise"
      ],
      "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g"
    },
    "destination": {
      "geocoderStatus": {},
      "type": [
        "premise"
      ],
      "placeId": "ChIJI7ES6tl_j4ARVpDZoXbWAiY"
    },
    "intermediates": [
      {
        "geocoderStatus": {},
        "intermediateWaypointRequestIndex": 0,
        "type": [
          "street_address"
        ],
        "placeId": "ChIJvdLMGyq7j4ARScE5tWX_C0Y"
      },
      {
        "geocoderStatus": {},
        "intermediateWaypointRequestIndex": 2,
        "type": [
          "premise"
        ],
        "placeId": "ChIJkTc0GKajj4AR9UMsOSHwGD0"
      }
    ]
  }
}