Adım adım veri feed'iyle ilgili ayrıntılar

Adım adım veri feed'i, harita tabanlı navigasyon yardımı için tasarlanmamış cihazlara yalnızca navigasyon bilgileri sağlar. Sağladığınız öğelerle yaklaşan manevraları gösterir:

  • simgeleri (sol, sağ, U dönüşü)
  • döner kavşaklarda dönüş numaraları
  • yol adları
  • Bir sonraki navigasyon adımına veya nihai hedefe olan tahmini mesafe ve süre

Adım adım feed'i kullanarak, Navigation SDK kullanıcı arayüzünün tamamının uygun olmadığı (ör. küçük ekranlar) deneyimler oluşturabilirsiniz. Örneğin, iki tekerlekli araç sürücülerinin dikkatlerini dağıtmadan, daha hızlı ve güvenli bir şekilde hedeflerine ulaşmalarına yardımcı olmak için yalnızca navigasyon rehberliğini yansıtabilirsiniz.

Temel navigasyon ekranı öğeleri

Mobil ekranda, 15 metre sonra Church Street'e sağa dönüş gösteriliyor. Ekranın alt kısmında, varış noktasına kalan süre 13 dakika, kalan mesafe ise 2,1 mil olarak gösteriliyor.

Her navigasyon adımının birincil alanları, tam yol adı, manevra ve adımın toplam mesafesidir. Bunlar GMSNavigationStepInfo içinde mevcuttur.

Gezinin tamamı için, mevcut adıma veya hedefe kalan süreyi ve mesafeyi göstermek isteyebilirsiniz. Bunların tümü GMSNavigationNavInfo içinde mevcuttur. Sağdaki resimde bu temel gezinme öğelerinin bir örneği gösterilmektedir.

Etkinlik işleyici oluşturma

Yalnızca gezinme verilerini kullanmak için didChangeNavInfo etkinliği için bir etkinlik işleyici uygulamanız gerekir. Kullanıcılarınıza adım adım rota sağlamak için etkinlik işleyicide gezi ve adım bilgilerine erişin.

Etkinlik işleyicileri uygulamak için haritanın görünüm denetleyicisi GMSNavigatorListener protokolünü uygulamalıdır. iOS için Navigasyon SDK'sında etkinlikleri işleme hakkında ayrıntılı bilgi edinmek istiyorsanız Navigasyon etkinliklerini dinleme başlıklı makaleyi inceleyin.

didChangeNavInfo etkinliğini işleme

Uygulamanıza adım adım rota desteği eklemek için didChangeNavInfo etkinliğine yönelik bir dinleyici oluşturun. Etkinlik dinleyicide, adım adım rotayı kontrol etmek için aşağıdaki sınıfları ve enum'ları kullanın:

Aşağıda, didChangeNavInfo etkinliği için örnek etkinlik işleyiciler gösterilmektedir:

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

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

Navigasyonun mevcut durumunu öğrenmek için GMSNavigationNavInfo öğesinin navState özelliğini kullanın. Bu özellik, aşağıdakilerden biridir:

  • Yolda: GMSNavigationNavStateEnroute durumu, sesli navigasyonun etkin olduğu ve kullanıcının sağlanan rotada olduğu anlamına gelir. Yaklaşan manevra adımıyla ilgili bilgiler mevcut.

  • Yeni rota çiziliyor - GMSNavigationNavStateRerouting, navigasyonun devam ettiği ancak navigasyon cihazının yeni bir rota aradığı anlamına gelir. Henüz yeni bir rota olmadığından yaklaşan manevra adımı kullanılamıyor.

  • Durduruldu - GMSNavigationNavStateStopped, navigasyonun sona erdiğini gösterir. Örneğin, kullanıcı uygulamada navigasyondan çıktığında navigasyon durur. Örnek uygulamada, GMSNavigationNavStateStopped durumu, navigasyon bilgi ekranını temizleyerek kalan adım talimatlarının gösterilmesini engeller.

Şerit yardımı

Navigasyon SDK'sı, navigasyon rota kartındaki şeritleri GMSNavigationLane ve GMSNavigationLaneDirection veri nesneleri olarak temsil eder. GMSNavigationLane nesnesi, navigasyon sırasında belirli bir şeridi temsil eder ve bu şeritten yapılabilecek tüm dönüşleri açıklayan GMSNavigationLaneDirection nesnelerinin listesini içerir.

Sürücünün bir şeritte gitmesi önerilen yön, recommended alanı kullanılarak işaretlenir.

Şerit yardımı örneği

Aşağıdaki snippet, önceki ekran görüntüsünde gösterilen şeritlerin veri temsilini göstermektedir.

// 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}]

Şerit yardımı resimleri

Navigasyon SDK'sı, GMSNavigationStepInfo tarafından iletilen her navigasyon adımı için şerit resimleri oluşturmayı destekler. Bu simgeler, CarPlay'in resim boyutlandırma yönergelerine uygundur.

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];
      

Manevralar için simge oluşturma

Manevra simgesi

GMSNavigationManeuver enum'u, navigasyon sırasında gerçekleşebilecek her olası manevrayı tanımlar. Belirli bir adımın manevrasını GMSNavigationStepInfo'ın maneuver özelliğinden alabilirsiniz.

Manevra simgeleri oluşturmanız ve bunları ilişkili manevralarla eşlemeniz gerekir. Bazı manevralar için GMSNavigationManeuverDestinationLeft ve GMSNavigationManeuverDestinationRight gibi bir simgeyle bire bir eşleme ayarlayabilirsiniz. Ancak bazı manevralar diğer manevralarla ortak özelliklere sahip olduğundan, birden fazla manevrayı tek bir simgeyle eşlemek isteyebilirsiniz. Örneğin, hem GMSNavigationManeuverTurnLeft hem de GMSNavigationManeuverOnRampLeft, sola dönüş simgesiyle eşlenebilir.

Bazı manevralar, SDK'nın bir ülkenin sürüş tarafına göre belirlediği ek bir "Saat yönünde" veya "Saat yönünün tersine" etiketi içerir. Örneğin, trafiğin soldan aktığı ülkelerde sürücüler döner kavşaklarda veya U dönüşü yaparken saat yönünde hareket ederken trafiğin sağdan aktığı ülkelerde saat yönünün tersine hareket ederler. Navigation SDK, manevranın soldan veya sağdan akan trafikte gerçekleşip gerçekleşmediğini algılar ve uygun manevrayı gösterir. Bu nedenle, saat yönünde ve saat yönünün tersine manevra simgeleri farklı olabilir.

Farklı manevralar için örnek simgeleri görmek üzere genişletin

Örnek Simgesi Adım Adım Manevralar
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

Oluşturulan simgeleri kullanma

Navigasyon SDK'sı, belirli bir GMSNavigationStepInfo için manevra simgelerinin oluşturulmasını destekler. Bu simgeler, CarPlay resim boyutlandırma kılavuzuna uygundur.

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];