Vous pouvez récupérer un ensemble d'itinéraires à 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, mises en forme au format JSON, dans le corps du message. Pour
en savoir plus sur l'ensemble complet des options, consultez le
computeRoutes Corps de la requête.
Exemple de corps de la requête
Le code JSON suivant montre comment créer un corps de requête type
pour une
computeRoutes
requête.
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 la réponse
Le code JSON suivant est un exemple de corps de réponse renvoyé par l'appel ci-dessus à computeRoutes.
{
"routes": [
{
"distanceMeters": 772,
"duration": "165s",
"polyline": {
"encodedPolyline": "ipkcFfichVnP@j@BLoFVwM{E?"
}
}
]
}
Exemple de requête gRPC
Voici 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 péages
L'exemple suivant utilise la
computeRoutes
méthode pour renvoyer des informations sur les péages avec un prix estimé lorsqu'un badge de télépéage est utilisé.
Cette fonctionnalité est activée avec le masque de champ routes.travelAdvisory.tollInfo spécifié dans la requête. Le badge de télépéage est spécifié dans le champ route_modifiers. Le prix du péage renvoyé est basé sur la tarification utilisée par le badge spécifié. Si plusieurs badges sont spécifiés, 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'
Réponse :
{
"routes": [
{
"legs": [
{
"travelAdvisory": {
"tollInfo": {
"estimatedPrice": [
{
"currencyCode": "USD",
"units": "3",
"nanos": 400000000
}
]
}
}
}
],
"distanceMeters": 22496,
"duration": "1400s",
"travelAdvisory": {
"tollInfo": {
"estimatedPrice": [
{
"currencyCode": "USD",
"units": "3",
"nanos": 400000000
}
]
}
}
}
]
}