تحديد نقطة لمسار مرور

المطوّرون في المنطقة الاقتصادية الأوروبية

بشكلٍ تلقائي، تتعامل واجهة برمجة التطبيقات مع نقاط المرور الوسيطة على أنّها محطات توقّف على طول المسار. ومع ذلك، يمكنك ضبط نقطة طريق وسيطة كنقطة طريق via تمرّ بها المركبة بدون التوقّف.

استخدِم نقاط المرور لتحديد مسار معيّن أو تعديله. بدلاً من تقسيم المسار إلى محطات منفصلة للاستلام أو التسليم، تجبر نقطة المرور محرك التوجيه على المرور بموقع جغرافي معيّن في الطريق إلى الوجهة، مثلاً، لاتباع جزء من الطريق مفضّل أو تجنُّب خطر معروف.

يتضمّن المسار الذي يحتوي على نقطة انطلاق ونقطة واحدة أو أكثر من نقاط المرور الوسيطة ونقطة وصول جزء مسار واحدًا فقط يربط نقطة الانطلاق بنقطة الوصول مباشرةً.

لضبط نقطة طريق وسيطة كنقطة طريق تمريرية، اضبط السمة via لنقطة الطريق على true في مورد REST Waypoint أو رسالة gRPC Waypoint.

على الرغم من أنّ Routes API يقبل العناوين ومعرّفات الأماكن وإحداثيات خطوط الطول والعرض، فإنّ إحداثيات خطوط الطول والعرض، أو latLng، توفّر تعديلات المسار الأكثر دقة لنقاط المرور.

تكون السمة via أكثر فعالية عند إنشاء مسارات استجابةً لسحب نقاط طريق على خريطة. يتيح لك هذا الأسلوب معرفة شكل المسار النهائي في الوقت الفعلي ويساعدك في وضع نقاط المرور في مواقع يسهل الوصول إليها.

مثال: ضبط نقطة طريق تمريرية

يوضّح المثال التالي كيفية ضبط "via": true على نقطة طريق وسيطة في طلب computeRoutes POST كامل:

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'

استخدام العناوين أو معرّفات الأماكن لنقاط المرور

مع أنّنا ننصح باستخدام إحداثيات خطوط الطول والعرض للتوجيه الدقيق، يمكنك أيضًا تحديد نقاط طريق وسيطة باستخدام سلسلة عناوين أو معرّف مكان.

عند استخدام عنوان أو معرّف مكان لنقطة طريق تمريرية، تعمل واجهة برمجة التطبيقات على استيفاء الموقع الجغرافي وتثبيته على أقرب طريق يمكن سلوكه. قد تؤدي عملية محاذاة المسار مع الطرق هذه أحيانًا إلى اختلافات أو عدم دقة في المسار مقارنةً بالإحداثيات الدقيقة.

إذا حدّدت نقطة طريق باستخدام سلسلة عنوان أو رمز موقع مفتوح، ستعمل واجهة برمجة التطبيقات على تحويل الموقع الجغرافي إلى رمز جغرافي وستعرض معرّف المكان المطابق في مصفوفة 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. تحذف واجهة برمجة التطبيقات نقطة التوقف الوسيطة في الفهرس 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"
      }
    ]
  }
}