Hem computeRoutes yöntemi (REST) hem de ComputeRoutes yöntemi (gRPC), yanıtın bir parçası olarak çoklu çizgiyle temsil edilen rotayı döndürür. 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ı, poli çizginin belirli bir aralığında geçerli olan hız kategorileri (
NORMAL
,SLOW
,TRAFFIC_JAM
) açısından ifade edilir. Trafiğe duyarlı çoklu çizgi istekleri Rotalar için tercih edilen ücret. Routes API için faturalandırma hakkında daha fazla bilgi edinin. Ayrıntılar için bkz. Çoklu çizgi kalitesini yapılandırma
Çoklu çizgiler hakkında daha fazla bilgi için:
Etkileşimli Çoklu Çizgi Kodlayıcı Yardımcı Programı Kullanıcı arayüzünde kodlanmış çoklu çizgiler oluşturabilmenizi veya çoklu çizgilerin kodunu çözerek bir haritadır. Örneğin, aşağıdaki kodu kullanabilirsiniz.
Rota, bacak veya adım için temel bir poli çizgisi isteme
Çoklu çizgi, bir çoklu çizgiyle temsil edilir. Çoklu çizgi (REST) veya Çoklu çizgi (gRPC) nesnesi. Yanıtta rota, bacak ve adım düzeyinde bir çoklu çizgi döndürebilirsiniz.
Yanıt alanı maskesini kullanarak döndürülecek polilini belirtin:
Rota düzeyinde, yanıt alan maskesine
routes.polyline
ekleyerek yanıtta bir poli çizgi döndürün.Bacak düzeyinde,
routes.legs.polyline
değerini ekleyerek rotanın her bir bacağı için yanıtta bir poli çizgi döndürün.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, rotanın tamamı, her bir kol ve her bir kolun her bir adımı için bir çok çizgi döndürmek istiyorsanız:
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, rotanın, rotanın her bir kolunun ve kolun her bir adımını içeren aşağıdaki yanıtı döndürür:
{ "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 yol noktası eklerseniz döndürülen rota iki bölümden oluşur:
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 sahip iki yol segmenti ve tüm rota için bir çoklu çizgi döndürür:
{ "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
Bir çok çizginin kalitesi aşağıdaki terimlerle açıklanabilir:
Noktaların kayan nokta hassasiyeti
Noktalar, tek hassasiyetli kayan nokta biçiminde temsil edilen enlem ve boylam değerleri olarak belirtilir. Bu yöntem küçük değerler için (tam olarak temsil edilebilen) iyi sonuç verir ancak değerler arttıkça kayan nokta yuvarlama hataları nedeniyle hassasiyet azalır.
computeRoutes yönteminde (REST) ve ComputeRoutes işlevinde bu,
polylineEncoding
tarafından kontrol edilir.Çoklu çizgiyi oluşturan noktaların sayısı
Nokta sayısı arttıkça çoklu çizgi daha düzgün olur (özellikle eğrilerde).
İçinde computeRoutes yöntem (REST) ve ComputeRoutes bu öğe
polylineQuality
tarafından kontrol ediliyor.
Çoklu çizgi kodlama türünü yapılandırma
Ç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
, poli çizginin kalitesini HIGH_QUALITY
veya OVERVIEW
(varsayılan) olarak belirtir. OVERVIEW
ile çok sayıda nokta kullanılarak oluşturulan çoklu çizginin istek gecikmesi HIGH_QUALITY
'ten daha düşüktür.
Ö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", ... }
Trafik durumunu dikkate alan bir ç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 rotaya ve rotanın her ayağına ait trafik bilgilerini görüntüleme
Trafik bilincine sahip çok çizgiler, rotadaki trafik koşulları hakkında bilgi içerir. Trafik koşulları, yanıt poli çizgisinin belirli bir aralığı için hız kategorileri (NORMAL
, SLOW
, TRAFFIC_JAM
) olarak ifade edilir. Aralıklar, başlangıç (dahil) ve bitiş (hariç) poli çizgisi noktalarının dizinleriyle tanımlanır.
Örneğin, aşağıdaki yanıtta çoklu çizgi noktaları 2 ve 4 arasındaki NORMAL
trafiği gösterilmektedir:
{ "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
öğesiniDRIVE
veyaTWO_WHEELER
olarak ayarlayın. Diğer ulaşım modlarıyla ilgili istekler hata döndürür.TRAFFIC_AWARE
veyaTRAFFIC_AWARE_OPTIMAL
yönlendirmesini belirtin tercih edebilir. Daha fazla bilgi için bkz. Kaliteyi yapılandırma ve gecikme.Yanıt özelliklerinin döndürüleceğ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, özellikleroutes.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, özellikleroutes.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'
Trafik bilincine sahip bir çok ç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. Dizideki her nesne, bir SpeedReadingInterval (REST) veya SpeedReadingInterval (gRPC) nesnesi tarafından temsil edilir.
SpeedReadingInterval
nesnesi, NORMAL
, SLOW
veya TRAFFIC_JAM
gibi bir rota aralığı için hız okumasını içerir. Nesne dizisinin tamamı,
rotanın çoklu çizgisinin tamamı çakışmadan oluşur. Belirtilen bir aralığın başlangıç noktası, önceki aralığın bitiş noktasıyla aynıdır.
Her aralık, startPolylinePointIndex
,
endPolylinePointIndex
ve ilgili hız kategorisiyle açıklanır.
Aralık içinde başlangıç dizini eksikliğinin 0. dizine 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 durumda, trafik koşulları 2. dizinden 4. diziye kadar aynıydı.
Haritalar SDK'sı ile trafiğe duyarlı çoklu çizgiler oluşturma
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 çeşitli desenler izler. Ç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ının kullanıcıları, hız kategorileri ile çoklu çizgi oluşturma şemaları arasında özelleştirilmiş bir eşleme mantığı tanımlayabilir. 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 kadar jeodezik segmentler içeren kalın bir mavi poli çizgisi ekler. 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