Rota çizgisi isteğinde bulunma

Hem computeRoutes yöntemi (REST) hem de ComputeRoutes yöntemi (gRPC), yanıtın bir parçası olarak çoklu çizgiyle temsil edilen rotayı döndürür. Bu API'ler iki tür çoklu çizgi döndürür:

  • Temel çoklu çizgi (varsayılan), trafik içermeyen bir rotayı temsil eder bilginin kaybolmamasına dikkat edin. Temel bir çoklu çizgi döndüren istekler Rotalar Temel ücreti üzerinden faturalandırılır. Daha fazla bilgi: faturalandırması ile ilgili verileri sunar.

  • Trafiğe duyarlı çoklu çizgi, trafik koşulları hakkında bilgiler içerir ilerler. Trafik koşulları, poli çizginin belirli bir aralığında geçerli olan hız kategorileri (NORMAL, SLOW, TRAFFIC_JAM) açısından ifade edilir. Trafiğe duyarlı çoklu çizgi istekleri Rotalar için tercih edilen ücret. Routes API için faturalandırma hakkında daha fazla bilgi edinin. Ayrıntılar için bkz. Çoklu çizgi kalitesini yapılandırma

Çoklu çizgiler hakkında daha fazla bilgi için:

Rota, bacak veya adım için temel bir poli çizgisi isteme

Çoklu çizgi, bir çoklu çizgiyle temsil edilir. Çoklu çizgi (REST) veya Çoklu çizgi (gRPC) nesnesi. Yanıtta rota, bacak ve adım düzeyinde bir çoklu çizgi döndürebilirsiniz.

Yanıt alanı maskesini kullanarak döndürülecek polilini belirtin:

  • Rota düzeyinde, yanıt alan maskesine routes.polyline ekleyerek yanıtta bir poli çizgi döndürün.

  • Bacak düzeyinde, routes.legs.polyline değerini ekleyerek rotanın her bir bacağı için yanıtta bir poli çizgi döndürün.

  • Adım düzeyinde, her bir adım için yanıtta bir çoklu çizgi döndürün bacağı routes.legs.steps.polyline içeriyor.

Örneğin, rotanın tamamı, her bir kol ve her bir kolun her bir adımı için bir çok çizgi döndürmek istiyorsanız:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.legs.steps.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Bu istek, rotanın, rotanın her bir kolunun ve kolun her bir adımını içeren aşağıdaki yanıtı döndürür:

{
  "routes": [
    {
      "legs": [
        {
          "polyline": {
              "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?"
          }
        },
          "steps": [
              {
                  "polyline": {
                      "encodedPolyline": "kclcF...@sC@YIOKI"
                  }
              },
              {
                  "polyline": {
                      "encodedPolyline": "wblcF~...SZSF_@?"
                  }
              },
              ...
      ],
      "distanceMeters": 56901,
      "duration": "2420s",
      "polyline": {
        "encodedPolyline": "ipkcFfich...@Bs@?A?O?SD{A@o@B}@I?qA?_AA_@@_@?"
      }
    }
  ]
}

Bu istek yalnızca bir başlangıç noktası ve bir hedef içerdiğinden, döndürülen rota yalnızca tek bir bacaktan oluşuyor. Bu nedenle, bacak ve bacak için çoklu çizgi aynıdır.

İsteğe ara yol noktası eklerseniz döndürülen rota iki bölümden oluşur:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "intermediates": [
    { "address": "450 Serra Mall, Stanford, CA 94305, USA"},
  ],
  "travelMode": "DRIVE",
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Bu istek, her biri benzersiz bir çoklu çizgiye sahip iki yol segmenti ve tüm rota için bir çoklu çizgi döndürür:

{
  "routes": [
    {
      "legs": [
        {
          "polyline": {
            "encodedPolyline": "kclcFfqchV?A...?I@G?GAECCCEKICBAFG"
          }
          "steps": [
            {
                "polyline": {
                    "encodedPolyline": "kclcFfqch...YIOKI"
                }
            },
        ...
        },
        {
          "polyline": {
            "encodedPolyline": "ojmcFtethV?K...QOYQOGA?_@MUG[Ga@G"
          }
          "steps": [
            {
                "polyline": {
                    "encodedPolyline": "uypeFbo`jVgJq...PoBiC"
                }
            },
        ...
        }
      ],
      "distanceMeters": 68403,
      "duration": "3759s",
      "polyline": {
          "encodedPolyline": "kclcFfqchV?A?CBKF[Ha...?GAECCCEKICBAFGJEBE"
      }
    }
  ]
}

Çoklu çizgi kalitesi

Bir çok çizginin kalitesi aşağıdaki terimlerle açıklanabilir:

  • Noktaların kayan nokta hassasiyeti

    Noktalar, tek hassasiyetli kayan nokta biçiminde temsil edilen enlem ve boylam değerleri olarak belirtilir. Bu yöntem küçük değerler için (tam olarak temsil edilebilen) iyi sonuç verir ancak değerler arttıkça kayan nokta yuvarlama hataları nedeniyle hassasiyet azalır.

    computeRoutes yönteminde (REST) ve ComputeRoutes işlevinde bu, polylineEncoding tarafından kontrol edilir.

  • Çoklu çizgiyi oluşturan noktaların sayısı

    Nokta sayısı arttıkça çoklu çizgi daha düzgün olur (özellikle eğrilerde).

    İçinde computeRoutes yöntem (REST) ve ComputeRoutes bu öğe polylineQuality tarafından kontrol ediliyor.

Çoklu çizgi kodlama türünü yapılandırma

Çoklu çizgi türünü kontrol etmek için polylineEncoding istek seçeneğini kullanın. polylineEncoding özelliği, çoklu çizginin ENCODED_POLYLINE (varsayılan), şu anlama gelir: Kodlanmış Çoklu Çizgi Algoritma Biçimi veya GEO_JSON_LINESTRING kullanılır, yani GeoJSON LineString biçimi oluşturmak için kullanılır.

Örneğin, istek gövdesinde:

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE",
  "polylineEncoding": "ENCODED_POLYLINE"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Çoklu çizgi kalitesini yapılandırma

polylineQuality, poli çizginin kalitesini HIGH_QUALITY veya OVERVIEW (varsayılan) olarak belirtir. OVERVIEW ile çok sayıda nokta kullanılarak oluşturulan çoklu çizginin istek gecikmesi HIGH_QUALITY'ten daha düşüktür.

Örneğin, istek gövdesinde:

{
  "origin":{
    "location":{
      "latLng":{
        "latitude": 37.419734,
        "longitude": -122.0827784
      }
    }
  },
  "destination":{
    "location":{
      "latLng":{
        "latitude": 37.417670,
        "longitude": -122.079595
      }
    }
  },
  "travelMode": "DRIVE",
  "routingPreference": "TRAFFIC_AWARE",
  "polylineQuality": "HIGH_QUALITY",
  "polylineEncoding": "ENCODED_POLYLINE",
  "departureTime": "2023-10-15T15:01:23.045123456Z",
  ...
}

Trafik durumunu dikkate alan bir çoklu çizgi isteme

Yukarıda gösterilen tüm örnekler, temel çoklu çizgileri, yani içermeyen çoklu çizgileri döndürür. trafik bilgileri. Ayrıca çoklu çizginin rotaya ve rotanın her ayağına ait trafik bilgilerini görüntüleme

Trafik bilincine sahip çok çizgiler, rotadaki trafik koşulları hakkında bilgi içerir. Trafik koşulları, yanıt poli çizgisinin belirli bir aralığı için hız kategorileri (NORMAL, SLOW, TRAFFIC_JAM) olarak ifade edilir. Aralıklar, başlangıç (dahil) ve bitiş (hariç) poli çizgisi noktalarının dizinleriyle tanımlanır.

Örneğin, aşağıdaki yanıtta çoklu çizgi noktaları 2 ve 4 arasındaki NORMAL trafiği gösterilmektedir:

{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}

Trafiğe duyarlı çoklu çizgiyi hesaplamak için istekte bulunmak üzere aşağıdakini ayarlayın: özellikler:

  • Etkinleştirmek için extraComputations dizi alanını TRAFFIC_ON_POLYLINE olarak ayarlayın hesaplamalısınız.

  • travelMode öğesini DRIVE veya TWO_WHEELER olarak ayarlayın. Diğer ulaşım modlarıyla ilgili istekler hata döndürür.

  • TRAFFIC_AWARE veya TRAFFIC_AWARE_OPTIMAL yönlendirmesini belirtin tercih edebilir. Daha fazla bilgi için bkz. Kaliteyi yapılandırma ve gecikme.

  • Yanıt özelliklerinin döndürüleceğini belirten bir yanıt alanı maskesi ayarlayın:

    • Rota düzeyinde, yanıttaki tüm seyahat bilgilerini şu şekilde döndürün: yanıt alanı maskesine routes.travelAdvisory dahil. Geri dönmek için trafik bilgilerini, özellikle routes.travelAdvisory.speedReadingIntervals.

    • Bacak düzeyinde, şuna yönelik yanıttaki tüm seyahat bilgilerini sağlayın: rotanın her ayağına routes.legs.travelAdvisory ekleyerek. Geri dönmek için trafik bilgilerini, özellikle routes.legs.travelAdvisory.speedReadingIntervals

curl -X POST -d '{
  "origin":{
    "address": "1600 Amphitheatre Parkway, Mountain View, CA"
  },
  "destination":{
    "address": "24 Willie Mays Plaza, San Francisco, CA 94107"
  },
  "travelMode": "DRIVE",
  "extraComputations": ["TRAFFIC_ON_POLYLINE"],
  "routingPreference": "TRAFFIC_AWARE_OPTIMAL"
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: YOUR_API_KEY' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline,routes.legs.polyline,routes.travelAdvisory,routes.legs.travelAdvisory' \
'https://routes.googleapis.com/directions/v2:computeRoutes'

Trafik bilincine sahip bir çok çizgi için örnek yanıt

Yanıtta, trafik verileri çoklu çizgide kodlanır ve travelAdvisory alanı, türü RouteLegTravelAdvisory nesne (her bacak) ve RouteTravelAdvisory nesnesi (rota) içerir.

Örneğin:

{
  "routes": [
    {
      "legs": {
        "polyline": {
          "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
        },
        // Traffic data for the leg.
        "travelAdvisory": {
          "speedReadingIntervals": [
            {
              "endPolylinePointIndex": 1,
              "speed": "NORMAL"
            },
            {
              "startPolylinePointIndex": 1,
              "endPolylinePointIndex": 2,
              "speed": "SLOW"
            },
            {
              "startPolylinePointIndex": 2,
              "endPolylinePointIndex": 4,
              "speed": "NORMAL"
            }
          ] 
        }
      },
      "polyline": {
        "encodedPolyline": "}boeF~zbjVAg@EmB`GWHlD"
      },
      // Traffic data for the route.
      "travelAdvisory": {
        "speedReadingIntervals": [
          {
            "endPolylinePointIndex": 1,
            "speed": "NORMAL"
          },
          {
            "startPolylinePointIndex": 1,
            "endPolylinePointIndex": 2,
            "speed": "SLOW"
          },
          {
            "startPolylinePointIndex": 2,
            "endPolylinePointIndex": 4,
            "speed": "NORMAL"
          }
        ] 
      }
    }
  ]
}

Hem RouteTravelAdvisory hem de RouteLegTravelAdvisory dizi alanı içeriyor speedReadingIntervals adlı, trafik hızı bilgilerini içeren bir paket. Dizideki her nesne, bir SpeedReadingInterval (REST) veya SpeedReadingInterval (gRPC) nesnesi tarafından temsil edilir.

SpeedReadingInterval nesnesi, NORMAL, SLOW veya TRAFFIC_JAM gibi bir rota aralığı için hız okumasını içerir. Nesne dizisinin tamamı, rotanın çoklu çizgisinin tamamı çakışmadan oluşur. Belirtilen bir aralığın başlangıç noktası, önceki aralığın bitiş noktasıyla aynıdır.

Her aralık, startPolylinePointIndex, endPolylinePointIndex ve ilgili hız kategorisiyle açıklanır. Aralık içinde başlangıç dizini eksikliğinin 0. dizine karşılık geldiğine dikkat edin uyarınca proto3 uygulamalarını kullanın.

startPolylinePointIndex ve endPolylinePointIndex değerleri aynı değil art arda gerçekleştirilir. Örneğin:

{
  "startPolylinePointIndex": 2,
  "endPolylinePointIndex": 4,
  "speed": "NORMAL"
}

Bu durumda, trafik koşulları 2. dizinden 4. diziye kadar aynıydı.

Haritalar SDK'sı ile trafiğe duyarlı çoklu çizgiler oluşturma

Haritada trafiğe duyarlı çoklu çizgileri görüntülemenizi öneririz. Bunun için özel renklendirme, fırça darbesi ve diğer özellikler de dahil olmak üzere Google Haritalar SDK'ları tarafından çeşitli desenler izler. Çoklu çizgileri kullanma hakkında daha fazla bilgi için bkz. Android için Polyline Özellikleri ve iOS için Polyline Özellikleri.

Örnek Çoklu çizgi oluşturma

Haritalar SDK'sının kullanıcıları, hız kategorileri ile çoklu çizgi oluşturma şemaları arasında özelleştirilmiş bir eşleme mantığı tanımlayabilir. Kullanıcı Örneğin, gösterilen tarih: "NORMAL" kalın mavi bir çizgi şeklinde "SLOW"dayken harita kalın turuncu bir çizgi olarak gösterilebilir.

Aşağıdaki snippet'ler, Melbourne'dan Perth'e kadar jeodezik segmentler içeren kalın bir mavi poli çizgisi ekler. Daha fazla bilgi için bkz. Görünümleri özelleştirme (Android için) ve Çoklu çizgiyi özelleştirme (iOS için).

Android

Java

Polyline line = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

Kotlin

val line: Polyline = map.addPolyline(
  PolylineOptions()
    .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
    .width(25f)
    .color(Color.BLUE)
    .geodesic(true)
)

iOS

Objective-C

GMSMutablePath *path = [GMSMutablePath path];
[path addLatitude:-37.81319 longitude:144.96298];
[path addLatitude:-31.95285 longitude:115.85734];
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
polyline.strokeWidth = 10.f;
polyline.strokeColor = .blue;
polyline.geodesic = YES;
polyline.map = mapView;

Swift

let path = GMSMutablePath()
path.addLatitude(-37.81319, longitude: 144.96298)
path.addLatitude(-31.95285, longitude: 115.85734)
let polyline = GMSPolyline(path: path)
polyline.strokeWidth = 10.0
polyline.geodesic = true
polyline.map = mapView