Rota bilgisi alın

Mevcut rotanın sürelerini, mesafelerini ve rota ayaklarını almak üzere uygulamanızı ayarlamak için bu kılavuzu uygulayın.

Genel Bakış

Mevcut rota hakkında bilgi edinmek için navigator örneğinden uygun özelliği alın:

Kodu göster

Bir sonraki varış noktasına kalan süre hesaplanıyor

Bir sonraki hedefe ne kadar sürede varacağınızı öğrenmek için timeToNextDestination() yöntemini çağırın. Bu, NSTimeInterval değerini döndürür. Aşağıdaki örnekte, bir sonraki varış noktasına kadar geçen sürenin günlüğe kaydedilmesi gösterilmektedir:

Swift

if let navigator = mapView.navigator {
  let time = navigator.timeToNextDestination
  let minutes = floor(time/60)
  let seconds = round(time - minutes * 60)
  NSLog("Time to next destination: %.0f:%.0f", minutes, seconds)
}

Objective-C

NSTimeInterval time = _mapView.navigator.timeToNextDestination;
int minutes = floor(time/60);
int seconds = round(time - minutes * 60);
NSLog(@"%@", [NSString stringWithFormat:@"Time to next destination: %i:%i.", minutes, seconds]);

Sonraki varış noktasına olan mesafe hesaplanıyor

Bir sonraki hedefe olan mesafeyi öğrenmek için distanceToNextDestination() deyin. Bu, CLLocationDistance değerini döndürür. Birimler metre cinsinden belirtilir.

Swift

if let navigator = mapView.navigator {
  let distance = navigator.distanceToNextDestination
  let miles = distance * 0.00062137
  NSLog("Distance to next destination: %.2f miles.", miles)
}

Objective-C

CLLocationDistance distance = _mapView.navigator.distanceToNextDestination;
double miles = distance * 0.00062137;
NSLog(@"%@", [NSString stringWithFormat:@"Distance to next destination: %.2f.", miles]);

Sonraki varış noktasına giden yoldaki trafik koşulları alınıyor

Bir sonraki hedefe giden trafik akışını gösteren bir değer almak için delayCategoryToNextDestination yöntemini çağırın. Bu parametre GMSNavigationDelayCategory değerini döndürür. Aşağıdaki örnekte, sonucun değerlendirilmesi ve trafik mesajının günlüğe kaydedilmesi gösterilmektedir:

Swift

if let navigator = mapView.navigator {
  // insert sample for evaluating traffic value
  let delay = navigator.delayCategoryToNextDestination
  let traffic = "unavailable"
  switch delay {
    case .noData:
      traffic = "unavailable"
    case .heavy:
      traffic = "heavy"
    case .medium:
      traffic = "moderate"
    case .light:
      traffic = "light"
    default:
      traffic = "unavailable"
  }
  print("Traffic is \(traffic).")
}

Objective-C

GMSNavigationDelayCategory delay = mapView.navigator.delayCategoryToNextDestination;
NSString *traffic = @"";

switch (delayCategory) {
    case GMSNavigationDelayCategoryNoData:
      traffic = @"No Data";
      break;
    case GMSNavigationDelayCategoryHeavy:
      traffic = @"Heavy";
      break;
    case GMSNavigationDelayCategoryMedium:
      traffic = @"Medium";
      break;
    case GMSNavigationDelayCategoryLight:
      traffic = @"Light";
      break;
    default:
      NSLog(@"Invalid delay category: %zd", delayCategory);
 }

NSLog(@"%@", [NSString stringWithFormat:@"Traffic is %@.", traffic]);

Mevcut etapla ilgili bilgi alma

Mevcut rota ayağı hakkında bilgi almak için currentRouteLeg işlevini çağırın. Bu işlem, aşağıdakileri alabileceğiniz bir GMSRouteLeg örneği döndürür:

  • Ayağın hedefi.
  • Ayaktaki son koordinat.
  • Rota ayağını oluşturan koordinatları içeren yol.

Aşağıdaki örnekte, bir sonraki rota ayağının başlığının ve enlem/boylam koordinatlarının nasıl günlüğe kaydedileceği gösterilmektedir:

Swift

if let navigator = mapView.navigator {
  let currentLeg = navigator.currentRouteLeg
  let nextDestination = currentLeg?.destinationWaypoint?.title
  let lat = currentLeg?.destinationCoordinate.latitude.description
  let lng = currentLeg?.destinationCoordinate.longitude.description
  NSLog(nextDestination! + ", " + lat! + "/" + lng!)
}

Objective-C

GMSRouteLeg *currentSegment = _mapView.navigator.currentRouteLeg;
NSString *nextDestination = currentSegment.destinationWaypoint.title;
CLLocationDegrees lat = currentSegment.destinationCoordinate.latitude;
CLLocationDegrees lng = currentSegment.destinationCoordinate.longitude;
NSLog(@"%@", [NSString stringWithFormat:@"%@, %f/%f", nextDestination, lat, lng]);

En son gidilen yol alınıyor

En son gidilen yolu almak için traveledPath işlevini çağırın. Bu, gereksiz noktaları kaldırmak için basitleştirilmiş bir GMSPath örneği döndürür (örneğin, ardışık doğrusal noktaları tek bir çizgi segmentine dönüştürür). Bu yol, rehberlik başlatılana kadar boştur. Aşağıdaki örnekte, en son seyahat edilen yolun nasıl alınacağı gösterilmektedir:

Swift

if let navigator = mapView.navigator {
  let latestPath = navigator.traveledPath
  if latestPath.count() > 0 {
    let begin: CLLocationCoordinate2D = latestPath.coordinate(at: 0)
    let current: CLLocationCoordinate2D = latestPath.coordinate(at: latestPath.count() - 1)
    print("Path from (\(begin.latitude),\(begin.longitude)) to (\(current.latitude),\(current.longitude))")
  }
}

Objective-C

GMSPath *latestPath = mapView.navigator.traveledPath;
if (latestPath.count > 0) {
  CLLocationCoordinate2D begin = [latestPath coordinateAtIndex:0];
  CLLocationCoordinate2D current = [latestPath coordinateAtIndex:latestPath.count - 1];
  NSLog(@"Path from %f/%f to %f/%f",
        begin.latitude,
        begin.longitude,
        current.latitude,
        current.longitude);
}