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

Adım adım yol tarifi veri feed'i, haritaya dayalı navigasyon kılavuzu için tasarlanmamış cihazlara yalnızca navigasyon bilgileri sağlar. Sağlanan öğelerle yaklaşan manevralar için aşağıdakiler sağlanır:

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

Küçük ekranlı ekranlar gibi tam Navigasyon SDK'sı kullanıcı arayüzünün uygun olmadığı deneyimler oluşturmak için adım adım yol tarifi feed'ini kullanabilirsiniz. Örneğin, iki tekerlekli araç sürücüleri için bu özelliği kullanabilirsiniz. Bu sayede, sürücülerin dikkatini dağıtmadan gidecekleri yere daha hızlı ve güvenle ulaşmalarına yardımcı olmak için yalnızca navigasyon rehberliği yansıtabilirsiniz.

Temel gezinme görüntüleme öğeleri

15 metre sonra Church Street'e doğru sağa döneceğinizi gösteren bir mobil ekran. Ekranın alt kısmında, hedefe kalan süre 13 dakika, kalan mesafe ise 3,4 kilometredir.

Her navigasyon adımı için birincil alanlar, GMSNavigationStepInfo alanında bulunan yol adının tamamı, manevra ve adımın toplam mesafesidir.

Genel yolculuk için, mevcut adıma veya hedefe kalan süreyi ve mesafeyi görüntülemek 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 yol tarifi sunmak için etkinlik dinleyicisinde gezi ve adım bilgilerine erişin.

Etkinlik işleyicileri uygulamak için haritanın görüntü denetleyicisinin GMSNavigatorListener protokolünü uygulaması gerekir. iOS için Gezinme SDK'sında etkinlikleri işleme hakkında ayrıntılı bilgi için Gezinme etkinliklerini dinleme başlıklı makaleyi inceleyin.

didChangeNavInfo etkinliğini işleme

Uygulamanıza adım adım yol tarifi desteği eklemek için didChangeNavInfo etkinliği için bir dinleyici oluşturun. Adım adım yol tarifini kontrol etmek üzere etkinlik işleyicide aşağıdaki sınıfları ve enum'ları kullanın:

didChangeNavInfo etkinliği için örnek etkinlik işleyiciler aşağıda verilmiştir:

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

Gezinmenin mevcut durumunu almak için GMSNavigationNavInfo özelliğinin navState mülkünü kullanın. Bu durum aşağıdakilerden biridir:

  • Yolda: GMSNavigationNavStateEnroute durumu, rehberli navigasyonun şu anda etkin olduğu ve kullanıcının belirtilen rotada olduğu anlamına gelir. Yaklaşan mevcut manevra adımı hakkında bilgi edinebilirsiniz.

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

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

Şerit yardımı

Navigasyon SDK'sı, navigasyon dönüş 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 bir listesini içerir.

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

Şerit yardımı örneği

Aşağıdaki snippet'te, önceki ekran görüntüsünde gösterilen şeritlerin veri temsili gösterilmektedir.

// 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 aktarıldığı gibi her navigasyon adımı için şerit resimlerinin oluşturulmasını 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, gezinme sırasında gerçekleşebilecek her manevrayı tanımlar. Belirli bir adıma ait manevrayı GMSNavigationStepInfo öğesinin maneuver mülkünden 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 oluşturabilirsiniz. Ancak bazı manevralar diğer manevralarla ortak özelliklere sahip olduğundan birden fazla manevrayı tek bir simgeyle eşlemek isteyebilirsiniz. Örneğin, GMSNavigationManeuverTurnLeft ve GMSNavigationManeuverOnRampLeft, sol 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, sürüşlerin yolun sol tarafında yapıldığı ülkelerde sürücüler, döner kavşakta veya U dönüşünde saat yönünde hareket ederken, sürüşlerin yolun sağ tarafında yapıldığı ülkelerde saat yönünün tersine hareket ederler. Navigasyon SDK'sı, bir manevranın sol taraftaki trafikte mi yoksa sağ taraftaki trafikte mi gerçekleştiğini algılar ve uygun manevrayı döndürür. Bu nedenle, manevra simgeniz saat yönünde ve saat yönünün tersine yapılan manevralar için farklı olabilir.

Farklı manevralara ilişkin örnek simgeleri görmek için genişletin

Örnek simge 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 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];