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