Polyline rute permintaan

Metode computeRoutes (REST) dan metode ComputeRoutes (gRPC) menampilkan rute yang direpresentasikan oleh polyline sebagai bagian dari respons. API ini menampilkan dua jenis polyline:

  • Polyline dasar (default), mewakili rute, tetapi tanpa informasi lalu lintas yang disematkan dalam polyline. Permintaan yang menampilkan polyline dasar ditagih dengan tarif Routes Basic. Pelajari lebih lanjut untuk Routes API.

  • Polyline sesuai lalu lintas, berisi informasi tentang kondisi lalu lintas sepanjang rute. Kondisi lalu lintas dinyatakan dalam kategori kecepatan (NORMAL, SLOW, TRAFFIC_JAM) yang berlaku pada interval polyline tertentu. Permintaan untuk polyline berbasis traffic ditagih sebesar Rasio yang Disukai Rute. Pelajari lebih lanjut penagihan untuk Routes API. Untuk mengetahui detailnya, lihat Mengonfigurasi kualitas polyline

Untuk informasi selengkapnya tentang polyline, lihat:

Meminta polyline dasar untuk rute, segmen, atau langkah

Polyline direpresentasikan oleh objek Polyline (REST) atau Polyline (gRPC). Anda dapat menampilkan polyline dalam respons pada tingkat rute, segmen, dan langkah.

Tentukan polyline yang akan ditampilkan menggunakan mask kolom respons:

  • Di tingkat rute, tampilkan polyline dalam respons dengan menyertakan routes.polyline dalam mask kolom respons.

  • Di tingkat segmen, tampilkan polyline dalam respons untuk setiap segmen rute dengan menyertakan routes.legs.polyline.

  • Di tingkat langkah, tampilkan polyline dalam respons untuk setiap langkah jalur dengan menyertakan routes.legs.steps.polyline.

Misalnya, untuk menampilkan polyline untuk seluruh rute, untuk setiap segmen, dan untuk setiap langkah dari setiap segmen:

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'

Permintaan ini menampilkan respons berikut yang menyertakan polyline untuk rute, untuk setiap segmen pada rute, dan untuk setiap langkah pada segmen tersebut:

{
  "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_@@_@?"
      }
    }
  ]
}

Karena permintaan ini hanya berisi asal dan tujuan, rute yang ditampilkan hanya berisi satu segmen. Oleh karena itu, polyline untuk kaki dan untuk rutenya sama.

Jika Anda menambahkan titik jalan perantara ke permintaan, maka metode rute berisi dua segmen:

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'

Permintaan ini menampilkan dua segmen, masing-masing dengan polyline unik, dan polyline untuk seluruh rute:

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

Kualitas polyline

Kualitas polyline dapat dijelaskan dalam istilah berikut:

  • Presisi floating point titik

    Titik ditentukan sebagai nilai lintang dan bujur, yang direpresentasikan dalam format floating point presisi tunggal. Ini berfungsi dengan baik untuk nilai yang kecil (yang dapat direpresentasikan dengan tepat), tetapi presisi menurun sebagai nilai meningkat karena kesalahan pembulatan floating point.

    Dalam metode computeRoutes (REST) dan ComputeRoutes, hal ini dikontrol oleh polylineEncoding.

  • Jumlah titik yang membentuk polyline

    Makin banyak titik, makin halus polyline (terutama dalam kurva).

    Di beberapa computeRoutes (REST) dan ComputeRoutes, ini dikontrol oleh polylineQuality.

Mengonfigurasi jenis encoding polyline

Gunakan opsi permintaan polylineEncoding untuk mengontrol jenis polyline. Properti polylineEncoding mengontrol apakah polyline akan dienkode sebagai ENCODED_POLYLINE (default), yang berarti Format Algoritme Polyline yang Dienkode akan digunakan, atau GEO_JSON_LINESTRING, artinya Format LineString GeoJSON data yang akan digunakan.

Misalnya, dalam isi permintaan:

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'

Mengonfigurasi kualitas Polyline

polylineQuality menentukan kualitas polyline sebagai HIGH_QUALITY atau OVERVIEW (default). Dengan OVERVIEW, polyline disusun menggunakan sejumlah titik yang sedikit dan memiliki latensi permintaan yang lebih rendah daripada HIGH_QUALITY.

Misalnya, dalam isi permintaan:

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

Meminta polyline berbasis traffic

Semua contoh yang ditampilkan di atas menampilkan polyline dasar, yang berarti polyline tanpa informasi lalu lintas. Selain itu, Anda juga dapat meminta polyline berisi informasi lalu lintas untuk rute dan untuk setiap segmen rute.

Polyline yang mempertimbangkan lalu lintas berisi informasi tentang kondisi lalu lintas di sepanjang rute. Kondisi lalu lintas dinyatakan dalam kategori kecepatan (NORMAL, SLOW, TRAFFIC_JAM) untuk interval respons tertentu polyline. Interval ditentukan oleh indeks awalnya (inklusif) dan titik polyline akhir (eksklusif).

Misalnya, respons berikut menampilkan traffic NORMAL di antara polyline poin 2 dan 4:

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

Untuk membuat permintaan guna menghitung polyline yang mempertimbangkan lalu lintas, tetapkan properti berikut dalam permintaan:

  • Tetapkan kolom array extraComputations ke TRAFFIC_ON_POLYLINE untuk mengaktifkan penghitungan traffic.

  • Tetapkan travelMode ke DRIVE atau TWO_WHEELER. Permintaan untuk lainnya mode perjalanan akan menampilkan error.

  • Menentukan perutean TRAFFIC_AWARE atau TRAFFIC_AWARE_OPTIMAL preferensi dalam permintaan. Untuk informasi selengkapnya, lihat Mengonfigurasi kualitas vs. latensinya.

  • Tetapkan mask kolom respons yang menentukan untuk menampilkan properti respons:

    • Di tingkat rute, tampilkan semua informasi perjalanan dalam respons dengan termasuk routes.travelAdvisory dalam mask kolom respons. Untuk mengembalikan hanya informasi lalu lintas, menentukan routes.travelAdvisory.speedReadingIntervals

    • Pada tingkat kaki, tampilkan semua informasi perjalanan dalam respons untuk setiap segmen rute dengan menyertakan routes.legs.travelAdvisory. Untuk menampilkan hanya informasi traffic, tentukan 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'

Contoh respons untuk polyline yang mempertimbangkan lalu lintas

Dalam respons, data traffic dienkode dalam polyline dan terdapat dalam kolom travelAdvisory, dari jenis objek RouteLegTravelAdvisory (setiap segmen) dan RouteTravelAdvisory (rute).

Contoh:

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

RouteTravelAdvisory dan RouteLegTravelAdvisory menyertakan kolom array yang disebut speedReadingIntervals yang berisi informasi kecepatan lalu lintas. Masing-masing dalam array direpresentasikan oleh SpeedReadingInterval (REST) atau SpeedReadingInterval (gRPC).

Objek SpeedReadingInterval mencakup pembacaan kecepatan untuk interval rute, seperti NORMAL, SLOW, atau TRAFFIC_JAM. Seluruh array objek mencakup seluruh polyline rute tanpa tumpang-tindih. Titik awal dari sebuah interval sama dengan titik akhir interval sebelumnya.

Setiap interval dijelaskan oleh startPolylinePointIndex, endPolylinePointIndex, dan kategori kecepatan yang sesuai. Perhatikan bahwa kurangnya indeks awal dalam interval sesuai dengan indeks 0 sesuai dengan praktik proto3.

Nilai startPolylinePointIndex dan endPolylinePointIndex tidak selalu berurutan. Contoh:

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

Dalam hal ini, kondisi lalu lintas sama dari indeks 2 hingga indeks 4.

Merender polyline berbasis traffic dengan Maps SDK

Sebaiknya tampilkan polyline yang mempertimbangkan lalu lintas di peta menggunakan berbagai fitur yang ditawarkan oleh Google Maps SDK, termasuk pewarnaan, goresan, dan pola kustom di sepanjang peregangan polyline. Untuk mengetahui detail selengkapnya tentang penggunaan polyline, lihat Fitur Polyline untuk Android dan Fitur Polyline untuk iOS.

Contoh rendering Polyline

Pengguna Maps SDK memiliki kesempatan untuk menentukan pemetaan yang disesuaikan logika antara kategori kecepatan dan skema rendering polyline. Sebagai contoh, seseorang dapat memutuskan untuk menampilkan kecepatan "NORMAL" sebagai garis biru tebal pada peta, sedangkan kecepatan "LAMBAT" dapat ditampilkan sebagai garis oranye tebal, misalnya.

Cuplikan berikut menambahkan polyline biru tebal dengan segmen geodesi dari Melbourne ke Perth. Untuk informasi selengkapnya, lihat Menyesuaikan tampilan (untuk Android) dan Menyesuaikan Polyline (untuk iOS).

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