Encoding polyline adalah algoritme kompresi lossy yang memungkinkan Anda menyimpan serangkaian koordinat, seperti rute, sebagai string tunggal. Proses encoding akan mengonversi nilai biner menjadi serangkaian kode karakter untuk karakter ASCII menggunakan skema encoding base64. Untuk deskripsi lengkap proses encoding, lihat Format Algoritme Polyline yang Dienkode.
Metode computeRoutes (REST) dan metode ComputeRoutes (gRPC) menampilkan rute yang diwakili oleh polyline sebagai bagian dari respons. API ini menampilkan dua jenis polyline:
Polyline dasar (default), mewakili rute, tetapi tanpa informasi lalu lintas yang disematkan di polyline. Permintaan yang menampilkan polyline dasar ditagih dengan tarif Routes Basic. Pelajari penagihan untuk Routes API lebih lanjut.
Polyline traffic-aware, yang berisi informasi tentang kondisi lalu lintas di sepanjang rute. Kondisi lalu lintas dinyatakan dalam kategori kecepatan (
NORMAL
,SLOW
,TRAFFIC_JAM
) yang berlaku pada interval polyline tertentu. Permintaan polyline berbasis traffic ditagih dengan tarif Rute Preferred. Pelajari penagihan untuk Routes API lebih lanjut. Untuk mengetahui detailnya, lihat Mengonfigurasi kualitas polyline
Untuk informasi selengkapnya tentang polyline, lihat:
- Konfigurasikan kualitas vs latensi untuk informasi tentang cara mengonfigurasi kualitas polyline.
- Format Algoritme Polyline yang Dienkodekan menjelaskan algoritma untuk mengenkode polyline.
Utilitas Encoder Polyline Interaktif memungkinkan Anda membuat polyline yang dienkode di UI atau mendekode polyline untuk ditampilkan di peta. Misalnya, gunakan utilitas ini untuk mendekode polyline yang dibuat oleh kode di bawah ini.
Meminta polyline dasar untuk rute, segmen, atau langkah
Polyline direpresentasikan oleh objek Polyline (REST) atau Polyline (gRPC). Anda dapat mengembalikan polyline dalam respons di tingkat rute, kaki, dan langkah.
Tentukan polyline 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 sebagai respons untuk setiap segmen rute dengan menyertakan
routes.legs.polyline
.Pada tingkat langkah, tampilkan polyline sebagai 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 rute, dan untuk setiap langkah segmen:
{ "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, rute yang ditampilkan hanya berisi satu segmen. Oleh karena itu, polyline untuk segmen dan untuk rute adalah sama.
Jika Anda menambahkan titik jalan perantara ke permintaan, rute yang ditampilkan akan 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 kaki, 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" } } ] }
Mengonfigurasi jenis encoding polyline
Gunakan opsi permintaan polylineEncoding
untuk mengontrol jenis polyline.
Properti polylineEncoding
menentukan cara mengenkode polyline sebagai
ENCODED_POLYLINE
(default), artinya menggunakan algoritma encoding polyline, atau
GEO_JSON_LINESTRING
, yang berarti menggunakan format GeoJSON LineString.
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'
Meminta polyline berbasis traffic
Contoh yang ditunjukkan 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. Kondisi lalu lintas dinyatakan dalam kategori kecepatan
(NORMAL
, SLOW
, TRAFFIC_JAM
) untuk interval polyline respons
tertentu. Interval-interval ditentukan oleh indeks titik polyline awal (inklusif) dan akhir (eksklusif).
Misalnya, respons berikut menunjukkan traffic NORMAL
di antara titik 2 dan 4 polyline:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Untuk membuat permintaan guna menghitung polyline berbasis traffic, tetapkan properti berikut dalam permintaan tersebut:
Tetapkan kolom array
extraComputations
keTRAFFIC_ON_POLYLINE
untuk mengaktifkan penghitungan traffic.Tetapkan
travelMode
keDRIVE
atauTWO_WHEELER
. Permintaan untuk mode perjalanan lainnya akan menampilkan error.Tentukan preferensi perutean
TRAFFIC_AWARE
atauTRAFFIC_AWARE_OPTIMAL
dalam permintaan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi kualitas vs latensi.Tetapkan mask kolom respons yang menentukan untuk menampilkan properti respons:
Pada tingkat rute, tampilkan semua informasi perjalanan dalam respons dengan menyertakan
routes.travelAdvisory
dalam mask kolom respons. Untuk menampilkan informasi lalu lintas saja, tentukanroutes.travelAdvisory.speedReadingIntervals
Di tingkat segmen, tampilkan semua informasi perjalanan dalam respons untuk setiap segmen rute dengan menyertakan
routes.legs.travelAdvisory
. Untuk menampilkan informasi lalu lintas saja, tentukanroutes.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 dimuat dalam kolom travelAdvisory
, dari jenis objek RouteLegTravelAdvisory (setiap segmen) dan objek 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. Setiap objek dalam array ditunjukkan oleh objek 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 interval yang ditentukan 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 berturut-turut. 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 berbasis lalu lintas pada peta menggunakan berbagai fitur yang ditawarkan oleh SDK Google Maps, termasuk pewarnaan, goresan, dan pola kustom di sepanjang regangan polyline. Untuk detail selengkapnya tentang penggunaan polyline, lihat Fitur Polyline untuk Android dan Fitur Polyline untuk iOS.
Contoh rendering Polyline
Pengguna Maps SDK berkesempatan menentukan logika pemetaan yang disesuaikan antara kategori kecepatan dan skema rendering polyline. Contohnya, seseorang mungkin memutuskan untuk menampilkan kecepatan "NORMAL" sebagai garis biru tebal di peta, sementara kecepatan "SLOW" mungkin ditampilkan sebagai garis oranye tebal.
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