Đặt PROJECT_NUMBER_OR_ID thành số hoặc mã dự án trên Cloud.
Go
Tạo yêu cầu bằng thư viện ứng dụng Go:
import("context""fmt"routeoptimization"cloud.google.com/go/maps/routeoptimization/apiv1""google.golang.org/genproto/googleapis/type/latlng"rpb"cloud.google.com/go/maps/routeoptimization/apiv1/routeoptimizationpb")funcoptimizeTours(projectIDstring)(*rpb.OptimizeToursResponse,error){ctx:=context.Background()c,err:=routeoptimization.NewClient(ctx)iferr!=nil{returnnil,fmt.Errorf("routeoptimization client: %w",err)}deferc.Close()// See https://pkg.go.dev/cloud.google.com/go/maps/routeoptimization/apiv1/routeoptimizationpb#OptimizeToursRequest.req:=&rpb.OptimizeToursRequest{Parent:"projects/"+projectID,Model:&rpb.ShipmentModel{Shipments:[]*rpb.Shipment{&rpb.Shipment{Deliveries:[]*rpb.Shipment_VisitRequest{{ArrivalLocation:&latlng.LatLng{Latitude:48.880942,Longitude:2.323866}},},},},Vehicles:[]*rpb.Vehicle{{StartLocation:&latlng.LatLng{Latitude:48.863102,Longitude:2.341204},EndLocation:&latlng.LatLng{Latitude:48.86311,Longitude:2.341205},},},},}returnc.OptimizeTours(ctx,req)}
importcom.google.maps.routeoptimization.v1.OptimizeToursRequest;importcom.google.maps.routeoptimization.v1.OptimizeToursResponse;importcom.google.maps.routeoptimization.v1.RouteOptimizationClient;importcom.google.maps.routeoptimization.v1.RouteOptimizationSettings;importcom.google.maps.routeoptimization.v1.Shipment;importcom.google.maps.routeoptimization.v1.Shipment.VisitRequest;importcom.google.maps.routeoptimization.v1.ShipmentModel;importcom.google.maps.routeoptimization.v1.Vehicle;importcom.google.type.LatLng;importjava.time.Duration;publicclassOptimizeTours{publicstaticOptimizeToursResponseoptimizeTours(StringprojectId)throwsException{// Optional: method calls that last tens of minutes may be interrupted// without enabling a short keep-alive interval.RouteOptimizationSettingsclientSettings=RouteOptimizationSettings.newBuilder().setTransportChannelProvider(RouteOptimizationSettings.defaultGrpcTransportProviderBuilder().setKeepAliveTimeDuration(Duration.ofSeconds(30)).build()).build();RouteOptimizationClientclient=RouteOptimizationClient.create(clientSettings);OptimizeToursRequestrequest=OptimizeToursRequest.newBuilder().setParent("projects/"+projectId).setModel(ShipmentModel.newBuilder().addShipments(Shipment.newBuilder().addPickups(VisitRequest.newBuilder().setArrivalLocation(LatLng.newBuilder().setLatitude(48.8).setLongitude(2.4)))).addVehicles(Vehicle.newBuilder().setStartLocation(LatLng.newBuilder().setLatitude(48.9).setLongitude(2.5)))).build();returnclient.optimizeTours(request);}}
Trước tiên, hãy yêu cầu bản sao của kho lưu trữ ứng dụng Node.js từ người đại diện của Nền tảng Google Maps.
Định cấu hình tệp package.json bằng đoạn mã JSON sau:
{"name":"route-optimization-example","version":"1.0.0","description":"A RouteOptimization example.","main":"main.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":"","dependencies":{"@googlemaps/routeoptimization":"^0.1.0"}}
[null,null,["Cập nhật lần gần đây nhất: 2025-09-01 UTC."],[[["\u003cp\u003eUse an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e message to make an \u003ccode\u003eOptimizeTours\u003c/code\u003e request to the Route Optimization API.\u003c/p\u003e\n"],["\u003cp\u003eClient libraries are available in Go, Java, Python, and Node.js for making requests, in addition to REST and gRPC options.\u003c/p\u003e\n"],["\u003cp\u003eBefore making a request, ensure Application Default Credentials are configured and replace project placeholders with your project ID.\u003c/p\u003e\n"],["\u003cp\u003eRequests include details such as shipments, vehicles, their locations, and operational time windows.\u003c/p\u003e\n"],["\u003cp\u003eUpon successful completion, an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e message will be returned, which can be further interpreted.\u003c/p\u003e\n"]]],["The document outlines how to use the `OptimizeTours` request via client libraries (Go, Java, Python, Node.js) or REST/gRPC. It involves configuring Application Default Credentials and setting the project ID. Requests specify shipment details like pickup/delivery locations and vehicle start/end locations, alongside global start/end times, using `OptimizeToursRequest`. The examples provided in the content show how to create and send this request using each client library or using the command-line interface through a REST request.\n"],null,["**European Economic Area (EEA) developers** If your billing address is in the European Economic Area, effective on 8 July 2025, the [Google Maps Platform EEA Terms of Service](https://cloud.google.com/terms/maps-platform/eea) will apply to your use of the Services. Functionality varies by region. [Learn more](/maps/comms/eea/faq).\n\nAn `OptimizeToursRequest` message can be used to make an `OptimizeTours`\nrequest.\n\nExample: Make an `OptimizeTours` request\n\nClient libraries are also available for several popular programming languages.\n`OptimizeTours` requests can also be made using either [REST](/maps/documentation/route-optimization/reference/rest/v1/projects/optimizeTours) or [gRPC](/maps/documentation/route-optimization/reference/rpc/google.maps.routeoptimization.v1#routeoptimization).\n| **Note:** See [installation instructions](/maps/documentation/route-optimization/client-libraries) for client libraries used for the following examples.\n\nBefore making a request, replace the following parameters with values\nappropriate for your environment:\n\n- Ensure you have [Application Default Credentials](https://cloud.google.com/docs/authentication/provide-credentials-adc) configured as described in [Use OAuth](/maps/documentation/route-optimization/oauth-token).\n- Set \u003cvar label=\"project_number\" translate=\"no\"\u003ePROJECT_NUMBER_OR_ID\u003c/var\u003e to your Cloud\n project number or ID.\n\nGo\n\nMake a request using the Go client library: \n\n```go\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\trouteoptimization \"cloud.google.com/go/maps/routeoptimization/apiv1\"\n\t\"google.golang.org/genproto/googleapis/type/latlng\"\n\n\trpb \"cloud.google.com/go/maps/routeoptimization/apiv1/routeoptimizationpb\"\n)\n\nfunc optimizeTours(projectID string) (*rpb.OptimizeToursResponse, error) {\n\tctx := context.Background()\n\tc, err := routeoptimization.NewClient(ctx)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"routeoptimization client: %w\", err)\n\t}\n\tdefer c.Close()\n\n\t// See https://pkg.go.dev/cloud.google.com/go/maps/routeoptimization/apiv1/routeoptimizationpb#OptimizeToursRequest.\n\treq := &rpb.OptimizeToursRequest{\n\t\tParent: \"projects/\" + projectID,\n\t\tModel: &rpb.ShipmentModel{\n\t\t\tShipments: []*rpb.Shipment{\n\t\t\t\t&rpb.Shipment{\n\t\t\t\t\tDeliveries: []*rpb.Shipment_VisitRequest{\n\t\t\t\t\t\t{ArrivalLocation: &latlng.LatLng{Latitude: 48.880942, Longitude: 2.323866}},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tVehicles: []*rpb.Vehicle{\n\t\t\t\t{\n\t\t\t\t\tStartLocation: &latlng.LatLng{Latitude: 48.863102, Longitude: 2.341204},\n\t\t\t\t\tEndLocation: &latlng.LatLng{Latitude: 48.86311, Longitude: 2.341205},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\treturn c.OptimizeTours(ctx, req)\n}\nhttps://github.com/GoogleCloudPlatform/golang-samples/blob/0f9d83276109eb453cf6bd6ca044bd9b99528545/routeoptimization/snippets/optimize_tours.go#L18-L57\n```\n\nJava\n\nMake a request using the Java client library: \n\n```java\nimport com.google.maps.routeoptimization.v1.OptimizeToursRequest;\nimport com.google.maps.routeoptimization.v1.OptimizeToursResponse;\nimport com.google.maps.routeoptimization.v1.RouteOptimizationClient;\nimport com.google.maps.routeoptimization.v1.RouteOptimizationSettings;\nimport com.google.maps.routeoptimization.v1.Shipment;\nimport com.google.maps.routeoptimization.v1.Shipment.VisitRequest;\nimport com.google.maps.routeoptimization.v1.ShipmentModel;\nimport com.google.maps.routeoptimization.v1.Vehicle;\nimport com.google.type.LatLng;\nimport java.time.Duration;\n\npublic class OptimizeTours {\n public static OptimizeToursResponse optimizeTours(String projectId) throws Exception {\n // Optional: method calls that last tens of minutes may be interrupted\n // without enabling a short keep-alive interval.\n RouteOptimizationSettings clientSettings = RouteOptimizationSettings\n .newBuilder()\n .setTransportChannelProvider(RouteOptimizationSettings\n .defaultGrpcTransportProviderBuilder()\n .setKeepAliveTimeDuration(Duration.ofSeconds(30))\n .build()).build();\n\n RouteOptimizationClient client = RouteOptimizationClient.create(clientSettings);\n OptimizeToursRequest request =\n OptimizeToursRequest.newBuilder()\n .setParent(\"projects/\" + projectId)\n .setModel(\n ShipmentModel.newBuilder()\n .addShipments(\n Shipment.newBuilder()\n .addPickups(\n VisitRequest.newBuilder()\n .setArrivalLocation(\n LatLng.newBuilder().setLatitude(48.8).setLongitude(2.4))))\n .addVehicles(\n Vehicle.newBuilder()\n .setStartLocation(\n LatLng.newBuilder().setLatitude(48.9).setLongitude(2.5))))\n .build();\n return client.optimizeTours(request);\n }\n}https://github.com/GoogleCloudPlatform/java-docs-samples/blob/ffc0b8611cfe6ccb103654a8270bb7ee519fdd12/routeoptimization/snippets/src/main/java/com/example/OptimizeTours.java#L46-L75\n```\n\nPython\n\nThe Python client is available on\n[PyPI](https://pypi.org/project/google-maps-routeoptimization/). \n\n pip install google-maps-routeoptimization\n\nMake a request using the Python client library: \n\n```python\nfrom google.maps import routeoptimization_v1 as ro\nfrom datetime import datetime\n\nclient = ro.RouteOptimizationClient()\nrequest = ro.OptimizeToursRequest(\n parent=\"projects/\u003cvar label=\"project_number\" translate=\"no\"\u003ePROJECT_NUMBER_OR_ID\u003c/var\u003e\",\n model={\n \"shipments\": [\n {\n \"pickups\": [\n {\n \"arrival_location\": {\n \"latitude\": 37.738818,\n \"longitude\": -122.4161\n }\n }\n ],\n \"deliveries\": [\n {\n \"arrival_location\": {\n \"latitude\": 37.79581,\n \"longitude\": -122.4218856\n }\n }\n ]\n }\n ],\n \"vehicles\": [\n {\n \"start_location\": {\n \"latitude\": 37.738818,\n \"longitude\": -122.4161\n },\n \"end_location\": {\n \"latitude\": 37.738818,\n \"longitude\": -122.4161\n },\n \"cost_per_kilometer\": 1.0\n }\n ],\n \"global_start_time\": datetime.fromisoformat(\"2024-02-13T00:00:00.000Z\"),\n \"global_end_time\": datetime.fromisoformat(\"2024-02-14T06:00:00.000Z\")\n }\n)\nresponse = client.optimize_tours(request=request)\nprint(response)\n```\n\nNode.js\n\nFirst, request a copy of the Node.js client archive from your Google Maps\nPlatform representative.\n\nConfigure your `package.json` file using the following JSON snippet: \n\n {\n \"name\": \"route-optimization-example\",\n \"version\": \"1.0.0\",\n \"description\": \"A RouteOptimization example.\",\n \"main\": \"main.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"author\": \"\",\n \"dependencies\": {\n \"@googlemaps/routeoptimization\": \"^0.1.0\"\n }\n }\n\nMake a request using the Node.js client library: \n\n```javascript\n'use strict';\n\nconst {RouteOptimizationClient} = require('@googlemaps/routeoptimization').v1;\n\nconst routeoptimizationClient = new RouteOptimizationClient();\n\nasync function callOptimizeTours() {\n const response = await routeoptimizationClient.optimizeTours({\n \"parent\": \"projects/\u003cvar label=\"project_number\" translate=\"no\"\u003ePROJECT_NUMBER_OR_ID\u003c/var\u003e\",\n \"model\": {\n \"shipments\": [\n {\n \"pickups\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n }\n }\n ],\n \"deliveries\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.79581,\n \"longitude\": -122.4218856\n }\n }\n ]\n }\n ],\n \"vehicles\": [\n {\n \"startLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"endLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"costPerKilometer\": 1.0\n }\n ],\n \"globalStartTime\": \"2024-02-13T00:00:00.000Z\",\n \"globalEndTime\": \"2024-02-14T06:00:00.000Z\"\n }\n });\n console.log(JSON.stringify(response));\n}\ncallOptimizeTours();\n```\n\nREST\n\nThe following command sends an `OptimizeTours` request to the Route\nOptimization API and receives a response synchronously. \n\n```scdoc\ncurl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \\\n-H \"Content-Type: application/json\" \\\n-H \"Authorization: Bearer $(gcloud auth application-default print-access-token)\" \\\n--data @- \u003c\u003c EOM\n{\n \"model\": {\n \"shipments\": [\n {\n \"pickups\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n }\n }\n ],\n \"deliveries\": [\n {\n \"arrivalLocation\": {\n \"latitude\": 37.79581,\n \"longitude\": -122.4218856\n }\n }\n ]\n }\n ],\n \"vehicles\": [\n {\n \"startLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"endLocation\": {\n \"latitude\": 37.73881799999999,\n \"longitude\": -122.4161\n },\n \"costPerKilometer\": 1.0\n }\n ],\n \"globalStartTime\": \"2024-02-13T00:00:00.000Z\",\n \"globalEndTime\": \"2024-02-14T06:00:00.000Z\"\n }\n}\nEOM\n```\n| **Note:** this example uses the `--data @-` to read a request from standard input. Use `--data @`\u003cvar label=\"curl_filename\" translate=\"no\"\u003eFilename\u003c/var\u003e to read from a file.\n\nOnce the request completes, you'll receive a response message.\n\n[Next: Interpret the Response](/maps/documentation/route-optimization/interpret-response)"]]