// Copyright 2023 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package google.maps.routing.v2; import "google/geo/type/viewport.proto"; import "google/maps/routing/v2/location.proto"; import "google/maps/routing/v2/navigation_instruction.proto"; import "google/maps/routing/v2/polyline.proto"; import "google/maps/routing/v2/route_label.proto"; import "google/maps/routing/v2/speed_reading_interval.proto"; import "google/maps/routing/v2/toll_info.proto"; import "google/protobuf/duration.proto"; option cc_enable_arenas = true; option csharp_namespace = "Google.Maps.Routing.V2"; option go_package = "cloud.google.com/go/maps/routing/apiv2/routingpb;routingpb"; option java_multiple_files = true; option java_outer_classname = "RouteProto"; option java_package = "com.google.maps.routing.v2"; option objc_class_prefix = "GMRV2"; option php_namespace = "Google\\Maps\\Routing\\V2"; option ruby_package = "Google::Maps::Routing::V2"; // Encapsulates a route, which consists of a series of connected road segments // that join beginning, ending, and intermediate waypoints. message Route { // Labels for the `Route` that are useful to identify specific properties // of the route to compare against others. repeated RouteLabel route_labels = 13; // A collection of legs (path segments between waypoints) that make-up the // route. Each leg corresponds to the trip between two non-`via` // [Waypoints][google.maps.routing.v2.Waypoint]. For example, a route with no // intermediate waypoints has only one leg. A route that includes one // non-`via` intermediate waypoint has two legs. A route that includes one // `via` intermediate waypoint has one leg. The order of the legs matches the // order of Waypoints from `origin` to `intermediates` to `destination`. repeated RouteLeg legs = 1; // The travel distance of the route, in meters. int32 distance_meters = 2; // The length of time needed to navigate the route. If you set the // `routing_preference` to `TRAFFIC_UNAWARE`, then this value is the same as // `static_duration`. If you set the `routing_preference` to either // `TRAFFIC_AWARE` or `TRAFFIC_AWARE_OPTIMAL`, then this value is calculated // taking traffic conditions into account. google.protobuf.Duration duration = 3; // The duration of traveling through the route without taking traffic // conditions into consideration. google.protobuf.Duration static_duration = 4; // The overall route polyline. This polyline will be the combined polyline of // all `legs`. Polyline polyline = 5; // A description of the route. string description = 6; // An array of warnings to show when displaying the route. repeated string warnings = 7; // The viewport bounding box of the polyline. google.geo.type.Viewport viewport = 8; // Additional information about the route. RouteTravelAdvisory travel_advisory = 9; // Web-safe base64 encoded route token that can be passed to NavigationSDK, // which allows the Navigation SDK to reconstruct the route during navigation, // and in the event of rerouting honor the original intention when Routes // ComputeRoutes is called. Customers should treat this token as an // opaque blob. // NOTE: `Route.route_token` is only available for requests that have set // `ComputeRoutesRequest.routing_preference` to `TRAFFIC_AWARE` or // `TRAFFIC_AWARE_OPTIMAL`. `Route.route_token` is also not supported for // requests that have Via waypoints. string route_token = 12; } // Encapsulates the additional information that the user should be informed // about, such as possible traffic zone restriction etc. message RouteTravelAdvisory { // Encapsulates information about tolls on the Route. // This field is only populated if we expect there are tolls on the Route. // If this field is set but the estimated_price subfield is not populated, // we expect that road contains tolls but we do not know an estimated price. // If this field is not set, then we expect there is no toll on the Route. TollInfo toll_info = 2; // Speed reading intervals detailing traffic density. Applicable in case of // `TRAFFIC_AWARE` and `TRAFFIC_AWARE_OPTIMAL` routing preferences. // The intervals cover the entire polyline of the route without overlap. // The start point of a specified interval is the same as the end point of the // preceding interval. // // Example: // // polyline: A ---- B ---- C ---- D ---- E ---- F ---- G // speed_reading_intervals: [A,C), [C,D), [D,G). repeated SpeedReadingInterval speed_reading_intervals = 3; // The fuel consumption prediction in microliters. int64 fuel_consumption_microliters = 5; } // Encapsulates the additional information that the user should be informed // about, such as possible traffic zone restriction etc. on a route leg. message RouteLegTravelAdvisory { // Encapsulates information about tolls on the specific RouteLeg. // This field is only populated if we expect there are tolls on the RouteLeg. // If this field is set but the estimated_price subfield is not populated, // we expect that road contains tolls but we do not know an estimated price. // If this field does not exist, then there is no toll on the RouteLeg. TollInfo toll_info = 1; // Speed reading intervals detailing traffic density. Applicable in case of // `TRAFFIC_AWARE` and `TRAFFIC_AWARE_OPTIMAL` routing preferences. // The intervals cover the entire polyline of the RouteLg without overlap. // The start point of a specified interval is the same as the end point of the // preceding interval. // // Example: // // polyline: A ---- B ---- C ---- D ---- E ---- F ---- G // speed_reading_intervals: [A,C), [C,D), [D,G). repeated SpeedReadingInterval speed_reading_intervals = 2; } // Encapsulates the additional information that the user should be informed // about, such as possible traffic zone restriction on a leg step. message RouteLegStepTravelAdvisory { // NOTE: This field is not currently populated. repeated SpeedReadingInterval speed_reading_intervals = 1; } // Encapsulates a segment between non-`via` waypoints. message RouteLeg { // The travel distance of the route leg, in meters. int32 distance_meters = 1; // The length of time needed to navigate the leg. If the `route_preference` // is set to `TRAFFIC_UNAWARE`, then this value is the same as // `static_duration`. If the `route_preference` is either `TRAFFIC_AWARE` or // `TRAFFIC_AWARE_OPTIMAL`, then this value is calculated taking traffic // conditions into account. google.protobuf.Duration duration = 2; // The duration of traveling through the leg, calculated without taking // traffic conditions into consideration. google.protobuf.Duration static_duration = 3; // The overall polyline for this leg. This includes that each `step`'s // polyline. Polyline polyline = 4; // The start location of this leg. This might be different from the provided // `origin`. For example, when the provided `origin` is not near a road, this // is a point on the road. Location start_location = 5; // The end location of this leg. This might be different from the provided // `destination`. For example, when the provided `destination` is not near a // road, this is a point on the road. Location end_location = 6; // An array of steps denoting segments within this leg. Each step represents // one navigation instruction. repeated RouteLegStep steps = 7; // Encapsulates the additional information that the user should be informed // about, such as possible traffic zone restriction etc. on a route leg. RouteLegTravelAdvisory travel_advisory = 8; } // Encapsulates a segment of a [RouteLeg][google.maps.routing.v2.RouteLeg]. A // step corresponds to a single navigation instruction. Route legs are made up // of steps. message RouteLegStep { // The travel distance of this step, in meters. In some circumstances, this // field might not have a value. int32 distance_meters = 1; // The duration of travel through this step without taking traffic conditions // into consideration. In some circumstances, this field might not have a // value. google.protobuf.Duration static_duration = 2; // The polyline associated with this step. Polyline polyline = 3; // The start location of this step. Location start_location = 4; // The end location of this step. Location end_location = 5; // Navigation instructions. NavigationInstruction navigation_instruction = 6; // Encapsulates the additional information that the user should be informed // about, such as possible traffic zone restriction on a leg step. RouteLegStepTravelAdvisory travel_advisory = 7; }