ใช้คู่มือนี้เพื่อเปิดใช้แอปให้ฟังและตอบสนองต่อเหตุการณ์ต่างๆ ที่เปลี่ยนแปลงไปเมื่อผู้ใช้ไปยังส่วนต่างๆ ของเส้นทาง คู่มือนี้ไม่ครอบคลุมถึงการกำหนดเส้นทาง แต่ครอบคลุมเฉพาะการตอบสนองต่อเหตุการณ์ตามเส้นทาง
ภาพรวม
Navigation SDK สําหรับ iOS มี Listener ที่เชื่อมโยงกับตําแหน่งของผู้ใช้และสภาพเส้นทาง รวมถึงข้อมูลเวลาและระยะทางที่สําคัญ ในแอปของคุณ วีวคอนโทรลเลอร์ของแผนที่ต้องใช้โปรโตคอลสําหรับโปรแกรมฟังเหล่านี้
GMSRoadSnappedLocationProviderListener
และ
GMSNavigatorListener
รายการนี้จะแสดงเมธอด Listener ที่พร้อมใช้งานสําหรับเหตุการณ์การนําทาง
GMSNavigatorListener.didArriveAtWaypoint
ซึ่งจะทริกเกอร์เมื่อถึงปลายทางGMSNavigatorListener.navigatorDidChangeRoute
ซึ่งจะทริกเกอร์เมื่อเส้นทางเปลี่ยนแปลงGMSNavigatorListener.didUpdateRemainingTime
ซึ่งเรียกซ้ำๆ เมื่อเวลาถึงจุดหมายถัดไปเปลี่ยนแปลงขณะที่คำแนะนำทำงานอยู่GMSNavigatorListener.didUpdateRemainingDistance
ซึ่งเรียกซ้ำๆ เมื่อระยะทางไปยังจุดหมายถัดไปเปลี่ยนแปลงขณะที่ระบบนำทางทำงานอยู่GMSNavigatorListener.didUpdateDelayCategory
ซึ่งจะเรียกใช้เมื่อหมวดหมู่ความล่าช้าของปลายทางถัดไปมีการเปลี่ยนแปลงขณะที่คำแนะนำทำงานอยู่GMSNavigatorListener.didChangeSuggestedLightingMode
ซึ่งจะทริกเกอร์เมื่ออัปเดตสภาพแสงโดยประมาณ เช่น เมื่อตกกลางคืนที่ตำแหน่งปัจจุบันของผู้ใช้ แสงสว่างจะเปลี่ยนไปGMSNavigatorListener.didUpdateSpeedingPercentage
ซึ่งจะทริกเกอร์เมื่อคนขับขับรถเร็วเกินขีดจำกัดGMSRoadSnappedLocationProviderListener.didUpdateLocation
ซึ่งเรียกซ้ำๆ เมื่อตำแหน่งของผู้ใช้เปลี่ยนแปลง
ดูรหัส
การประกาศว่าเป็นไปตามโปรโตคอลที่กำหนด
ก่อนที่จะใช้วิธีการนําทาง ตัวควบคุมมุมมองต้องใช้โปรโตคอลต่อไปนี้
Swift
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
หลังจากใช้โปรโตคอลการนําทางแล้ว ให้ตั้งค่าตัวรับฟังเป็น ViewModel เช่น คุณสามารถเพิ่มโค้ดต่อไปนี้ลงในเมธอด viewDidLoad()
Swift
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];
การรับหรือหยุดการอัปเดตตำแหน่ง
จำเป็นต้องมีการอัปเดตตำแหน่งเพื่อแสดงความคืบหน้าของผู้ใช้บนแผนที่
อินสแตนซ์ location
จะแสดงพร็อพเพอร์ตี้ต่อไปนี้
พร็อพเพอร์ตี้สถานที่ตั้ง | คำอธิบาย |
---|---|
ระดับความสูง | ความสูงปัจจุบัน |
coordinate.latitude | พิกัดละติจูดปัจจุบันที่จับคู่กับถนน |
coordinate.longitude | พิกัดลองจิจูดปัจจุบันที่จับคู่กับถนน |
หลักสูตร | ทิศทางปัจจุบันเป็นองศา |
ความเร็ว | ความเร็วปัจจุบัน |
การประทับเวลา | วันที่/เวลาของการอ่านค่าปัจจุบัน |
หากต้องการรับการอัปเดตตำแหน่งอย่างต่อเนื่อง ให้เรียกใช้
mapView.roadSnappedLocationProvider.startUpdatingLocation
และใช้
GMSRoadSnappedLocationProviderListener
เพื่อจัดการเหตุการณ์ didUpdateLocation
ตัวอย่างต่อไปนี้แสดงการเรียก startUpdatingLocation
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
โค้ดต่อไปนี้สร้าง GMSRoadSnappedLocationProviderListener
ที่จัดการเหตุการณ์ didUpdateLocation
Swift
func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }
Objective-C
- (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@",
location.description); }
หากต้องการรับข้อมูลอัปเดตตำแหน่งเมื่อแอปทำงานอยู่เบื้องหลัง ให้ตั้งค่า allowsBackgroundLocationUpdates
เป็น "จริง"
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
การตรวจหาเหตุการณ์การมาถึง
แอปใช้เหตุการณ์ didArriveAtWaypoint
เพื่อตรวจหาเมื่อไปถึงปลายทางแล้ว คุณกลับมาใช้การแนะนำต่อและไปยังจุดสังเกตถัดไปได้โดยกด continueToNextDestination()
แล้วเปิดใช้การแนะนำอีกครั้ง แอปของคุณต้องเปิดใช้คำแนะนำอีกครั้งหลังจากเรียกใช้ continueToNextDestination()
หลังจากแอปเรียก continueToNextDestination
แล้ว โปรแกรมนำทางจะไม่มีข้อมูลเกี่ยวกับปลายทางก่อนหน้าอีกต่อไป หากต้องการวิเคราะห์ข้อมูลเกี่ยวกับช่วงของเส้นทาง คุณต้องเรียกข้อมูลนี้จากโปรแกรมนำทางก่อนเรียกใช้ continueToNextDestination()
ตัวอย่างโค้ดต่อไปนี้แสดงเมธอดในการจัดการเหตุการณ์ didArriveAtWaypoint
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
arrived at: %@", waypoint.title); [_mapView.navigator
continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }
การรับข้อมูลอัปเดตเกี่ยวกับการเปลี่ยนแปลงเส้นทาง
หากต้องการรับการแจ้งเตือนทุกครั้งที่มีการเปลี่ยนแปลงเส้นทาง ให้สร้างเมธอดเพื่อจัดการเหตุการณ์ navigatorDidChangeRoute
คุณสามารถเข้าถึงเส้นทางใหม่ได้โดยใช้พร็อพเพอร์ตี้ routeLegs
และ currentRouteLeg
ของ GMSNavigator
Swift
func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
has changed."); }
การรับข้อมูลอัปเดตเวลาถึงจุดหมาย
หากต้องการรับการอัปเดตเวลาถึงปลายทางอย่างต่อเนื่อง ให้สร้างเมธอดเพื่อจัดการเหตุการณ์ didUpdateRemainingTime
พารามิเตอร์ time
จะระบุเวลาโดยประมาณเป็นวินาทีจนกว่าจะถึงปลายทางถัดไป
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next
destination: %f", time); }
หากต้องการตั้งค่าการเปลี่ยนแปลงขั้นต่ำของเวลาโดยประมาณในการไปยังปลายทางถัดไป ให้ตั้งค่าพร็อพเพอร์ตี้ timeUpdateThreshold
ใน GMSNavigator
ค่านี้มีหน่วยเป็นวินาที หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้นี้ บริการจะใช้ค่าเริ่มต้น 1 วินาที
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
การรับข้อมูลอัปเดตระยะทางไปยังจุดหมาย
หากต้องการรับการอัปเดตระยะทางไปยังปลายทางอย่างต่อเนื่อง ให้สร้างเมธอดเพื่อจัดการเหตุการณ์ didUpdateRemainingDistance
พารามิเตอร์ distance
จะแสดงระยะทางโดยประมาณไปยังจุดหมายถัดไปเป็นเมตร
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
next destination: %.2f.", miles]); }
หากต้องการตั้งค่าการเปลี่ยนแปลงขั้นต่ำของระยะทางโดยประมาณไปยังปลายทางถัดไป ให้ตั้งค่าพร็อพเพอร์ตี้ distanceUpdateThreshold
ใน GMSNavigator
(ค่าจะระบุเป็นเมตร) หากไม่ได้ตั้งค่าพร็อพเพอร์ตี้นี้ บริการจะใช้ค่าเริ่มต้นเป็น 1 ม.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
การรับข้อมูลอัปเดตการจราจร
หากต้องการรับข้อมูลอัปเดตอย่างต่อเนื่องเกี่ยวกับปริมาณการจราจรของเส้นทางที่เหลือ ให้สร้างเมธอดเพื่อจัดการเหตุการณ์ didUpdateDelayCategory
การเรียกใช้ delayCategoryToNextDestination
จะแสดงผล GMSNavigationDelayCategory
ซึ่งมีค่า 0 ถึง 3 การอัปเดตหมวดหมู่จะอิงตามตําแหน่งปัจจุบันของผู้ใช้แอป หากไม่มีข้อมูลการเข้าชม GMSNavigationDelayCategory
จะแสดงผลเป็น 0 ตัวเลข 1-3 หมายถึงการไหลที่เพิ่มขึ้นจากเบาไปหนัก
Swift
func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }
พร็อพเพอร์ตี้ GMSNavigationDelayCategory
จะแสดงระดับการเลื่อนเวลาต่อไปนี้
หมวดหมู่การเลื่อนเวลา | คำอธิบาย |
---|---|
GMSNavigationDelayCategoryNoData | 0 - ไม่พร้อมใช้งาน ไม่มีข้อมูลการเข้าชม หรือ |
เส้นทาง | |
GMSNavigationDelayCategoryHeavy | 1 - มาก |
GMSNavigationDelayCategoryMedium | 2 - ปานกลาง |
GMSNavigationDelayCategoryLight | 3 - ไฟ |
การรับข้อมูลอัปเดตเกี่ยวกับการขับรถเร็ว
หากต้องการรับข้อมูลอัปเดตเมื่อคนขับขับรถเร็วเกินขีดจำกัด ให้สร้างเมธอดเพื่อจัดการเหตุการณ์ didUpdateSpeedingPercentage
Swift
// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }
Objective-C
// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }
การเปลี่ยนโหมดแสงที่แนะนำ
หากต้องการรับข้อมูลอัปเดตเกี่ยวกับการเปลี่ยนแปลงแสงโดยประมาณ ให้สร้างเมธอดเพื่อจัดการเหตุการณ์ didChangeSuggestedLightingMode
Swift
// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")
// Make the suggested change. mapView.lightingMode = lightingMode }
Objective-C
// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);
// Make the suggested change. _mapView.lightingMode = lightingMode; }