Rota planlama

Bazen, uygulamanızın kullanıcılara sunduğu rotayı planlamak isteyebilirsiniz. Routes API, Routes Preferred API veya Route Optimization API'den alınan bir rota jetonu kullanmak, planlanan rotanız için iki şeyi belirtmenize yardımcı olabilir:

  • Rota için çoklu çizgi

  • Rota hedefleriniz

Örneğin, sahip olabileceğiniz bazı yönlendirme hedefleri şunlardır:

  • Teslimat süresini kısaltma: Yemek teslimatı yapan bir işletme, yemeğin teslimat süresini kısaltmak isteyebilir.

  • Seyahat süresini veya yakıt tüketimini en aza indirme: Bir lojistik şirketi, sürücülerinin verimliliğini artırmak ve yakıt maliyetlerini düşürmek isteyebilir.

  • Hedefe ulaşma süresini en aza indirme: Bir hizmet gönderme işlemi, operatörlerin bir iş isteğine ulaşma süresini en aza indirmek isteyebilir.

  • Maliyetleri düşürme ve güvenliği artırma: Bir araç paylaşımı şirketi, yolcular için daha az maliyetli olan ve güvenlik nedeniyle belirli bölgelerden kaçınan bir rota bulmak isteyebilir.

Rota jetonu kullanarak rota planlama hakkında daha fazla bilgi için Routes API'deki Rota jetonu isteğinde bulunma ve Route Optimization API'deki Çoklu Çizgileri ve Rota Jetonlarını Geçiş başlıklı makaleleri inceleyin.

Rota hedefleri için neden rota jetonu kullanılmalıdır?

Routes API, Routes Preferred API veya Route Optimization API'den alınan bir rota jetonuyla, sağlanan rota üzerinde daha fazla kontrol sahibi olursunuz:

  • Mümkün olduğunda Navigasyon SDK'sının kullanması için önceden bir rota planlayın.

  • Navigasyon SDK'sının kullanacağı en iyi rotayı seçin. Rotalar API'sinde rota oluştururken rota jetonları isteğinde bulunursanız oluşturulan her rota için bir rota jetonu alırsınız. Ardından, Navigation SDK'ya iletirken kullanmak istediğiniz rotanın jetonunu seçebilirsiniz.

  • Tahmini varış zamanı ve mesafe tahminleri de dahil olmak üzere fiyatı önceden tahmin edin. Gerçek maliyet ve süre değişebilir ancak bu tahmin, beklenen rota maliyeti ile gerçek rota maliyeti arasındaki farkı azaltır.

  • Daha gelişmiş rota hedefleri belirleyin (ör. çevre dostu rota veya en kısa rota).

Rota jetonlarının işleyiş şekli

Rota hedeflerini kullanarak rota planlamak için Routes API, Routes Preferred API veya Route Optimization API'yi kullanabilirsiniz. Aracınızın rotasını belirleme konusunda Navigation SDK'ya yol göstermek için bu API'lerden herhangi birinden döndürülen rota jetonunu Navigation SDK'ya iletebilirsiniz.

Rota jetonu istediğinizde ve kullandığınızda şunlar olur:

  1. Routes API, Routes Preferred API veya Route Optimization API, rota poliline ve rota hedeflerini içeren şifrelenmiş bir rota jetonu döndürür.

  2. Rota jetonunu Navigation SDK'sına iletirsiniz.

  3. Navigation SDK, rotayı alır. Koşulların değişmesi nedeniyle rota kullanılamıyorsa en uygun rotayı alır.

  4. Rotada ilerlerken trafik veya diğer yol koşulları değişirse ya da araç planlanan rotadan saparsa değiştirilen rotalar, jetondaki rota hedeflerine göre en iyi rotayla eşleşmeye çalışır.

Bu işlem, gerçek rotanın planlanan rotanıza ne kadar yakın olduğunu en üst düzeye çıkarır.

Planlanan rotanın tam olarak takip edilmemesinin nedenleri

Planladığınız rotayı ve rota hedeflerini, uyulması gereken yönergeler olarak düşünün. Bunlar zorunlu değildir. Planlanan rotayı oluşturduğunuzdan beri yol koşulları, başlangıç konumu veya diğer parametrelerde değişiklikler yapıldıysa planlanan rotanız ile rehberli navigasyonun sağladığı rota arasında farklılık görebilirsiniz. Bu fark, diğer önemli yolculuk özelliklerinin yanı sıra mesafe ve tahmini varış zamanı ile ilgili planlanan ve gerçek hedefleriniz arasında uyuşmazlığa neden olabilir.

Rota jetonu kullanarak rota planlama

Aşağıdaki adımlarda açıklandığı gibi bir rota jetonu oluşturup ardından Navigation SDK'ya ileterek rota planlayabilirsiniz:

1. adım: Routes API, Routes Preferred API veya Route Optimization API'yi kullanarak rota jetonu oluşturun

  1. Aşağıdaki yöntemlerden birini kullanarak rota jetonu isteyin:

    • Routes API: computeRoutes. Routes API'de rota jetonu isteme hakkında daha fazla bilgi için Rota hesaplama ve Rota jetonu isteme başlıklı makaleleri inceleyin.

    • Routes Preferred API: computeCustomRoutes. Routes Preferred API'de rota jetonu isteme hakkında daha fazla bilgi için Rota planlama başlıklı makaleyi inceleyin.

    • Route Optimization API: optimizeTours veya batchOptimizeTours. Rota Optimizasyonu API'sinde rota jetonu isteme hakkında daha fazla bilgi için Çoklu Çizgileri ve Rota Jetonlarını Geçiş başlıklı makaleyi inceleyin.

  2. Routes API veya Routes Preferred API isteğinizi rota jetonu kullanma şartlarını karşılayacak şekilde ayarlayın:

    • travel_mode öğesini DRIVING veya TWO_WHEELER olarak ayarlayın
    • routing_preference öğesini TRAFFIC_AWARE veya TRAFFIC_AWARE_OPTIMAL olarak ayarlayın
    • Via ara noktası KULLANMAYIN

2. adım: Rota jetonunu Navigation SDK'ya iletin

  1. Rota jetonunu saklama: Navigation SDK'da rota jetonunu saklamak için bir dize ayarlayın. Örneğin:

    let routeToken = "route token returned by Routes API"
    

    Döndürülen rota jetonu örneği:

    {
    // Other fields
    "routeToken": "CqMBCjoKCJQOor5DHcwiEhBon3XpHXFnVvDeWMwd9PpAGgz6wtnFDKIBrAHTARpCApUDSggAAAAACjcrP3gBEAQaTApKChgKDQoCCAERAAAAAACAZkAR3SQGgZUXdUASEggAEAMQBhATEBIYAkIEGgIIBSIYChZ2VEJiWlBPSkk1aU5wUVRzNTV5d0FRKAEiFQBcJuds-Efh-2QZhOMTtUCCxEVL_g",
    }
    
  2. mapView.navigator setDestinations yöntemini kullanarak rotayı oluştururken kullandığınız hedef yol noktalarını belirterek rota jetonunu Navigation SDK'ya iletin:

    mapView.navigator?.continueToNextDestination([waypoint1, waypoint2], routeToken: routeToken, callback: {...})
    

    Navigator.continueToNextDestination yöntemi, isteğin durumunu döndürür. Kullanıcının konumundan belirtilen hedefe bir rota bulunursa RouteStatus.OK döndürülür.

Çok duraklı senaryolar

En fazla 25 yol noktası yapılandırabilirsiniz.

setDestinations yöntemi, birden fazla duraklı yolculukları desteklemez. continueToNextDestination() simgesini kullanarak yol noktasını yolculuğun bir sonraki ayağına taşıyın.

Örnek

Aşağıdaki kod örneklerinde, planlanmış bir rotanın nasıl alınacağı gösterilmektedir.

Swift

let location = CLLocationCoordinate2D(latitude: 47.67, longitude: -122.20)
let waypoint1 = GMSNavigationWaypoint(location: location, title: "waypoint from location")!
let waypoint2 = GMSNavigationWaypoint(placeID: "samplePlaceID", title: "waypoint from Place ID")!

let routeToken = "route token returned by Routes API"
mapView.navigator?.setDestinations([waypoint1, waypoint2], routeToken: routeToken, callback: {...})

Objective-C

CLLocationCoordinate2D location = CLLocationCoordinate2DMake(47.67, -122.20);
GMSNavigationWaypoint *waypoint1 = [[GMSNavigationWaypoint alloc] initWithLocation:coordinate title:@"waypoint from location"];
GMSNavigationWaypoint *waypoint2 = [[GMSNavigationWaypoint alloc] initWithPlaceID:@"samplePlaceID"
                                                                            title:@"waypoint from Place ID"];
NSString *routeToken = @"route token returned by Routes API";

[mapView.navigator continueToNextDestination:@[waypoint1, waypoint2]
                         routeToken:routeToken
                           callback:^(GMSRouteStatus routeStatus){...}];

Rota jetonları ve Navigation SDK'nın etkileşimi

Navigasyon SDK'sı tarafından oluşturulan rota ile rota jetonundaki planlanan rota arasındaki etkileşim şu şekildedir:

  • Daha önce ayarlanan hedefleri geçersiz kılar.

  • Aracın başlangıç konumunu kullanır.

  • Yol ve trafik koşullarına göre ayarlanır. Planlanan bir rotanın neden tam olarak takip edilmeyebileceğini öğrenin.

  • Aşağıdaki yönlendirmeyle ilgili seçenekleri gereksiz olduğu için yoksayar:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Takipler:

    • Yolun hangi tarafında durulacağı tercihi gibi yol noktasıyla ilgili seçenekler.

    • Rota hedefleri Navigation SDK'nın döndürülen rotayı ayarlaması gerekiyorsa rota jetonu istenirken belirtilen rota hedeflerini kullanır. Bu nedenle, Routes API'de belirttiğiniz aynı yol noktasıyla ilgili seçenekleri kullanmanız gerekir.