세부 경로 안내 데이터 피드에 대한 세부정보

세부 경로 안내 데이터 피드는 지도 기반 탐색 안내를 위해 설계되었습니다. 그것은 향후 작전을 제공하고 다음과 같습니다.

  • 아이콘 (왼쪽, 오른쪽, U자형)
  • 로터리에서 번호 바꾸기
  • 도로 이름
  • 다음 이동 단계 또는 최종 지점까지의 예상 거리 및 시간 목적지

세부 경로 안내 피드를 사용하면 전체 정보가 Navigation SDK UI는 적합하지 않습니다(예: 소형 화면 디스플레이). 대상 예를 들어, 오토바이를 이용하는 경우 사용자가 목표에 더 빨리 도달할 수 있도록 도와주는 프로젝트 탐색 전용 가이드 방해 요소를 최소화하여 더 자신 있게 연습하세요.

필수 탐색 디스플레이 요소

15m 후 교회에서 우회전해야 할 방향이 표시된 휴대기기 화면
도로명입니다. 화면 하단에 목적지까지 남은 시간이 13입니다
분, 남은 거리는 2.1
마일

각 탐색 단계의 기본 필드는 전체 도로명입니다. 스텝의 이동 거리 및 이동 거리를 확인할 수 있으며, GMSNavigationStepInfo.

전체 여정에 대해 남은 시간과 목적지까지의 거리이며, 이 모든 것은 GMSNavigationNavInfo를 사용하여 설계할 수 있습니다. 오른쪽 이미지는 이러한 필수 탐색 요소의 예를 보여줍니다.

이벤트 리스너 설정

탐색 전용 데이터를 사용하려면 didChangeNavInfo 이벤트를 사용합니다. 이벤트 리스너 내에서 trip 및 단계별 내비게이션을 제공할 수 있습니다.

이벤트 핸들러를 구현하려면 지도의 뷰 컨트롤러가 GMSNavigatorListener 드림 사용할 수 있습니다 iOS용 Navigation SDK의 이벤트 처리에 대한 자세한 내용은 탐색 이벤트 수신 대기를 참고하세요.

didChangeNavInfo 이벤트 처리

세부 경로 안내 지원을 추가할 didChangeNavInfo 이벤트 리스너를 만듭니다. 있습니다. 이벤트 리스너에서 다음 클래스와 enum을 사용하여 세부 경로 안내 내비게이션:

  • GMSNavigationNavInfo 드림 — 탐색 상태에 관한 정보를 정의하는 클래스입니다.

  • GMSNavigationStepInfo 드림 — 탐색 경로를 따라 하나의 단계에 대한 정보를 정의하는 클래스입니다.

  • GMSNavigationNavState 드림 — 탐색의 현재 상태를 정의하는 열거형(예: enroute, 중지될 수 있습니다

  • 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
          ...
        }
      }
    }
  }

GMSNavigationNavInfonavState 속성 사용 다음 중 하나인 현재 탐색 상태를 가져옵니다.

  • 경로 중 - GMSNavigationNavStateEnroute 상태는 가이드 내비게이션이 진행 중임을 의미합니다. 현재 활성 상태이고 사용자가 제공된 경로에 있는 것입니다. 다음에 관한 정보 현재 예정된 조작 단계를 사용할 수 있습니다.

  • 경로 변경 - GMSNavigationNavStateRerouting는 탐색이 진행 중이지만 네비게이터가 새로운 경로를 찾고 있습니다. 다음 작전 단계는 사용할 수 있습니다. 아직 새로운 경로가 없기 때문입니다.

  • 중지됨: GMSNavigationNavStateStopped는 탐색이 종료되었음을 의미합니다. 예를 들어 사용자가 앱에서 내비게이션을 종료하면 내비게이션이 중지됩니다. 샘플 앱에서는 GMSNavigationNavStateStopped 상태는 탐색 정보 디스플레이를 지웁니다. 자세한 단계별 안내가 표시되지 않도록 하세요.

차선 안내

Navigation SDK는 내비게이션 세부 경로 카드의 차선을 다음과 같이 나타냅니다. GMSNavigationLaneGMSNavigationLaneDirection 데이터 객체 가 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 enum은 탐색 중에 발생할 수 있는 각 가능한 조작을 정의합니다. 은 지정된 단계의 maneuver 속성에서 GMSNavigationStepInfo입니다.

조작 아이콘을 생성하고 이를 연결된 동작과 페어링해야 합니다. 일부 작업의 경우 아이콘에 일대일 매핑을 설정할 수 있습니다(예: GMSNavigationManeuverDestinationLeftGMSNavigationManeuverDestinationRight입니다. 그러나 일부 조작은 운용하는 방법에 따라 두 개 이상의 지도를 만들 수 있습니다. 단일 아이콘으로 변경할 수 있습니다. 예를 들면 GMSNavigationManeuverTurnLeftGMSNavigationManeuverOnRampLeft은(는) 모두 왼쪽 회전 아이콘에 매핑될 수 있습니다.

일부 조작에는 추가적인 '시계 방향' 또는 "시계 반대 방향" 라벨, 국가별 운전 방향에 따라 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는 지정된 UI의 조작 아이콘 생성을 지원합니다. 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];