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

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

تتعامل واجهة برمجة التطبيقات تلقائيًا مع نقاط الطريق الوسيطة على أنّها محطات توقّف على طول المسار. ومع ذلك، يمكنك ضبط نقطة طريق وسيطة كنقطة طريق 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'

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

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

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

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