탐색 이벤트 리슨

이 가이드를 사용하여 앱이 다양한 이벤트를 수신 대기하고 이에 응답할 수 있도록 지원하세요. 사용자가 경로를 따라 이동할 때 변경되는 것입니다. 이 가이드에서는 경로를 정의하고 경로를 따라 발생하는 이벤트에만 응답합니다.

개요

iOS용 Navigation SDK는 리스너를 제공합니다. 경로상의 상황 및 사용자의 위치와 관련되어 있습니다. 중요한 시간 및 거리 데이터입니다. 지도의 뷰 컨트롤러에서 이러한 리스너에 대한 프로토콜을 채택해야 합니다. GMSRoadSnappedLocationProviderListener 드림 및 GMSNavigatorListener

다음 목록은 탐색 이벤트에 사용할 수 있는 리스너 메서드를 보여줍니다.

를 통해 개인정보처리방침을 정의할 수 있습니다.

코드 보기

필수 프로토콜에 대한 적합성 선언

탐색 메서드를 구현하기 전에 뷰 컨트롤러는 프로토콜:

Swift

class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {

Objective-C

@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>

@end

탐색 프로토콜을 채택한 후 리스너를 뷰로 설정 컨트롤러입니다. 예를 들어 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에서 true로의 값:

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 이벤트를 처리합니다. 다음을 통해 새 경로에 액세스할 수 있습니다. GMSNavigatorrouteLegscurrentRouteLeg 속성 사용

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); }

다음 목적지까지 예상 시간의 최소 변경을 설정하려면 GMSNavigatortimeUpdateThreshold 속성입니다. 값은 초입니다. 이 속성을 설정하지 않으면 서비스에서 기본값 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]); }

다음 목적지까지 예상 거리의 최소 변경을 설정하려면 GMSNavigatordistanceUpdateThreshold 속성 (값 지정됨) 미터). 이 속성을 설정하지 않으면 서비스에서 기본값 1을 사용합니다. 미터

Swift

navigator?.distanceUpdateThreshold = 100

Objective-C

navigator.distanceUpdateThreshold = 100;

교통정보 업데이트 수신

나머지 경로의 트래픽 흐름에 대한 지속적인 업데이트를 받으려면 didUpdateDelayCategory 이벤트를 처리할 메서드를 만듭니다. 호출 delayCategoryToNextDestinationGMSNavigationDelayCategory를 반환합니다. 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; }