محاسبه یک مسیر مثال

می توانید با ارسال یک درخواست HTTP POST به منبع زیر مجموعه ای از مسیرها را از Routes Preferred API بازیابی کنید:

https://routespreferred.googleapis.com/v1:computeRoutes

گزینه های درخواست خود را با فرمت JSON در متن پیام وارد کنید. برای اطلاعات در مورد مجموعه کامل گزینه‌ها، به بخش درخواست computeRoutes مراجعه کنید.

نمونه درخواست بدنه

کد JSON زیر نحوه ساخت بدنه درخواست معمولی برای درخواست 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"
}

نمونه بدن پاسخ

کد JSON زیر نمونه ای از بدنه پاسخی است که از فراخوانی بالا به computeRoutes بازگردانده شده است.

{
  "routes": [
    {
      "distanceMeters": 772,
      "duration": "165s",
      "polyline": {
        "encodedPolyline": "ipkcFfichVnP@j@BLoFVwM{E?"
      }
    }
  ]
}

نمونه درخواست gRPC

در زیر نمونه ای از درخواست gRPC را نشان می دهد.

برو

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)
}

مثال محاسبه هزینه عوارض

مثال زیر از روش computeRoutes برای برگرداندن اطلاعات عوارض با قیمت تخمینی در هنگام استفاده از کارت عوارض استفاده می کند.

این ویژگی با ماسک فیلد routes.travelAdvisory.tollInfo مشخص شده در درخواست فعال می شود. کارت عوارض در قسمت route_modifiers مشخص شده است. قیمت عوارض برگشتی بر اساس قیمت استفاده شده توسط پاس مشخص شده است. اگر بیش از یک پاس مشخص شده باشد، کم هزینه ترین قیمت برگشت داده می شود.

درخواست:

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'

واکنش:

{
  "routes": [
    {
      "legs": [
        {
          "travelAdvisory": {
            "tollInfo": {
              "estimatedPrice": [
                {
                  "currencyCode": "USD",
                  "units": "3",
                  "nanos": 400000000
                }
              ]
            }
          }
        }
      ],
      "distanceMeters": 22496,
      "duration": "1400s",
      "travelAdvisory": {
        "tollInfo": {
          "estimatedPrice": [
            {
              "currencyCode": "USD",
              "units": "3",
              "nanos": 400000000
            }
          ]
        }
      }
    }
  ]
}