توفّر خلاصة بيانات الاتّجاهات المفصّلة معلومات عن التنقّل فقط للأجهزة التي لم يتم تصميمها لإرشادات التنقّل المستندة إلى الخرائط. وتوفّر المناورات القادمة باستخدام العناصر التي تقدّمها:
- الرموز (اليسار واليمين والانعطاف بدرجة 180)
- أرقام المنعطفات في الدوارات
- أسماء الطرق
- المسافات المقدَّرة والوقت المستغرَق للوصول إلى خطوة التنقّل التالية أو الوجهة النهائية
يمكنك استخدام خلاصة التوجيهات التفصيلية لإنشاء تجارب لا تكون فيها واجهة مستخدم "حزمة تطوير البرامج (SDK) للتنقّل" الكاملة مناسبة، مثل شاشات الشاشة الصغيرة. على سبيل المثال، يمكنك استخدام هذه الميزة لراكبي المركبات ذات العجلتين، حيث يمكنك تصويب إرشادات التنقّل فقط لمساعدتهم في الوصول إلى وجهاتهم بشكل أسرع وبصورة أكثر ثقة وبأقل قدر من التشتيت.
عناصر عرض التنقّل الأساسية
الحقول الأساسية لكل خطوة تنقّل هي اسم الطريق بالكامل،
وإجراء المناورة، وإجمالي المسافة التي تقطعها الخطوة، وهي متوفرة في
GMSNavigationStepInfo
.
بالنسبة إلى الرحلة بأكملها، قد تحتاج إلى عرض الوقت المتبقّي والبعد عن الخطوة الحالية أو الوجهة، وكل ذلك متوفّر في GMSNavigationNavInfo
.
تعرض الصورة على يسار الصفحة مثالاً على عناصر التنقّل الأساسية هذه.
إعداد أداة مراقبة الأحداث
لاستخدام بيانات التنقّل فقط، عليك تنفيذ مستمع أحداث لحدث
didChangeNavInfo
. ضمن مستمع الأحداث، يمكنك الوصول إلى معلومات الرحلة
والخطوات لتقديم ميزة التنقّل بالاتّباع المفصّل للمستخدمين.
لتنفيذ معالجات الأحداث، يجب أن تنفِّذ وحدة تحكُّم العرض في الخريطة بروتوكول
GMSNavigatorListener
. للحصول على معلومات تفصيلية عن معالجة الأحداث في Navigation SDK لنظام التشغيل iOS،
راجِع مقالة الاستماع إلى أحداث التنقّل.
معالجة الحدث didChangeNavInfo
أنشئ مستمعًا لحدث didChangeNavInfo
لإضافة ميزة التنقّل من نقطة إلى أخرى في
تطبيقك. في مستمع الأحداث، استخدِم الفئات والعناصر التالية للتحكّم في
التنقّل من نقطة إلى أخرى:
GMSNavigationNavInfo
— فئة تحدّد معلومات عن حالة التنقّل.
GMSNavigationStepInfo
— فئة تحدّد معلومات عن خطوة واحدة على طول مسار التنقّل
GMSNavigationNavState
— فهرس يحدّد الحالة الحالية للتنقّل، مثل "في الطريق" أو "إعادة التوجيه" أو "متوقف"
GMSNavigationDrivingSide
— فهرس يحدِّد ما إذا كانت هذه الخطوة على مسار يُسمَح فيه بالقيادة على اليمين أو على اليسار.
GMSNavigationManeuver
: فهرس يحدِّد إجراء التنقّل الذي يجب اتّخاذه، مثل الانعطاف يمينًا أو يسارًا.
في ما يلي أمثلة على مستمعي الأحداث لحدث didChangeNavInfo
:
Swift
// ViewController.swift class SomeViewController: UIViewController { ... mapView.navigator?.add(self); ... } extension SomeViewController: GMSNavigatorListener { func navigator(_ navigator: GMSNavigator, didUpdateNavInfo navInfo: GMSNavigationNavInfo) { // Get the current step information if navInfo.navState == .enroute { if let currentStep = navInfo.currentStep { ... roadNameLabel.text = currentStep.simpleRoadName ... } } } }
Objective-C
// ViewController.h @interface SomeViewController () <GMSNavigatorListener> @end // ViewController.m @implementation SomeViewController // Some initialization code. ... { ... [_mapView.navigator addListener:self]; ... } #pragma mark GMSNavigatorListener - (void)navigator:(GMSNavigator *)navigator didUpdateNavInfo:(GMSNavigationNavInfo *)navInfo { // Get the current step information if (navInfo.navState == GMSNavigationNavStateEnroute) { GMSNavigationStepInfo *currentStep = navInfo.currentStep; if (currentStep) { ... roadNameLabel.text = currentStep.simpleRoadName; ... } } ... }
حالات التنقّل
استخدِم سمة navState
من GMSNavigationNavInfo
للحصول على الحالة الحالية للتنقّل، وهي إحدى الحالات التالية:
في الطريق: تشير الحالة
GMSNavigationNavStateEnroute
إلى أنّ التنقّل الإرشادي فعال حاليًا وأنّ المستخدم على المسار المقدَّم. تتوفّر معلومات عن خطوة المناورة القادمة الحالية.إعادة التوجيه: يشير الرمز
GMSNavigationNavStateRerouting
إلى أنّ التنقّل جارٍ، ولكن يبحث المخطِّط عن مسار جديد. خطوة المناورة القادمة غير متوفرة، لأنّه لا يتوفّر مسار جديد بعد.متوقف: يشير الرمز
GMSNavigationNavStateStopped
إلى أنّ التنقّل قد انتهى. على سبيل المثال، تتوقف عملية التنقّل عندما يخرج المستخدم من التنقّل في التطبيق. في نموذج التطبيق، تؤدي حالةGMSNavigationNavStateStopped
إلى محو عرض معلومات التنقّل لمنع عرض تعليمات الخطوات التي لم تكتمل بعد.
إرشادات بشأن الممر
يمثّل Navigation SDK المسارات في بطاقة الانعطاف في التنقّل ككائنَي بيانات
GMSNavigationLane
وGMSNavigationLaneDirection
. يمثّل عنصر
GMSNavigationLane
حارة مرور معيّنة أثناء التنقّل، ويحتوي على
قائمة بعناصر GMSNavigationLaneDirection
تصف كل المنعطفات التي
يمكن إجراؤها من هذه الحارة.
يتم وضع علامة على الاتجاه المقترَح الذي يجب أن يسلكه السائق في حارة باستخدام الحقل
recommended
.
مثال على إرشادات المسارات
يوضّح المقتطف التالي تمثيل البيانات للّيالي المعروضة في لقطة الشاشة السابقة.
// Lane 1
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 2
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeNormalLeft, /*recommended=*/ true}]
// Lane 3
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false}]
// Lane 4
GMSNavigationLaneDirections =
[{/*GMSNavigationLaneShape=*/
GMSNavigationLaneShapeStraight, /*recommended=*/ false},
{/*GMSNavigationLaneShape=*/ GMSNavigationLaneShapeNormalRight, /*recommended=*/ false}]
صور إرشادات التنقّل بين الحارات
تتيح حزمة Navigation SDK إنشاء صور للّواحات لكل خطوة تنقّل
كما هو موضّح في GMSNavigationStepInfo
. تتوافق هذه الرموز مع إرشادات حجم الصور في CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];
إنشاء رموز للعمليات
يحدِّد التعداد GMSNavigationManeuver
كل مناورة محتملة يمكن أن تحدث أثناء التنقّل، ويمكنك
الحصول على المناورة لخطوة معيّنة من خاصية maneuver
في
GMSNavigationStepInfo
.
عليك إنشاء رموز المناورات وإقرانها بالمناورات المرتبطة بها.
بالنسبة إلى بعض المناورات، يمكنك إعداد تعيين مباشر لأحد الرموز، مثل
GMSNavigationManeuverDestinationLeft
و
GMSNavigationManeuverDestinationRight
. ومع ذلك، بما أنّ بعض المناورات تشترك في
سمات مع مناورات أخرى، قد تحتاج إلى ربط أكثر من
مناورة برمز واحد. على سبيل المثال، يمكن ربط GMSNavigationManeuverTurnLeft
و
GMSNavigationManeuverOnRampLeft
برمز الانعطاف لليسار.
تحتوي بعض المناورات على تصنيف إضافي "باتجاه عقارب الساعة" أو "عكس عقارب الساعة"، ويحدّد حِزم تطوير البرامج (SDK) ذلك التصنيف استنادًا إلى جهة القيادة في البلد. على سبيل المثال، في البلدان التي يتم فيها القيادة على يمين الطريق، يدور السائقون في دوار أو يُجرون انعطافًا عكسيًا في اتجاه عقارب الساعة، في حين يدورون في عكس اتجاه عقارب الساعة في البلدان التي يتم فيها القيادة على يمين الطريق. ترصد حزمة تطوير البرامج (SDK) لميزة التنقّل ما إذا كان المناورة تحدث في حركة المرور على يمين الطريق أو يساره، وتُخرج المناورة المناسبة. لذلك، قد يختلف رمز المناورة لمناورة باتجاه عقارب الساعة مقارنةً بأخرى بعكس عقارب الساعة.
توسيع الرمز لعرض أمثلة على الرموز الخاصة بالمناورات المختلفة
رمز عيّنة | المناورات التفصيلية |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_RAMP_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
|
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
|
ROUNDABOUT_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_CLOCKWISE
|
|
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_EXIT_CLOCKWISE
|
|
MERGE_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
|
MERGE_UNSPECIFIED
|
|
DESTINATION
|
|
DESTINATION_RIGHT
|
|
DESTINATION_LEFT
|
|
FERRY_BOAT
|
|
FERRY_TRAIN
|
استخدام الرموز التي تم إنشاؤها
تتيح حزمة تطوير البرامج Navigation SDK إنشاء رموز المناورات لملف
GMSNavigationStepInfo
معيّن. تتوافق هذه الرموز مع إرشادات تحديد حجم الصور في CarPlay.
Swift
let currentStepInfo = navInfo.currentStep let options = GMSNavigationStepImageOptions() options.maneuverImageSize = .square96 options.screenMetrics = UIScreen.mainScreen let maneuverImage = currentStepinfo.maneuverImage(options: options)
Objective-C
GMSNavigationStepInfo *stepInfo = navInfo.currentStep; GMSNavigationStepImageOptions *options = [[GMSNavigationStepImageOptions alloc] init]; options.maneuverImageSize = GMSNavigationManeuverImageSizeSquare96; options.screenMetrics = UIScreen.mainScreen; UIImage* maneuverImage = [stepInfo maneuverImageWithOptions:options];