La méthode computeRoutes (REST) et ComputeRoutes (gRPC) renvoient toutes deux l'itinéraire représenté par une polyligne dans le cadre de de réponse. Ces API renvoient deux types de polylignes :
Polyligne de base (par défaut) : représente un itinéraire, mais sans informations sur le trafic intégrées à la polyligne. Requêtes qui renvoient une polyligne de base sont facturés au tarif des routes Basic. En savoir plus sur la facturation pour l'API Routes
Les polylignes tenant compte du trafic contiennent des informations sur les conditions de circulation le long de l'itinéraire. Les conditions de circulation sont exprimées en termes de catégories de vitesse (
NORMAL
,SLOW
,TRAFFIC_JAM
) applicables à un intervalle donné de la polyligne. Les requêtes de polylignes tenant compte du trafic sont facturées au tarif "Routes préférées". En savoir plus sur la facturation pour API Routes. Pour en savoir plus, consultez Configurer la qualité de la polyligne
Pour en savoir plus sur les polylignes, consultez les pages suivantes :
L'utilitaire d'encodage interactif des polylignes vous permet de créer des polylignes encodées dans une UI ou de décoder des polylignes à afficher sur une carte. Par exemple, utilisez cet utilitaire pour décoder une polyligne créée par ci-dessous.
Demander une polyligne de base pour un itinéraire, un trajet ou une étape
Une polyligne est représentée par un Polyligne (REST) ou Objet Polyline (gRPC). Vous pouvez renvoyer une polyligne dans la réponse au niveau de l'itinéraire, de la section et de l'étape.
Spécifiez la polyligne à renvoyer à l'aide du masque de champ de réponse :
Au niveau de l'itinéraire, renvoyez une polyligne dans la réponse en incluant
routes.polyline
dans le masque de champ de réponse.Au niveau de la section, renvoyez une polyligne dans la réponse pour chaque étape de la en incluant
routes.legs.polyline
.Au niveau de l'étape, renvoyez une polyligne dans la réponse pour chaque étape de la section en incluant
routes.legs.steps.polyline
.
Par exemple, pour renvoyer une polyligne pour l'intégralité de l'itinéraire, pour chaque section et pour chaque étape de chaque étape:
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'
Cette requête renvoie la réponse suivante, qui inclut la polyligne pour le pour chaque section et pour chaque étape de la section:
{ "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_@@_@?" } } ] }
Étant donné que cette requête ne contient qu'un point de départ et une destination, le l'itinéraire ne contient qu'une seule section. Par conséquent, la polyligne pour la jambe et pour l'itinéraire sont identiques.
Si vous ajoutez un point de cheminement intermédiaire à la requête, le comporte deux étapes:
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'
Cette requête renvoie deux parties, chacune avec une polyligne unique et une polyligne pour l'intégralité de la route:
{ "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" } } ] }
Qualité des polylignes
La qualité d'une polyligne peut être décrite comme suit :
Précision à virgule flottante des points
Les points sont spécifiés sous la forme de valeurs de latitude et de longitude, qui sont représentées au format à virgule flottante à simple précision. Cela fonctionne bien pour les petites valeurs (qui peuvent être représentées avec précision), mais la précision diminue à mesure que les valeurs augmentent en raison des erreurs d'arrondi à virgule flottante.
Dans la méthode computeRoutes (REST) et ComputeRoutes, cela est contrôlé par
polylineEncoding
.Nombre de points qui composent la polyligne
Plus il y a de points, plus la polyligne est lisse (surtout dans les courbes de modèle).
Dans la méthode computeRoutes (REST) et ComputeRoutes, cela est contrôlé par
polylineQuality
.
Configurer le type d'encodage des polylignes
Utilisez l'option de requête polylineEncoding
pour contrôler le type de polyligne.
La propriété polylineEncoding
contrôle si la polyligne sera encodée en tant que ENCODED_POLYLINE
(par défaut), ce qui signifie que le format d'algorithme de polylignes encodées sera utilisé, ou GEO_JSON_LINESTRING
, ce qui signifie que le format de chaîne GeoJSON sera utilisé.
Par exemple, dans le corps de la requête:
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'
Configurer la qualité des polylignes
polylineQuality
spécifie la qualité de la polyligne comme HIGH_QUALITY
ou OVERVIEW
(par défaut). Avec OVERVIEW
, la polyligne est composée à l'aide d'un petit nombre de points et présente une latence de requête inférieure à celle de HIGH_QUALITY
.
Par exemple, dans le corps de la requête:
{ "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", ... }
Demander une polyligne tenant compte du trafic
Les exemples présentés ci-dessus renvoient tous des polylignes de base, c'est-à-dire des polylignes sans informations sur le trafic. En outre, vous pouvez également demander que la polyligne contienne des informations sur le trafic pour l'itinéraire et pour chaque section de l'itinéraire.
Les polylignes tenant compte du trafic contiennent des informations sur les conditions de circulation le long de l'itinéraire. Les conditions de circulation sont exprimées en termes de catégories de vitesse (NORMAL
, SLOW
, TRAFFIC_JAM
) pour un intervalle donné de la polyligne de réponse. Les intervalles sont définis par les index de leurs valeurs de départ (incluses)
et les points de polyligne de fin (exclusifs).
Par exemple, la réponse suivante affiche le trafic NORMAL
entre la polyligne
points 2 et 4:
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Pour envoyer une requête de calcul d'une polyligne tenant compte du trafic, définissez les propriétés suivantes dans la requête :
Définissez le champ de tableau
extraComputations
surTRAFFIC_ON_POLYLINE
pour activer le calcul du trafic.Définissez
travelMode
surDRIVE
ouTWO_WHEELER
. Les requêtes pour tout autre mode de transport renvoient une erreur.Spécifiez la préférence de routage
TRAFFIC_AWARE
ouTRAFFIC_AWARE_OPTIMAL
dans la requête. Pour en savoir plus, consultez la section Configurer les paramètres latence.Définissez un masque de champ de réponse qui spécifie de renvoyer les propriétés de réponse :
Au niveau de l'itinéraire, renvoyez toutes les informations de voyage dans la réponse en incluant
routes.travelAdvisory
dans le masque de champ de la réponse. Pour retourner uniquement les informations sur le trafic,routes.travelAdvisory.speedReadingIntervals
Au niveau de la section, renvoyez toutes les informations de voyage dans la réponse pour chaque section de l'itinéraire en incluant
routes.legs.travelAdvisory
. Pour retourner uniquement les informations sur le trafic,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'
Exemple de réponse pour une polyligne tenant compte du trafic
Dans la réponse, les données de trafic sont encodées dans la polyligne et sont contenues dans
Champ travelAdvisory
de type
RouteLegTravelAdvisory
(chaque pied) et
un objet RouteTravelAdvisory (route).
Exemple :
{ "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
et RouteLegTravelAdvisory
incluent un champ de tableau appelé speedReadingIntervals
qui contient des informations sur la vitesse du trafic. Chaque
du tableau est représenté par
SpeedReadingInterval (REST) ou
SpeedReadingInterval
gRPC.
Un objet SpeedReadingInterval
inclut les indications de vitesse pour un intervalle d'un itinéraire,
comme NORMAL
, SLOW
ou TRAFFIC_JAM
. L'ensemble du tableau d'objets couvre l'ensemble de la polyligne de l'itinéraire sans chevauchement. Le point de départ d'une
l'intervalle est identique au point final de l'intervalle précédent.
Chaque intervalle est décrit par son startPolylinePointIndex
, son endPolylinePointIndex
et la catégorie de vitesse correspondante.
Notez que l'absence d'index de départ dans l'intervalle correspond à l'index 0.
conformément aux
pratiques proto3.
Les valeurs startPolylinePointIndex
et endPolylinePointIndex
ne sont pas toujours consécutives. Exemple :
{ "startPolylinePointIndex": 2, "endPolylinePointIndex": 4, "speed": "NORMAL" }
Dans ce cas, les conditions de trafic étaient identiques entre l'index 2 et l'index 4.
Afficher des polylignes tenant compte du trafic avec le SDK Maps
Nous vous recommandons d'afficher les polylignes sensibles au trafic sur la carte à l'aide des différentes disponibles par les SDK Google Maps, y compris des couleurs, des traits et des motifs le long des étirements de la polyligne. Pour en savoir plus sur l'utilisation des polylignes, consultez les pages Éléments géographiques de polyligne pour Android et Éléments géographiques de polyligne pour iOS.
Exemple de rendu de polylignes
Les utilisateurs du SDK Maps ont la possibilité de définir une carte personnalisée entre les catégories de vitesse et les schémas de rendu polyligne. Par exemple, vous pouvez choisir d'afficher la vitesse "NORMALE" sous la forme d'une ligne bleue épaisse sur la carte, tandis que la vitesse "LENTE" peut être affichée sous la forme d'une ligne orange épaisse.
Les extraits de code suivants ajoutent une polyligne épaisse bleue avec des segments géodésiques provenant Melbourne à Perth. Pour en savoir plus, consultez Personnaliser l'apparence (pour Android) et Personnaliser la polyligne (pour 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