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şaklardaki dönüş sayıları
  • yol adları
  • bir sonraki navigasyon adımına veya nihai hedefe olan tahmini mesafeler ve süre

Tam Navigation SDK kullanıcı arayüzünün uygun olmadığı deneyimler (ör. küçük ekranlı görüntüler) 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, yalnızca navigasyon talimatlarını yansıtarak sürücülerin gidecekleri yere daha hızlı ve güvenli bir şekilde, dikkatleri dağılmadan ulaşmalarına yardımcı olabilirsiniz.

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

Bir cep telefonu ekranında, 15 metre sonra Church Caddesi'ne sağa dönüleceğini gösteren bir görüntü. Ekranın alt kısmında, hedefe ulaşmak için kalan süre 13 dakika, kalan mesafe ise 2,1 mil olarak gösteriliyor.

Her gezinme adımının birincil alanları, GMSNavigationStepInfo içinde kullanılabilen tam yol adı, manevra ve adımın toplam mesafesidir.

Genel gezi için, mevcut adıma veya hedefe kalan süreyi ve mesafeyi göstermek isteyebilirsiniz. Bunların tümü GMSNavigationNavInfo içinde kullanılabilir. 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. Etkinlik işleyicisi içinde, kullanıcılarınıza adım adım yol tarifi sağlamak için 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'da 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ğini işleme

Uygulamanıza adım adım yol tarifi desteği eklemek için didChangeNavInfo etkinliği için bir işleyici oluşturun. Etkinlik işleyicide, adım adım yol tarifini kontrol etmek için aşağıdaki sınıfları ve numaralandırmaları kullanın:

  • GMSNavigationNavInfo — Gezinmenin durumu hakkında sınıf tanımlayan bilgiler.

  • GMSNavigationStepInfo — Bir gezinme rotası üzerindeki tek bir adımla ilgili sınıf tanımlama bilgileri.

  • GMSNavigationNavState — Enum defining the current state of a navigation, such as enroute, rerouting, or stopped.

  • 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ğine ilişkin ö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;
        ...
      }
    }
    ...
  }

Gezinmenin mevcut durumunu almak için GMSNavigationNavInfo öğesinin navState özelliğini kullanın. Bu özellik aşağıdaki değerlerden birini alır:

  • Yolda: GMSNavigationNavStateEnroute durumu, rehberli navigasyonun etkin olduğunu ve kullanıcının sağlanan rotada olduğunu gösterir. Mevcut yaklaşan manevra adımıyla ilgili bilgiler kullanılabilir.

  • Yeniden yönlendirme: GMSNavigationNavStateRerouting, navigasyonun devam ettiğini ancak navigasyon cihazının yeni bir rota aradığını gösterir. Henüz yeni bir rota olmadığı için bir sonraki manevra adımı kullanılamıyor.

  • Durduruldu: GMSNavigationNavStateStopped, navigasyonun sona erdiği anlamına gelir. Örneğin, kullanıcı uygulamada navigasyondan çıktığında navigasyon durur. Örnek uygulamada, GMSNavigationNavStateStopped durumu, adım talimatlarının görüntülenmesini önlemek için navigasyon bilgisi ekranını temizler.

Şerit yardımı

Navigation SDK, 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üşleri açıklayan bir GMSNavigationLaneDirection nesne listesine sahiptir.

Bir sürücünün ş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 belirtildiği şekilde her navigasyon adımı için şerit görüntüleri 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

Bir manevra simgesi

GMSNavigationManeuver enum'ı, gezinme sırasında gerçekleşebilecek her olası manevrayı tanımlar. Belirli bir adım için manevrayı GMSNavigationStepInfo öğesinin maneuver özelliğinden alabilirsiniz.

Manevra simgeleri oluşturmalı ve bunları ilgili manevralarla eşleştirmelisiniz. Bazı manevralar için GMSNavigationManeuverDestinationLeft ve GMSNavigationManeuverDestinationRight gibi bir simgeyle bire bir eşleme ayarlayabilirsiniz. Ancak bazı manevralar diğer manevralarla benzer özelliklere sahip olduğundan tek bir simgeye birden fazla manevra eşlemek isteyebilirsiniz. Örneğin, hem GMSNavigationManeuverTurnLeft hem de GMSNavigationManeuverOnRampLeft, sola dönüş simgesiyle eşlenebilir.

Bazı manevralarda ek olarak "Saat Yönünde" veya "Saat Yönünün Tersine" etiketi bulunur. Bu etiket, SDK tarafından ülkenin sürüş tarafına göre belirlenir. Örneğin, yolun sol tarafında araç kullanmanın yaygın olduğu ülkelerde sürücüler, kavşaklarda veya U dönüşlerinde saat yönünde hareket ederken yolun sağ tarafında araç kullanmanın yaygın olduğu ülkelerde saat yönünün tersine hareket eder. Navigation SDK, manevranın soldan mı yoksa sağdan akan trafikte mi gerçekleştiğini algılar ve uygun manevrayı verir. Bu nedenle, manevra simgeniz saat yönünde ve saat yönünün tersine manevralarda 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 simgeleri oluşturulmasını destekler. Bu simgeler, CarPlay'in görüntü 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];