// Copyright 2024 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/localized_time.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/route_travel_mode.proto"; import "google/maps/routing/v2/speed_reading_interval.proto"; import "google/maps/routing/v2/toll_info.proto"; import "google/maps/routing/v2/transit.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/type/localized_text.proto"; import "google/type/money.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"; // Contains a route, which consists of a series of connected road segments // that join beginning, ending, and intermediate waypoints. message Route { // Text representations of certain properties. message RouteLocalizedValues { // Travel distance represented in text form. google.type.LocalizedText distance = 1; // Duration taking traffic conditions into consideration, represented in // text form. Note: If you did not request traffic information, this value // will be the same value as `static_duration`. google.type.LocalizedText duration = 2; // Duration without taking traffic conditions into consideration, // represented in text form. google.type.LocalizedText static_duration = 3; // Transit fare represented in text form. google.type.LocalizedText transit_fare = 4; } // 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 travel through the route without taking traffic // conditions into consideration. google.protobuf.Duration static_duration = 4; // The overall route polyline. This polyline is 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; // If you set // [`optimize_waypoint_order`][google.maps.routing.v2.ComputeRoutesRequest.optimize_waypoint_order] // to true, this field contains the optimized ordering of intermediate // waypoints. Otherwise, this field is empty. // For example, if you give an input of Origin: LA; Intermediate waypoints: // Dallas, Bangor, Phoenix; Destination: New York; and the optimized // intermediate waypoint order is Phoenix, Dallas, Bangor, then this field // contains the values [2, 0, 1]. The index starts with 0 for the first // intermediate waypoint provided in the input. repeated int32 optimized_intermediate_waypoint_index = 10; // Text representations of properties of the `Route`. RouteLocalizedValues localized_values = 11; // A web-safe, base64-encoded route token that can be passed to the Navigation // SDK, that allows the Navigation SDK to reconstruct the route during // navigation, and, in the event of rerouting, honor the original intention // when you created the route by calling ComputeRoutes. Customers should treat // this token as an opaque blob. It is not meant for reading or mutating. // 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 not supported for requests // that have Via waypoints. string route_token = 12; } // Contains the additional information that the user should be informed // about, such as possible traffic zone restrictions. message RouteTravelAdvisory { // Contains information about tolls on the route. This field is only populated // if tolls are expected on the route. If this field is set, but the // `estimatedPrice` subfield is not populated, then the route contains tolls, // but the estimated price is unknown. If this field is not set, then there // are no tolls expected 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 predicted fuel consumption in microliters. int64 fuel_consumption_microliters = 5; // Returned route may have restrictions that are not suitable for requested // travel mode or route modifiers. bool route_restrictions_partially_ignored = 6; // If present, contains the total fare or ticket costs on this route // This property is only returned for `TRANSIT` requests and only // for routes where fare information is available for all transit steps. google.type.Money transit_fare = 7; } // Contains the additional information that the user should be informed // about on a leg step, such as possible traffic zone restrictions. message RouteLegTravelAdvisory { // Contains 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 `RouteLeg` 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; } // Contains the additional information that the user should be informed // about, such as possible traffic zone restrictions on a leg step. message RouteLegStepTravelAdvisory { // NOTE: This field is not currently populated. repeated SpeedReadingInterval speed_reading_intervals = 1; } // Contains a segment between non-`via` waypoints. message RouteLeg { // Text representations of certain properties. message RouteLegLocalizedValues { // Travel distance represented in text form. google.type.LocalizedText distance = 1; // Duration taking traffic conditions into consideration represented in text // form. Note: If you did not request traffic information, this value will // be the same value as static_duration. google.type.LocalizedText duration = 2; // Duration without taking traffic conditions into // consideration, represented in text form. google.type.LocalizedText static_duration = 3; } // Provides overview information about a list of `RouteLegStep`s. message StepsOverview { // Provides summarized information about different multi-modal segments of // the `RouteLeg.steps`. A multi-modal segment is defined as one or more // contiguous `RouteLegStep` that have the same `RouteTravelMode`. // This field is not populated if the `RouteLeg` does not contain any // multi-modal segments in the steps. message MultiModalSegment { // The corresponding `RouteLegStep` index that is the start of a // multi-modal segment. optional int32 step_start_index = 1; // The corresponding `RouteLegStep` index that is the end of a // multi-modal segment. optional int32 step_end_index = 2; // NavigationInstruction for the multi-modal segment. NavigationInstruction navigation_instruction = 3; // The travel mode of the multi-modal segment. RouteTravelMode travel_mode = 4; } // Summarized information about different multi-modal segments of // the `RouteLeg.steps`. This field is not populated if the `RouteLeg` does // not contain any multi-modal segments in the steps. repeated MultiModalSegment multi_modal_segments = 1; } // 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 travel through the leg, calculated without taking // traffic conditions into consideration. google.protobuf.Duration static_duration = 3; // The overall polyline for this leg that includes each `step`'s // polyline. Polyline polyline = 4; // The start location of this leg. This location 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 location 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; // Contains the additional information that the user should be informed // about, such as possible traffic zone restrictions, on a route leg. RouteLegTravelAdvisory travel_advisory = 8; // Text representations of properties of the `RouteLeg`. RouteLegLocalizedValues localized_values = 9; // Overview information about the steps in this `RouteLeg`. This field is only // populated for TRANSIT routes. StepsOverview steps_overview = 10; } // Contains 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 { // Text representations of certain properties. message RouteLegStepLocalizedValues { // Travel distance represented in text form. google.type.LocalizedText distance = 1; // Duration without taking traffic conditions into // consideration, represented in text form. google.type.LocalizedText static_duration = 3; } // 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; // Contains the additional information that the user should be informed // about, such as possible traffic zone restrictions, on a leg step. RouteLegStepTravelAdvisory travel_advisory = 7; // Text representations of properties of the `RouteLegStep`. RouteLegStepLocalizedValues localized_values = 8; // Details pertaining to this step if the travel mode is `TRANSIT`. RouteLegStepTransitDetails transit_details = 9; // The travel mode used for this step. RouteTravelMode travel_mode = 10; } // Additional information for the `RouteLegStep` related to `TRANSIT` routes. message RouteLegStepTransitDetails { // Details about the transit stops for the `RouteLegStep`. message TransitStopDetails { // Information about the arrival stop for the step. TransitStop arrival_stop = 1; // The estimated time of arrival for the step. google.protobuf.Timestamp arrival_time = 2; // Information about the departure stop for the step. TransitStop departure_stop = 3; // The estimated time of departure for the step. google.protobuf.Timestamp departure_time = 4; } // Localized descriptions of values for `RouteTransitDetails`. message TransitDetailsLocalizedValues { // Time in its formatted text representation with a corresponding time zone. LocalizedTime arrival_time = 1; // Time in its formatted text representation with a corresponding time zone. LocalizedTime departure_time = 2; } // Information about the arrival and departure stops for the step. TransitStopDetails stop_details = 1; // Text representations of properties of the `RouteLegStepTransitDetails`. TransitDetailsLocalizedValues localized_values = 2; // Specifies the direction in which to travel on this line as marked on // the vehicle or at the departure stop. The direction is often the terminus // station. string headsign = 3; // Specifies the expected time as a duration between departures from the same // stop at this time. For example, with a headway seconds value of 600, you // would expect a ten minute wait if you should miss your bus. google.protobuf.Duration headway = 4; // Information about the transit line used in this step. TransitLine transit_line = 5; // The number of stops from the departure to the arrival stop. This count // includes the arrival stop, but excludes the departure stop. For example, if // your route leaves from Stop A, passes through stops B and C, and arrives at // stop D, stop_count will return 3. int32 stop_count = 6; // The text that appears in schedules and sign boards to identify a transit // trip to passengers. The text should uniquely identify a trip within a // service day. For example, "538" is the `trip_short_text` of the Amtrak // train that leaves San Jose, CA at 15:10 on weekdays to Sacramento, CA. string trip_short_text = 7; }