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 rota jetonunu kullanarak planlanan rotanız için iki şeyi belirtebilirsiniz:

  • Rota için çoklu çizgi

  • Rota hedefleriniz

Örneğin, sahip olabileceğiniz bazı rota hedefleri şunlardır:

  • Teslimat süresini en aza indirme: Yemek teslim eden bir işletme, yemeğin teslimat süresini en aza indirmek isteyebilir.

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

  • Hedefe ulaşma süresini en aza indirme: Bir hizmet sevk işlemi, operatörlerin bir iş isteğine ulaşması için gereken süreyi en aza indirmek isteyebilir.

  • Maliyetleri düşürme ve güvenliği artırma: Bir araç paylaşımı işletmesi, 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 isteme ve Route Optimization API'deki Polylines ve Rota Jetonları Arasında Geçiş başlıklı makaleleri inceleyin.

Rota hedefleri için neden rota jetonu kullanmalısınız?

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

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

  • Navigation SDK'nın kullanacağı en iyi rotayı seçme Routes API'de rota oluştururken rota jetonları isteğinde bulunursanız oluşturulan her rota için bir rota jetonu alırsınız. Ardından, kullanmak istediğiniz rotanın jetonunu seçerek Navigation SDK'ya iletebilirsiniz.

  • 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 ve 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. Bu API'lerden herhangi birinden döndürülen rota jetonunu, aracınızın rotasını nasıl belirleyeceğini yönlendirmek için Navigation SDK'sına iletebilirsiniz.

Rota jetonu istediğinizde ve kullandığınızda gerçekleşen işlemler:

  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 Navigasyon SDK'sına iletirsiniz.

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

  4. Rota üzerinde sürüş sırasında trafik veya diğer yol koşulları değişirse ya da bir araç planlanan rotadan saparsa değiştirilen rotalar, jetondaki rota hedeflerine göre sürekli olarak en iyi rotayı eşleştirmeye ç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 edilememesinin olası nedenleri

Planladığınız rotayı ve rota hedeflerini, uyulması gereken kurallar olarak düşünün. Bunlar kuralcı değildir. Yol koşulları, başlangıç konumu veya planlanan rotayı oluşturmanızdan sonra değişen diğer parametrelerdeki farklılıklar nedeniyle, planlanan rotanız ile rehberli navigasyon tarafından sağlanan rota arasında fark görebilirsiniz. Bu fark, mesafe ve TVS gibi önemli yolculuk özellikleriyle 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 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. Route Optimization API'de rota jetonu isteme hakkında daha fazla bilgi için Geçiş Çoklu Çizgileri ve Rota Jetonları başlıklı makaleyi inceleyin.

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

    • travel_mode değerini DRIVE veya TWO_WHEELER olarak ayarlayın
    • routing_preference değerini TRAFFIC_AWARE veya TRAFFIC_AWARE_OPTIMAL olarak ayarlayın
    • Via ara noktaları 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 kullanarak rota jetonunu Navigation SDK'sına iletin. Rota jetonunu oluştururken kullandığınız hedef ara noktaları belirtin:

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

    setDestinations yöntemi, isteğin durumunu geri çağırma işlevine iletir. Kullanıcının konumundan belirtilen hedefe bir rota bulunursa durum .OK (GMSRouteStatusOK) olur.

Çok duraklı senaryolar

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

setDestinations yöntemi, birden fazla duraklı yolculukları desteklemez. Yol noktasını yolculuğun bir sonraki ayağına ilerletmek için continueToNextDestinationWithCompletion() düğmesini kullanın.

Örnek

Aşağıdaki kod örneklerinde, planlanan 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:location 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 setDestinations:@[waypoint1, waypoint2]
                        routeToken:routeToken
                          callback:^(GMSRouteStatus routeStatus){...}];

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

Navigation SDK tarafından oluşturulan rota ile rota jetonundaki planlanan rota şu şekilde etkileşime girer:

  • Daha önce ayarlanan tüm 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.

  • Yönlendirmeyle ilgili aşağıdaki seçenekleri gereksiz olduğu için yok sayar:

    • avoidsHighways
    • avoidsTolls
    • avoidsFerries
    • licensePlateRestriction
  • Takipçiler:

    • Yol kenarı tercihi gibi ara nokta ile ilgili seçenekler.

    • Rota hedefleri Navigation SDK'nın döndürülen rotayı ayarlaması gerekiyorsa rota jetonunu isterken belirttiğiniz rota hedeflerini kullanır. Bu nedenle, Routes API'de belirttiğiniz ara nokta ile ilgili seçenekleri kullanmanız gerekir.