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 akan ditagih dengan tarif Rute Dasar. Pelajari penagihan lebih lanjut untuk Routes API.
Polyline berbasis lalu lintas, 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 untuk polyline berbasis traffic akan dikenai biaya sesuai tarif Rute yang Disukai. Pelajari penagihan lebih lanjut untuk Routes API. Untuk mengetahui detailnya, lihat Mengonfigurasi kualitas polyline
Untuk mengetahui informasi selengkapnya tentang polyline, lihat:
Interactive Polyline Encoder Utility 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.
Meminta polyline dasar untuk rute, segmen, atau langkah
Polyline diwakili 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.Pada tingkat segmen kaki, tampilkan polyline dalam respons untuk setiap segmen 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 pada 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 akan menampilkan respons berikut yang menyertakan polyline untuk rute, untuk setiap segmen rute, dan untuk setiap langkah 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, 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 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. Cara ini cocok untuk nilai kecil (yang dapat direpresentasikan dengan tepat), tetapi presisi menurun seiring meningkatnya nilai karena error pembulatan floating point.
Dalam metode computeRoutes (REST) dan ComputeRoutes, hal ini dikontrol oleh
polylineEncoding
.Jumlah titik yang membentuk polyline
Semakin banyak titik yang ada, semakin halus polyline (terutama di kurva).
Dalam metode computeRoutes (REST) dan ComputeRoutes, hal 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 Dienkodekan
akan digunakan, atau GEO_JSON_LINESTRING
, yang berarti
format LineString GeoJSON
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 sejumlah kecil 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
Semua contoh yang ditampilkan di atas 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 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 tertentu dari polyline
respons. Interval ditentukan oleh indeks titik polyline awal (inklusif) dan akhir (eksklusif).
Misalnya, respons berikut menampilkan traffic NORMAL
antara titik polyline 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
keTRAFFIC_ON_POLYLINE
untuk mengaktifkan penghitungan traffic.Tetapkan
travelMode
keDRIVE
atauTWO_WHEELER
. Permintaan untuk mode perjalanan lainnya akan menampilkan error.Tentukan preferensi pemilihan rute
TRAFFIC_AWARE
atauTRAFFIC_AWARE_OPTIMAL
dalam permintaan. Untuk informasi selengkapnya, lihat Mengonfigurasi kualitas vs latensi.Tetapkan mask kolom respons yang menentukan untuk menampilkan properti respons:
Di tingkat rute, tampilkan semua informasi perjalanan dalam respons dengan menyertakan
routes.travelAdvisory
dalam mask kolom respons. Untuk menampilkan hanya informasi lalu lintas, tentukanroutes.travelAdvisory.speedReadingIntervals
Di tingkat segmen, tampilkan semua informasi perjalanan dalam respons untuk setiap segmen rute dengan menyertakan
routes.legs.travelAdvisory
. Untuk menampilkan hanya informasi traffic, 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 yang mempertimbangkan lalu lintas
Dalam responsnya, data lalu lintas dienkode dalam polyline dan dimuat dalam kolom travelAdvisory
, dengan 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 direpresentasikan 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 tidak adanya 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 yang mempertimbangkan lalu lintas 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 logika pemetaan yang disesuaikan antara kategori kecepatan dan skema rendering polyline. Misalnya, pengguna mungkin memutuskan untuk menampilkan kecepatan "NORMAL" sebagai garis biru tebal di peta, sementara kecepatan "SLOW" ditampilkan sebagai garis oranye tebal.
Cuplikan berikut menambahkan polyline biru tebal dengan segmen geodesi dari Melbourne ke Perth. Untuk mengetahui 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