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. Aşağıdaki öğeleri kullanarak 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 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üleri için bu özelliği kullanabilirsiniz. Bu sayede, sürücülerin dikkatlerini dağıtmadan, gidecekleri yere daha hızlı ve güvenli bir şekilde ulaşmalarına yardımcı olmak için yalnızca navigasyon rehberliğini yansıtabilirsiniz.

Temel navigasyon ekranı öğeleri

Church Caddesi'ne 15 metre sonra sağa dönüleceğini gösteren bir mobil ekran. 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.

Gezi genelinde, 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 ayarlama

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 sunmak için etkinlik işleyicide gezi ve adım bilgilerine erişin.

Etkinlik işleyicilerini uygulamak için haritanın görünüm denetleyicisinin GMSNavigatorListener protokolünü uygulaması gerekir. iOS için Navigation SDK'daki etkinlikleri işleme hakkında ayrıntılı bilgi için Listen for navigation events (Navigasyon etkinliklerini dinleme) başlıklı makaleyi inceleyin.

didChangeNavInfo etkinliği işleniyor

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:

  • GMSNavigationNavInfo — Navigasyonun durumuyla ilgili bilgileri tanımlayan sınıf.

  • GMSNavigationStepInfo — Navigasyon rotasındaki tek bir adımla ilgili bilgileri tanımlayan sınıf.

  • GMSNavigationNavState - Navigasyonun mevcut durumunu (ör. yolda, yeni rota çiziliyor veya durduruldu) tanımlayan enum.

  • GMSNavigationDrivingSide — Bu adımın sağdan veya soldan sürüş rotasında olup olmadığını tanımlayan enum.

  • GMSNavigationManeuver — Sola dönme veya sağa dönme gibi gerçekleştirilecek gezinme işlemini tanımlayan enum.

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 durum aşağıdakilerden biri olabilir:

  • Yolda: GMSNavigationNavStateEnroute durumu, rehberli navigasyonun etkin olduğunu ve kullanıcının sağlanan rotada olduğunu gösterir. 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ığı için 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, adım talimatlarının gösterilmeye devam etmesini önlemek için navigasyon bilgisi ekranını temizler.

Şerit yardımı

Navigasyon SDK'sı, navigasyon dönüş kartındaki şeritleri GMSNavigationLane ve GMSNavigationLaneDirection veri nesneleri olarak gösterir. Bir GMSNavigationLane nesnesi, gezinme sırasında belirli bir şeridi temsil eder ve bu şeritten yapılabilecek tüm dönüşümleri açıklayan bir GMSNavigationLaneDirection nesne listesine sahiptir.

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 gösterimini açıklar.

// 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 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'ı, 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ı ilgili 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ı manevralarda, 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 bulunur. Ö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ı verir. Bu nedenle, saat yönünde ve saat yönünün tersine manevra simgeleri farklı olabilir.

Farklı manevralara ait ö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 simgeleri oluşturmayı destekler. Bu simgeler, CarPlay'deki 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];