تخطيط مسار

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

  • خط متعدّد الأضلاع للمسار

  • أهداف مسارك

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

  • تقليل وقت التسليم: قد تريد مؤسسة توصيل الطعام تقليل الوقت المستغرَق لتوصيل الطعام.

  • تقليل مدة الرحلة أو استهلاك الوقود: قد تريد مؤسسة لوجستية تحسين كفاءة السائقين وتقليل تكاليف الوقود.

  • تقليل الوقت المستغرَق للوصول إلى الوجهة: قد تريد عملية إرسال الخدمات تقليل الوقت المستغرَق لوصول المشغّلين إلى طلب وظيفة.

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

لمزيد من المعلومات حول التخطيط لمسار باستخدام رمز مسار، يُرجى الاطّلاع على مقالتَي طلب رمز مسار في Routes API و نقل الخطوط المتعدّدة الأضلاع ورموز المسار في Route Optimization API.

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

باستخدام رمز مسار من Routes API أو Routes Preferred API أو Route Optimization API، يمكنك التحكّم بشكل أكبر في المسار المقدَّم:

  • التخطيط لمسار مسبقًا لتستخدمه حزمة Navigation SDK متى أمكن ذلك

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

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

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

آلية عمل رموز المسار

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

إليك ما يحدث عند طلب رمز مسار واستخدامه:

  1. تعرض Routes API أو Routes Preferred API أو Route Optimization API رمز مسار مشفّرًا يتضمّن الخط المتعدّد الأضلاع للمسار وأهداف المسار.

  2. يمكنك تمرير رمز المسار إلى حزمة Navigation SDK.

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

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

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

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

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

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

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

الخطوة 1: إنشاء رمز مسار باستخدام Routes API أو Routes Preferred API أو Route Optimization API

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

  2. اضبط طلب Routes API أو Routes Preferred API لاستيفاء متطلبات استخدام رمز مسار:

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

الخطوة 2: تمرير رمز المسار إلى حزمة Navigation SDK

  1. تخزين رمز المسار: في حزمة Navigation SDK، اضبط سلسلة لتخزين رمز المسار. على سبيل المثال:

    let routeToken = "route token returned by Routes API"
    

    مثال على رمز مسار تم عرضه:

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

    mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

    تُمرِّر طريقة setDestinations حالة الطلب إلى رد الاتصال. إذا عثرت على مسار من موقع المستخدم إلى الوجهة المحدّدة، تكون الحالة .OK (GMSRouteStatusOK).

سيناريوهات متعدّدة نقاط الطريق

يمكنك ضبط 25 نقطة طريق بحدّ أقصى.

لا تتيح طريقة setDestinations الرحلات التي تتضمّن نقاط طريق متعدّدة. استخدِم continueToNextDestinationWithCompletion() للانتقال بنقطة الطريق إلى المرحلة التالية من الرحلة.

مثال

تعرض أمثلة التعليمات البرمجية التالية كيفية استرداد مسار مخطط له.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:location title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator setDestinations:@[waypoint1, waypoint2]
                        routeToken:routeToken
                          callback:^(GMSRouteStatus routeStatus){...}];

كيفية تفاعل رموز المسار وحزمة Navigation SDK

إليك كيفية تفاعل المسار الذي أنشأته حزمة Navigation SDK والمسار المخطط له في رمز المسار:

  • تجاوز أي وجهات تم ضبطها سابقًا

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

  • التعديل وفقًا لظروف الطريق وحركة المرور يُرجى الاطّلاع على أسباب عدم اتّباع المسار المخطط له بدقة.

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

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • اتّباع:

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

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