Rota çizgisi isteğinde bulunma

computeRoutes yöntemi (REST) ve ComputeRoutes yönteminde (gRPC) her ikisi de tıklayın. 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ı hız cinsinden ifade edilir belirli bir aralıkta geçerli olan kategoriler (NORMAL, SLOW, TRAFFIC_JAM) görünür. Trafiğe duyarlı çoklu çizgi istekleri Rotalar için tercih edilen ücret. Şu hizmetler için faturalandırma hakkında daha fazla bilgi edinin: Routes API'yi seçin. Ayrıntılar için bkz. Çoklu çizgi kalitesini yapılandırma

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

Rota, ayak veya adım için temel bir çoklu çizgi isteyin

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

Döndürülecek çoklu çizgiyi belirtmek için yanıt alanı maskesi:

  • Rota düzeyinde, şunları ekleyerek yanıtta bir çoklu çizgi döndürün: routes.polyline (yanıt alanı maskesi) girilmelidir.

  • Bacak seviyesinde, bacağın her bacağı için yanıtta bir çoklu çizgi döndürün. rotaya routes.legs.polyline ekleyin.

  • 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, tüm rota, her ayak ve için için bir çoklu çizgiyi döndürmek her bacağın her adımında:

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, şunun için çoklu çizgiyi içeren aşağıdaki yanıtı döndürür: rotanın her ayağı ve ayağın her adımı için:

{
  "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 bir ara nokta eklerseniz, döndürülen rota iki ayak içeriyor:

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 ve tüm rota:

{
  "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

Çoklu çizginin kalitesi aşağıdaki terimlerle açıklanabilir:

  • Noktaların kayan nokta hassasiyeti

    Noktalar enlem ve boylam değerleri olarak belirtilir ve bu değerler, tek duyarlıklı kayan nokta biçimindedir. Bu, küçük değerlerde iyi sonuç verir (bu, hassas bir şekilde temsil edilebilir) ancak hassasiyet değer olarak azalır. yuvarlama hatalarından kaynaklanan artış.

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

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

    Nokta sayısı arttıkça çoklu çizgi de pürüzsüz hale gelir (özellikle eğrileri).

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

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

Ç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, çoklu çizginin kalitesini HIGH_QUALITY veya OVERVIEW (varsayılan). OVERVIEW ile çoklu çizgi, küçük bir bileşen HIGH_QUALITY ile kıyaslandığında daha düşük bir istek gecikmesine sahip.

Ö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",
  ...
}

Trafiğe duyarlı ç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 güzergâh ve rotanın her ayağı için trafik bilgilerini gösterir.

Trafiğe duyarlı çoklu çizgiler, trafiğin durumu hakkında bilgi içerir ve yol gösterir. Trafik koşulları, hız kategorileri cinsinden ifade edilir Belirli bir yanıt aralığı için (NORMAL, SLOW, TRAFFIC_JAM) çoklu çizgi. Aralıklar, başlangıç dizinleriyle (bu değerler dahil) tanımlanır ve bitiş (özel) çoklu çizgi noktalarından yararlanın.

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

{
  "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 tüm 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 özelliklerini döndüreceğ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'

Trafiğe duyarlı çoklu ç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. Her biri dizideki nesne SpeedReadingInterval (REST) veya SpeedReadingInterval (gRPC) nesnesini ifade eder.

Bir SpeedReadingInterval nesnesi, bir rota aralığı için hız ölçümü içeriyor, NORMAL, SLOW veya TRAFFIC_JAM gibi. Nesne dizisinin tamamı, rotanın çoklu çizgisinin tamamı çakışmadan oluşur. Belirli bir öğenin başlangıç noktası aralığı, önceki aralığın bitiş noktasıyla aynı.

Her aralık startPolylinePointIndex ile tanımlanır, endPolylinePointIndex ve ilgili hız kategorisi. Aralık içinde başlangıç dizini eksikliğinin 0. indekse 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 örnekte, trafik koşulları dizin 2 ile dizin 4 arasında aynıdır.

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

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 desenler de oluşturabilirsiniz. Ç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ı kullanıcıları, özelleştirilmiş bir eşleme tanımlama fırsatına sahiptir. arasındaki mantığın işleyiş şekline bakalım. 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. 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