ฟีดข้อมูลแบบเลี้ยวต่อเลี้ยวจะให้ข้อมูลการนำทางเท่านั้นแก่อุปกรณ์ที่ไม่ได้ออกแบบมาเพื่อคำแนะนำการนำทางตามแผนที่ โดยจะมีข้อมูลการบังคับเลี้ยวที่กําลังจะเกิดขึ้นพร้อมองค์ประกอบที่คุณระบุไว้ ดังนี้
- ไอคอน (ซ้าย ขวา เลี้ยวกลับ)
- หมายเลขเลี้ยวในวงเวียน
- ชื่อถนน
- ระยะทางและเวลาโดยประมาณในการไปยังจุดหมายถัดไปหรือจุดหมายสุดท้าย
คุณสามารถใช้ฟีดการนําทางแบบเลี้ยวต่อเลี้ยวเพื่อสร้างประสบการณ์การใช้งานที่ UI ของ Navigation SDK แบบเต็มไม่เหมาะสําหรับ เช่น การแสดงผลบนหน้าจอขนาดเล็ก ตัวอย่างเช่น คุณอาจใช้ฟีเจอร์นี้สำหรับผู้ขับขี่ยานพาหนะ 2 ล้อ ซึ่งคุณสามารถฉายคำแนะนำการนำทางเท่านั้นเพื่อช่วยให้ไปถึงจุดหมายได้เร็วขึ้นและมั่นใจมากขึ้นโดยมีการรบกวนน้อยที่สุด
องค์ประกอบการแสดงการนำทางที่จำเป็น
ฟิลด์หลักสำหรับขั้นตอนการนำทางแต่ละขั้นตอนคือชื่อถนนแบบเต็ม การดำเนินการ และระยะทางทั้งหมดของขั้นตอน ซึ่งอยู่ใน GMSNavigationStepInfo
สำหรับการเดินทางโดยรวม คุณอาจต้องการแสดงเวลาที่เหลือและระยะทางไปยังขั้นตอนปัจจุบันหรือปลายทาง ซึ่งทั้งหมดนี้พร้อมใช้งานใน GMSNavigationNavInfo
รูปภาพทางด้านขวาแสดงตัวอย่างองค์ประกอบการนําทางที่สําคัญเหล่านี้
ตั้งค่า Listener เหตุการณ์
หากต้องการใช้ข้อมูลการนําทางเท่านั้น คุณต้องติดตั้งใช้งาน Listener เหตุการณ์สําหรับเหตุการณ์ didChangeNavInfo
เข้าถึงข้อมูลการเดินทางและขั้นตอนภายในโปรแกรมรับฟังเหตุการณ์เพื่อนำทางแบบเลี้ยวต่อเลี้ยวให้แก่ผู้ใช้
หากต้องการใช้ตัวแฮนเดิลเหตุการณ์ เครื่องมือควบคุมมุมมองของแผนที่ต้องใช้โปรโตคอล GMSNavigatorListener
ดูข้อมูลโดยละเอียดเกี่ยวกับการจัดการเหตุการณ์ใน Navigation SDK สําหรับ iOS ได้ที่ฟังเหตุการณ์การนําทาง
การจัดการเหตุการณ์ didChangeNavInfo
สร้าง Listener สําหรับเหตุการณ์ didChangeNavInfo
เพื่อเพิ่มการรองรับการนําทางแบบเลี้ยวต่อเลี้ยวในแอปของคุณ ใน Listener เหตุการณ์ ให้ใช้คลาสและลิสต์แบบจำกัดต่อไปนี้เพื่อควบคุมการนําทางแบบเลี้ยวต่อเลี้ยว
GMSNavigationNavInfo
— คลาสที่กําหนดข้อมูลเกี่ยวกับสถานะการนําทางGMSNavigationStepInfo
- คลาสที่กําหนดข้อมูลเกี่ยวกับขั้นตอนเดียวในเส้นทางการนําทางGMSNavigationNavState
— Enum ที่กําหนดสถานะปัจจุบันของการนําทาง เช่น อยู่ระหว่างทาง เปลี่ยนเส้นทาง หรือหยุดGMSNavigationDrivingSide
— Enum ที่ระบุว่าขั้นตอนนี้อยู่ในเส้นทางที่ขับเลนขวาหรือเลนซ้ายGMSNavigationManeuver
— Enum ที่กําหนดการดําเนินการในการนําทาง เช่น เลี้ยวซ้ายหรือเลี้ยวขวา
ตัวอย่าง Listener เหตุการณ์สําหรับเหตุการณ์ 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}]
รูปภาพคำแนะนำช่องทาง
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
คุณต้องสร้างไอคอนของกลยุทธ์และจับคู่กับกลยุทธ์ที่เกี่ยวข้อง
สำหรับการเคลื่อนไหวบางอย่าง คุณสามารถตั้งค่าการแมปแบบ 1:1 กับไอคอนได้ เช่น GMSNavigationManeuverDestinationLeft
และ GMSNavigationManeuverDestinationRight
อย่างไรก็ตาม เนื่องจากการหลบเลี่ยงบางอย่างมีลักษณะคล้ายกับการหลบเลี่ยงอื่นๆ คุณจึงอาจต้องแมปการหลบเลี่ยงมากกว่า 1 รายการกับไอคอนเดียว เช่น GMSNavigationManeuverTurnLeft
และ GMSNavigationManeuverOnRampLeft
อาจแมปกับไอคอนเลี้ยวซ้ายได้ทั้งคู่
การหมุนบางรายการจะมีป้ายกำกับ "ตามเข็มนาฬิกา" หรือ "ทวนเข็มนาฬิกา" เพิ่มเติม ซึ่ง SDK จะกำหนดตามด้านที่ขับรถของประเทศ ตัวอย่างเช่น ในประเทศที่ขับรถทางด้านซ้ายของถนน ผู้ขับขี่จะเลี้ยวเข้าวงเวียนหรือเลี้ยวกลับทางตามเข็มนาฬิกา ส่วนประเทศที่ขับรถทางด้านขวาของถนนจะเลี้ยวตามทวนเข็มนาฬิกา Navigation 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];