Vous pouvez récupérer un ensemble de parcours à partir de l'API Routes Preferred en envoyant une requête HTTP POST à la ressource suivante :
https://routespreferred.googleapis.com/v1:computeRoutes
Incluez vos options de requête, au format JSON, dans le corps du message. Pour en savoir plus sur l'ensemble des options, consultez le corps de la requête computeRoutes
.
Exemple de corps de requête
Le code JSON suivant montre comment construire un corps de requête type pour une requête computeRoutes
.
POST /v1:computeRoutes
Host: routespreferred.googleapis.com
Content-Type: application/json
X-Goog-Api-Key: YOUR_API_KEY
X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline
{
"origin":{
"location":{
"latLng":{
"latitude": 37.419734,
"longitude": -122.0827784
}
}
},
"destination":{
"location":{
"latLng":{
"latitude": 37.417670,
"longitude": -122.079595
}
}
},
"travelMode": "DRIVE",
"routingPreference": "TRAFFIC_AWARE",
"polylineQuality": "OVERVIEW",
"departureTime": "2019-10-15T15:01:23.045123456Z",
"computeAlternativeRoutes": false,
"routeModifiers": {
"avoidTolls": false,
"avoidHighways": false,
"avoidFerries": false
},
"languageCode": "en-US",
"units": "IMPERIAL"
}
Exemple de corps de réponse
Le code JSON suivant est un exemple de corps de réponse renvoyé par l'appel à computeRoutes
ci-dessus.
{
"routes": [
{
"distanceMeters": 772,
"duration": "165s",
"polyline": {
"encodedPolyline": "ipkcFfichVnP@j@BLoFVwM{E?"
}
}
]
}
Exemple de requête gRPC
Vous trouverez ci-dessous un exemple de requête gRPC.
Go
package main import ( "context" "fmt" "log" "time" routespreferred "developers.google.com/maps/go/routespreferred/v1" "google.golang.org/api/option" routespb "google.golang.org/genproto/googleapis/maps/routes/v1" "google.golang.org/genproto/googleapis/type/latlng" "google.golang.org/grpc/metadata" ) const ( // https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys credentialsFile = "service-account.json" // Note that setting the field mask to * is OK for testing, but discouraged in // production. // For example, for ComputeRoutes, set the field mask to // "routes.distanceMeters,routes.duration,routes.polyline.encodedPolyline" // in order to get the route distances, durations, and encoded polylines. fieldMask = "*" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() // instantiate a client c, err := routespreferred.NewRoutesPreferredClient(ctx, option.WithCredentialsFile(credentialsFile)) defer c.Close() if err != nil { log.Fatal(err) } // create the origin using a latitude and longitude origin := &routespb.Waypoint{ LocationType: &routespb.Waypoint_Location{ Location: &routespb.Location{ LatLng: &latlng.LatLng{ Latitude: 37.417670, Longitude: -122.0827784, }, }, }, } // create the destination using a latitude and longitude destination := &routespb.Waypoint{ LocationType: &routespb.Waypoint_Location{ Location: &routespb.Location{ LatLng: &latlng.LatLng{ Latitude: 37.417670, Longitude: -122.079595, }, }, }, } // create the request with additional options req := &routespb.ComputeRoutesRequest{ Origin: origin, Destination: destination, TravelMode: routespb.RouteTravelMode_DRIVE, RoutingPreference: routespb.RoutingPreference_TRAFFIC_AWARE, ComputeAlternativeRoutes: true, Units: routespb.Units_METRIC, LanguageCode: "en-us", RouteModifiers: &routespb.RouteModifiers{ AvoidTolls: false, AvoidHighways: true, AvoidFerries: true, }, PolylineQuality: routespb.PolylineQuality_OVERVIEW, } // set the field mask ctx = metadata.AppendToOutgoingContext(ctx, "X-Goog-Fieldmask", fieldMask) // execute rpc resp, err := c.ComputeRoutes(ctx, req) if err != nil { // "rpc error: code = InvalidArgument desc = Request contains an invalid // argument" may indicate that your project lacks access to Routes Preferred log.Fatal(err) } fmt.Printf("Duration of route %d", resp.Routes[0].Duration.Seconds) }
Exemple de calcul des frais de péage
L'exemple suivant utilise la méthode computeRoutes
pour renvoyer des informations sur les péages avec un prix estimé lorsqu'une carte de péage est utilisée.
Cette fonctionnalité est activée avec le masque de champ routes.travelAdvisory.tollInfo
spécifié dans la requête. Le télépéage est spécifié dans le champ route_modifiers
. Le prix de péage renvoyé est basé sur le prix utilisé par la carte spécifiée. Si plusieurs cartes sont spécifiées, le prix le moins cher est renvoyé.
Requête :
curl -X POST -d '{
"origin":{
"location":{
"lat_lng":{
"latitude":47.7020056,
"longitude":-122.3479236
}
}
},
"destination":{
"location":{
"lat_lng":{
"latitude":47.6192234,
"longitude": -122.1676792
}
}
},
"travel_mode":"DRIVE",
"route_modifiers":{
"vehicle_info":{
"emission_type": "GASOLINE"
},
"toll_passes": [
"US_MA_EZPASSMA",
"US_WA_GOOD_TO_GO"
]
}
}' \
-H 'Content-Type: application/json' \
-H 'X-Goog-Api-Key: <YOUR_API_KEY>' \
-H 'X-Goog-FieldMask: routes.duration,routes.distanceMeters,routes.travelAdvisory.tollInfo,routes.legs.travelAdvisory.tollInfo' \
'https://routespreferred.googleapis.com/v1alpha:computeRoutes'
Response:
{
"routes": [
{
"legs": [
{
"travelAdvisory": {
"tollInfo": {
"estimatedPrice": [
{
"currencyCode": "USD",
"units": "3",
"nanos": 400000000
}
]
}
}
}
],
"distanceMeters": 22496,
"duration": "1400s",
"travelAdvisory": {
"tollInfo": {
"estimatedPrice": [
{
"currencyCode": "USD",
"units": "3",
"nanos": 400000000
}
]
}
}
}
]
}