تخطيط مسار

في بعض الأحيان، قد ترغب في تخطيط المسار الذي يوفره تطبيقك للمستخدمين. يمكن أن يساعدك استخدام رمز مسار مميز من واجهة برمجة التطبيقات Routes API (أو واجهة برمجة التطبيقات Routes Preferred API) في تحديد شيئين لمسارك المُخطَّط له:

  • خطوط متعددة للمسار

  • أهداف المسار

على سبيل المثال، فيما يلي بعض الأمثلة لأهداف التوجيه التي قد تكون لديك:

  • تقليل الوقت اللازم للتسليم: قد يرغب نشاط تجاري يقدم الطعام في تقليل الوقت الذي يستغرقه توصيل الطعام.

  • تقليل وقت السفر أو استهلاك الوقود: قد يرغب أحد الأنشطة التجارية اللوجستية في تحسين كفاءة السائقين وخفض تكاليف الوقود.

  • تقليل الوقت إلى الوجهة: قد تحتاج عملية إرسال الخدمة إلى تقليل الوقت الذي تستغرقه عملية إرسال المشغلات إلى طلب المهمة.

  • خفض التكاليف وتحسين مستوى السلامة: قد يرغب أحد الأنشطة التجارية التي تتيح مشاركة الرحلات في العثور على طريق أقل تكلفة للركاب وتتجنّب مناطق معيّنة لأسباب تتعلّق بالسلامة.

لمزيد من المعلومات حول التخطيط لمسار باستخدام رمز مميز للمسار، راجِع طلب رمز مميّز للمسار.

أسباب استخدام رمز طريق مميز لأهداف المسار

باستخدام رمز مميز للمسار من واجهة برمجة التطبيقات المفضلة للمسارات أو المسارات، يمكنك التحكم بشكل أكبر في المسار المقدم:

  • خطِّط لمسار مسبقًا حتى تتمكّن من استخدام "حزمة تطوير البرامج (SDK) للتنقل" إن أمكن.

  • اختَر أفضل مسار لاستخدام حزمة تطوير البرامج (SDK) للتنقل. إذا طلبت رموزًا مميّزة للمسار عند إنشاء مسارات في Routes API، ستحصل على رمز مميّز للمسار لكل مسار يتم إنشاؤه. يمكنك بعد ذلك اختيار الرمز المميز للمسار الذي تريد استخدامه عند تمريره إلى حزمة SDK للتنقل.

  • تقدير السعر مسبقًا، بما في ذلك تقديرات الوقت المقدّر للوصول والمسافة. مع أنّ التكلفة والوقت الفعليَين قد يختلفان، يقلل هذا التقدير الفجوة بين التكلفة المتوقّعة والفعلية للمسار.

  • تحديد أهداف مسار أكثر تقدّمًا، مثل التوجيه البيئي أو أقصر طريق

آلية عمل الرموز المميّزة للمسار في Routes API

يمكنك استخدام Routes API أو Routes Preferred API لتخطيط مسار باستخدام أهداف المسار. تعرض واجهة برمجة التطبيقات Routes API رمزًا مميزًا للمسار يمكنك تمريره إلى حزمة (SDK) للتنقّل لإرشادك في مسار مركبتك.

إليك ما يحدث عند طلب رمز مميّز للمسار واستخدامه من واجهة برمجة التطبيقات Routes API:

  1. تعرض Routes API رمزًا مميّزًا للمسار يتضمّن المسارات المتعدّدة وأهداف المسارات.

  2. يمكنك تمرير الرمز المميّز للمسار إلى حزمة تطوير البرامج (SDK) للتنقل.

  3. تسترد حزمة SDK الملاحة المسار، أو إذا لم يكن المسار متاحًا بسبب الظروف المتغيرة، فإنها تسترد أفضل مسار مطابق.

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

وتزيد هذه العملية من مدى قرب المسار الفعلي من المسار المخطط له.

سبب عدم اتباع المسار المخطط له بدقة

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

تخطيط مسار باستخدام رمز مميز للمسار

يمكنك تخطيط مسار عن طريق إنشاء رمز مميز للمسار ثم تمريره إلى حزمة SDK للتنقل، كما هو موضح في الخطوات التالية:

الخطوة 1: إنشاء رمز مميز للمسار باستخدام واجهة برمجة التطبيقات المفضلة للمسارات أو المسارات

  1. يمكنك طلب رمز مميّز للمسار باستخدام إحدى الطرق التالية:

    • واجهة برمجة تطبيقات المسارات: computeRoutes. لمزيد من المعلومات حول طلب رمز مميز للمسار في Routes API، يمكنك الاطّلاع على حساب مسار وطلب رمز مميّز للمسار.

    • واجهة برمجة التطبيقات المفضلة للمسارات: computeCustomRoutes. لمزيد من المعلومات حول طلب رمز مميز للمسار في واجهة برمجة التطبيقات المفضلة للمسارات، راجع التخطيط لمسار.

  2. إعداد طلب المسار لاستيفاء متطلبات استخدام الرمز المميز للمسار:

    • ضبط travel_mode على DRIVING
    • ضبط routing_preference على TRAFFIC_AWARE أو TRAFFIC_AWARE_OPTIMAL
    • لا تستخدم عبر نقاط الطريق

الخطوة 2: تمرير الرمز المميّز للمسار إلى حزمة تطوير البرامج (SDK) للتنقّل

  1. تخزين الرمز المميز للمسار: في حزمة SDK للتنقل، يمكنك إعداد سلسلة لتخزين الرمز المميز للمسار. مثلاً:

    String routeToken = "route token returned by Routes API";

    مثال على رمز مميّز للمسار تم إرجاعه:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. تمرير الرمز المميّز للمسار إلى حزمة تطوير البرامج (SDK) للتنقّل باستخدام الطريقة Navigator.setDestinations، مع تحديد نقاط الوجهة نفسها التي استخدمتها عند إنشاء الرمز المميّز للمسار:

    setDestinations(List destinations, CustomRoutesOptions customRoutesOptions, DisplayOptions displayOptions);

    مثلاً:

    CustomRoutesOptions customRoutesOptions =
          CustomRoutesOptions.builder()
          .setRouteToken(routeToken)
          .build();

تعرض الطريقة Navigator.setDestinations حالة الطلب. وفي حال العثور على مسار من موقع المركبة إلى الوجهة المحدّدة، يتم إرجاعها RouteStatus.OK.

لمزيد من المعلومات حول هذه الطريقة، راجِع Navigator.setDestinations.

مثال

يوضح مثال الرمز التالي كيفية تحديد مسار مخطط له باستخدام رمز مسار.

    ArrayList <Waypoint> destinations = Lists.newArrayList();
    Waypoint waypoint1 =
       Waypoint.builder()
          .setLatLng(10, 20)
          .setTitle("title")
          .setVehicleStopover(true)
          .build();
    destinations.add(waypoint1);
    Waypoint waypoint2 =
       Waypoint.builder()
          .setPlaceId("ChIJYV-J-ziuEmsRIMyoFaMedU4")
          .setTitle("title")
          .setVehicleStopover(true)
           .build()
    destinations.add(waypoint2);

    String routeToken = "route token returned by Routes API";

    CustomRoutesOptions customRoutesOptions =
       CustomRoutesOptions.builder()
          .setRouteToken(routeToken)
          .setTravelMode(CustomRoutesOptions.TravelMode.TWO_WHEELER)
          .build();

    // Existing flow to get a Navigator.
    NavigationApi.getNavigator(...);

    // Existing flow for requesting routes.
    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions);

    // Or with display options.
    DisplayOptions displayOptions = new DisplayOptions();

    ListenableResultFuture<RouteStatus> routeStatusFuture =
        navigator.setDestinations(destinations, customRoutesOptions, displayOptions);

كيفية تفاعل الرموز المميزة للمسار وحزمة تطوير البرامج (SDK) للتنقل

إليك كيفية تفاعل المسار الذي تم إنشاؤه من خلال حزمة تطوير البرامج (SDK) للتنقل مع المسار المخطط له في الرمز المميز للمسار:

  • يتجاهل أي وجهات تم إعدادها سابقًا.

  • تستخدم موقع بدء المركبة.

  • التعديلات لأحوال الطرق وحركة المرور يمكنك الاطّلاع على سبب عدم اتّباع المسار المخطط له بدقة.

  • يتجاهل الخيارات التالية المتعلقة بالتوجيه باعتبارها غير ضرورية:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • المواقع التي تتابعها:

    • الخيارات المتعلقة بنقطة الطريق، مثل تفضيل جانب الطريق.

    • أهداف المسار: إذا كان على حزمة SDK للتنقل تعديل المسار المعروض، فإنها تستخدم أهداف المسار التي حددتها عند طلب الرمز المميز للمسار. لهذا السبب، يجب استخدام الخيارات نفسها المتعلقة بنقطة الطريق التي حددتها في Routes API.