توفّر خلاصة بيانات الاتّجاهات المفصّلة معلومات عن التنقّل فقط للأجهزة التي لم يتم تصميمها لتوجيهات التنقّل المستندة إلى الخرائط. وتوفّر المناورات القادمة باستخدام العناصر التي تقدّمها:
- الرموز (اليسار واليمين والانعطاف بدرجة 180)
- أرقام المنعطفات في الدوارات
- أسماء الطرق
- المسافات المقدَّرة والوقت المستغرَق للوصول إلى خطوة التنقّل التالية أو الوجهة النهائية
يمكنك استخدام خلاصة التوجيهات التفصيلية لإنشاء تجارب لا تكون فيها واجهة مستخدم ملف Navigation SDK الكامل مناسبة، مثل شاشات الأجهزة الصغيرة. على سبيل المثال، يمكنك استخدام هذه الميزة لراكبي المركبات ذات العجلتين، حيث يمكنك تصويب إرشادات التنقّل فقط لمساعدتهم في الوصول إلى وجهاتهم بشكل أسرع وبمزيد من الثقة مع الحد الأدنى من التشتيت.
عناصر عرض التنقّل الأساسية
الحقول الأساسية لكل خطوة تنقّل هي اسم الطريق بالكامل،
وإجراء المناورة، وإجمالي المسافة التي تقطعها الخطوة، وهي متاحة في
GMSNavigationStepInfo
.
بالنسبة إلى الرحلة بأكملها، قد تحتاج إلى عرض الوقت المتبقّي والمسافة إلى الخطوة الحالية أو إلى الوجهة، وكل ذلك متوفّر في GMSNavigationNavInfo
.
تعرض الصورة على اليسار مثالاً على عناصر التنقّل الأساسية هذه.
إعداد أداة معالجة حدث
لاستخدام بيانات التنقّل فقط، عليك تنفيذ أداة معالجة أحداث لحدث
didChangeNavInfo
. ضمن مستمع الأحداث، يمكنك الوصول إلى معلومات الرحلة
والخطوات لتقديم ميزة التنقّل بالتفصيل للمستخدمين.
لتنفيذ معالجات الأحداث، يجب أن ينفذ عنصر التحكّم في العرض للخريطة بروتوكول
GMSNavigatorListener
. للحصول على معلومات تفصيلية عن معالجة الأحداث في حزمة تطوير البرامج Navigation SDK لنظام التشغيل iOS،
راجِع مقالة الاستماع إلى أحداث التنقّل.
التعامل مع الحدث didChangeNavInfo
أنشئ أداة معالجة للحدث didChangeNavInfo
لإضافة ميزة التنقّل من نقطة إلى أخرى في
تطبيقك. في أداة معالجة الحدث، استخدِم الفئات والعناصر التالية للتحكّم في
التنقّل من نقطة إلى أخرى:
GMSNavigationNavInfo
— فئة تحدّد معلومات عن حالة التنقّلGMSNavigationStepInfo
: فئة تحدّد معلومات عن خطوة واحدة على طول مسار التنقّل.
GMSNavigationNavState
: فهرس يحدِّد الحالة الحالية للتنقّل، مثل "في الطريق" أو "إعادة التوجيه" أو "توقّف".
GMSNavigationDrivingSide
— عنصر مصنّف يحدّد ما إذا كانت هذه الخطوة على مسار يُسمَح فيه بالقيادة على اليمين أو اليسار.
GMSNavigationManeuver
: فهرس يحدِّد إجراء التنقّل الذي يجب اتّخاذه، مثل الانعطاف لليسار أو الانعطاف لليسار.
في ما يلي أمثلة على أدوات معالجة الحدث didChangeNavInfo
:
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; ... } } ... }
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 ... } } } }
حالات التنقّل
استخدِم سمة 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}]
صور توجيهات خط السير
تتيح حزمة تطوير البرامج (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];