Rota Örnekleri Hesaplama

Aşağıdaki kaynağa HTTP POST isteği göndererek Routes Preferred API'den bir rota grubu alabilirsiniz:

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

JSON biçiminde biçimlendirilmiş istek seçeneklerinizi ileti gövdesine ekleyin. Tüm seçenekler hakkında bilgi edinmek için computeRoutes istek gövdesi bölümüne bakın.

Örnek istek içeriği

Aşağıdaki JSON kodu, computeRoutes isteği için tipik bir istek gövdesinin nasıl oluşturulacağını gösterir.

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

Örnek yanıt gövdesi

Aşağıdaki JSON kodu, computeRoutes çağrısına yapılan yukarıdaki çağrıdan döndürülen yanıt gövdesine örnektir.

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

Örnek gRPC İsteği

Aşağıda örnek bir gRPC isteği gösterilmektedir.

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

Otoyol ücretlerini hesaplama örneği

Aşağıdaki örnekte, ücretli geçiş kartı kullanıldığında ücretli geçiş bilgilerini tahmini fiyatla döndürmek için computeRoutes yöntemi kullanılmaktadır.

Bu özellik, istekte belirtilen routes.travelAdvisory.tollInfo alan maskesi ile etkinleştirilir. Otoyol geçiş kartı, route_modifiers alanında belirtilir. Döndürülen geçiş ücreti, belirtilen geçiş tarafından kullanılan fiyatlandırmaya dayanır. Birden fazla geçiş belirtilirse en ucuz fiyat döndürülür.

İstek:

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'

Yanıt:

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