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

מפתחים באזור הכלכלי האירופי (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 מבצע אינטרפולציה ומצמיד את המיקום לכביש הקרוב ביותר שניתן לנווט בו. תהליך ההצמדה לכביש עלול לפעמים לגרום לשינויים במסלול או לאי-דיוקים בהשוואה לקואורדינטות המדויקות.

אם מציינים ציון דרך באמצעות מחרוזת כתובת או Plus Code, ה-API מבצע המרת כתובות לקואורדינטות (geocoding) של המיקום ומחזיר את מזהה המקום התואם במערך 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"
      }
    ]
  }
}