Metode computeRoutes (REST) dan ComputeRoutes (gRPC) menampilkan rute yang diwakili oleh polyline sebagai bagian dari yang dihasilkan. API ini menampilkan dua jenis polyline:
Polyline dasar (default), menunjukkan rute tetapi tanpa lalu lintas informasi yang disematkan dalam polyline. Permintaan yang menampilkan polyline dasar ditagih dengan tarif Routes Basic. Pelajari lebih lanjut untuk Routes API.
Polyline berbasis traffic, berisi informasi tentang kondisi lalu lintas sepanjang rute. Kondisi lalu lintas dinyatakan dalam kecepatan kategori (
NORMAL
,SLOW
,TRAFFIC_JAM
) yang berlaku pada interval tertentu dari polyline. 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:
Utilitas Encoder Polyline Interaktif memungkinkan Anda membuat polyline yang dienkode dalam UI atau mendekode polyline untuk ditampilkan peta. Misalnya, gunakan utilitas ini untuk mendekode polyline yang dibuat oleh kode di bawah ini.
Meminta polyline dasar untuk rute, segmen, atau langkah
Polyline dinyatakan oleh Polyline (REST) atau Objek Polyline (gRPC). Anda dapat menampilkan polyline dalam respons pada tingkat rute, segmen, dan langkah.
Tentukan polyline mana yang akan ditampilkan dengan menggunakan mask kolom respons:
Pada tingkat rute, tampilkan polyline dalam respons dengan menyertakan
routes.polyline
dalam mask kolom respons.Pada tingkat kaki, tampilkan polyline dalam respons untuk setiap segmen kaki rute dengan menyertakan
routes.legs.polyline
.Pada tingkat langkah, tampilkan polyline dalam respons untuk setiap langkah segmen 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 tempat asal dan tujuan, elemen yang ditampilkan rute hanya berisi satu segmen. Oleh karena itu, polyline untuk kaki dan untuk rutenya sama.
Jika Anda menambahkan titik jalan perantara ke permintaan, maka objek yang 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 ditetapkan 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.
Di beberapa computeRoutes (REST) dan ComputeRoutes, ini dikontrol oleh
polylineEncoding
.Jumlah titik yang membentuk polyline
Semakin banyak titik yang ada, semakin halus polyline (terutama di 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 dibuat menggunakan
jumlah titik dan memiliki latensi permintaan 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
Contoh yang ditampilkan di atas semua menampilkan polyline dasar, yang berarti polyline tanpa informasi lalu lintas. Selain itu, Anda juga dapat meminta agar polyline berisi informasi lalu lintas untuk rute dan untuk setiap segmen rute.
Polyline berbasis traffic berisi informasi tentang kondisi lalu lintas di sepanjang
rute tersebut. 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 berbasis traffic, tetapkan parameter berikut properti dalam permintaan:
Tetapkan kolom array
extraComputations
keTRAFFIC_ON_POLYLINE
untuk mengaktifkan kalkulasi lalu lintas.Tetapkan
travelMode
keDRIVE
atauTWO_WHEELER
. Permintaan untuk lainnya mode perjalanan akan menampilkan error.Menentukan perutean
TRAFFIC_AWARE
atauTRAFFIC_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, menentukanroutes.travelAdvisory.speedReadingIntervals
Pada tingkat kaki, tampilkan semua informasi perjalanan dalam respons untuk setiap segmen rute dengan menyertakan
routes.legs.travelAdvisory
. Untuk mengembalikan hanya informasi lalu lintas, menentukanroutes.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 berbasis traffic
Sebagai respons, data lalu lintas dienkode dalam polyline dan terdapat dalam
Kolom travelAdvisory
, dengan jenis
RouteLegTravelAdvisory
objek (setiap kaki) dan
Objek (rute) RouteTravelAdvisory.
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
menyertakan 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
-nya,
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
bukan
selalu berurutan. Contoh:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Dalam kasus ini, kondisi lalu lintas sama dari indeks 2 hingga indeks 4.
Merender polyline berbasis traffic dengan Maps SDK
Sebaiknya tampilkan polyline yang peka lalu lintas pada peta menggunakan berbagai fitur yang ditawarkan oleh Google Maps SDK termasuk pewarnaan, guratan, dan pola di sepanjang perlebaran polyline. Untuk detail lebih lanjut 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 seorang misalnya, orang mungkin memutuskan untuk menampilkan "NORMAL" kecepatan sebagai garis biru tebal di peta saat "SLOW" kecepatan mungkin 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