Les données routières en temps réel fournissent des informations actualisées sur l'état des routes et les événements sur les itinéraires sélectionnés, ce qui permet une surveillance dynamique et une réponse rapide. Ces données diffèrent de celles collectées périodiquement et disponibles dans BigQuery. Elles sont adaptées aux scénarios nécessitant des informations actualisées.
Ces données sont diffusées en continu et incluent la durée du trajet, qui indique les temps de trajet sur un itinéraire, et les intervalles de lecture de la vitesse, qui indiquent la densité du trafic le long de l'itinéraire.
Pour accéder aux données routières en temps réel, votre contrat doit inclure le package Real-Time Operations.
Créer un abonnement Pub/Sub pour les intervalles de lecture de la durée et de la vitesse de trajet
Des sujets Google Cloud Pub/Sub dédiés vous seront fournis. Vous pourrez vous y abonner pour recevoir les données en temps réel de tous les itinéraires que vous avez créés.
L'exemple de code suivant montre le format du sujet à l'aide de l'encodage binaire :
projects/maps-platform-roads-management/topics/rmi-roadsinformation-PROJECT_NUMBER
Nous fournissons également un autre sujet utilisant l'encodage JSON (avec le suffixe -json). Vous devez vous abonner au sujet Pub/Sub qui vous est fourni pour recevoir des messages de données en temps réel. Consultez la page S'abonner à un sujet pour obtenir un aperçu rapide de la procédure d'abonnement et de consommation des messages d'un sujet Cloud Pub/Sub.
Schéma des intervalles de lecture de la durée et de la vitesse de trajet
Chaque message de données en temps réel intègre des données telles que :
- Détails de la route tels que
duration_in_seconds,static_duration_in_seconds,speed_reading_offsets(intervalles de lecture de la vitesse basés sur le décalage),retrieval_timestampethas_road_closure. - Identifiants de route tels que
selected_route_idetdisplay_name.
Chaque message est publié au format Protobuf suivant.
syntax = "proto3"; // Contains the road information like travel duration and speed reading // intervals for a selected route. message RoadsInformation { // Legacy message. May stop being populated on or after November 9, 2026. // Use top-level duration_in_seconds and static_duration_in_seconds instead. message TravelDuration { // The duration of travel through the route based on current road // conditions. float duration_in_seconds = 1; // The duration of travel through the route without taking road // conditions into consideration. float static_duration_in_seconds = 2; } message Timestamp { // Represents seconds of UTC time since Unix epoch // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to // 9999-12-31T23:59:59Z inclusive. int64 seconds = 1; // Non-negative fractions of a second at nanosecond resolution. Negative // second values with fractions must still have non-negative nanos values // that count forward in time. Must be from 0 to 999,999,999 // inclusive. int32 nanos = 2; } // Legacy message representing the latitude and longitude of a coordinate // within a coordinate-based speed reading interval. message LatLng { float latitude = 1; float longitude = 2; } // Legacy coordinate-based speed reading interval message. May stop being // populated on or after November 9, 2026. Use SpeedReadingOffset instead. message SpeedReadingInterval { // The coordinates on the polyline for the speed reading interval. repeated LatLng interval_coordinates = 1; // Describes the categorized current speed of road conditions. // Possible values are: // - "NORMAL": Road is flowing smoothly, no slowdown is detected. // - "SLOW": Slowdown detected, but no congestion formed. // - "TRAFFIC_JAM": Traffic jam detected. In this legacy field, heavy // traffic jams (dark red) are also reported as "TRAFFIC_JAM"; // "TRAFFIC_JAM_HEAVY" is never used. string speed = 2; } // Offset-based speed reading interval along the route. message SpeedReadingOffset { // The distance offset from the start of the route in meters for the start // of the interval (inclusive). int32 start_offset = 1; // The distance offset from the start of the route in meters for the end of // the interval (exclusive; equals the start_offset of the subsequent // interval). int32 end_offset = 2; // Describes the categorized current speed of traffic, aligned with the // colors in the Google Maps traffic layer. Possible values are: // - "NORMAL" (green): Traffic is flowing smoothly, no slowdown is detected. // - "SLOW" (yellow): Slowdown detected, but no traffic jam formed. // - "TRAFFIC_JAM" (red): Traffic jam detected. // - "TRAFFIC_JAM_HEAVY" (dark red): Heavy traffic jam detected (available // as of October 8, 2026). string speed = 3; } // Id for selected_route. string selected_route_id = 1; // User provided name for the route. string display_name = 2; // Legacy coordinate-based speed reading intervals. May stop being populated // on or after November 9, 2026. Use speed_reading_offsets instead. repeated SpeedReadingInterval speed_reading_intervals = 3; // Legacy travel time information. May stop being populated on or after // November 9, 2026. Use duration_in_seconds and static_duration_in_seconds // instead. TravelDuration travel_duration = 4; // Legacy timestamp when the road data was collected. May stop being populated // on or after November 9, 2026. Use retrieval_timestamp instead. Timestamp retrieval_time = 5; // Contains a geojson polyline representing the optimal route determined // based on user's input waypoints. string route_geometry = 6; // Road segment place IDs along the route. They follow topological order // and are always connected. repeated string road_segment_ids = 7; // Offset-based speed reading intervals representing traffic density across // the route; each interval is demarcated by the distance offset from the // start of the route. Omitted when has_road_closure is true. repeated SpeedReadingOffset speed_reading_offsets = 8; // The duration of travel through the route based on current traffic // conditions. Omitted when has_road_closure is true. float duration_in_seconds = 9; // The duration of travel through the route without taking traffic // conditions into consideration. float static_duration_in_seconds = 10; // The time the traffic data was collected, as an RFC 3339 UTC timestamp // string (for example, "2026-10-08T15:04:05+00:00"). string retrieval_timestamp = 11; // Whether there is a full road closure on the route. When true, // duration_in_seconds and speed_reading_offsets are omitted because the // route is impassable. Omitted when road closure information is undetermined. bool has_road_closure = 12; }
Intervalles de lecture de vitesse basés sur un décalage et migration de champs
À partir du 8 octobre 2026, les intervalles de lecture de la vitesse seront fournis dans le champ speed_reading_offsets basé sur le décalage, où chaque intervalle est délimité par ses valeurs start_offset (inclusive) et end_offset (exclusive) en mètres à partir du début de l'itinéraire, et inclut la quatrième catégorie de vitesse TRAFFIC_JAM_HEAVY. Pour en savoir plus sur les catégories de vitesse et les formats d'intervalle, consultez Intervalles de lecture de la vitesse.
Le tableau suivant met en correspondance chaque ancien champ Pub/Sub (qui pourrait ne plus être renseigné à partir du 9 novembre 2026) avec son remplacement :
| Ancien champ | Champ de remplacement | Remarques |
|---|---|---|
speed_reading_intervals |
speed_reading_offsets |
Utilise des décalages en mètres (start_offset, end_offset) au lieu de coordonnées de polyligne et ajoute la catégorie de vitesse TRAFFIC_JAM_HEAVY. |
travel_duration.duration_in_seconds |
duration_in_seconds |
Aplatissement en un champ float de niveau supérieur. |
travel_duration.static_duration_in_seconds |
static_duration_in_seconds |
Aplatissement dans un champ float de niveau supérieur. |
retrieval_time |
retrieval_timestamp |
Formaté en tant que chaîne RFC 3339, que les abonnements BigQuery convertissent automatiquement en TIMESTAMP. |
Diffuser des données d'itinéraire vers BigQuery à l'aide de Pub/Sub
Vous pouvez configurer un abonnement Pub/Sub pour diffuser des données routières directement dans une table BigQuery. Cela permet de stocker les données de manière robuste et d'effectuer des analyses puissantes sur les informations d'itinéraire fournies. Avant de configurer ce type d'abonnement, vous devez créer un ensemble de données et une table appropriés dans votre projet BigQuery pour y écrire les données.
Pour obtenir des instructions détaillées sur la création d'un abonnement Pub/Sub qui écrit dans BigQuery, consultez Diffuser des données en streaming dans BigQuery.
Créez l'abonnement BigQuery sur le sujet encodé en JSON. Lorsque vous configurez l'abonnement, sélectionnez Utiliser un schéma de table et activez l'option Supprimer les champs inconnus afin que votre pipeline d'ingestion continue de s'exécuter correctement lorsque de nouveaux champs sont ajoutés. Pour stocker de nouveaux champs, tels que speed_reading_offsets, ajoutez les colonnes correspondantes à votre table.
Schéma de la table BigQuery
Les messages publiés dans votre sujet Pub/Sub, qui peuvent également être écrits dans votre table BigQuery, sont conformes au schéma suivant. Vous devez utiliser ce schéma lors de la création de votre table BigQuery cible pour garantir la compatibilité.
[ { "mode": "NULLABLE", "name": "selected_route_id", "type": "STRING", "description": "Id for selected_route." }, { "mode": "NULLABLE", "name": "display_name", "type": "STRING", "description": "User provided name for the route." }, { "fields": [ { "mode": "NULLABLE", "name": "speed", "type": "STRING", "description": "Describes the categorized current speed of traffic. Possible values are: \"NORMAL\": Traffic is flowing smoothly, no slowdown is detected. \"SLOW\": Slowdown detected, but no traffic jam formed. \"TRAFFIC_JAM\": Traffic jam detected (groups red and dark red segments; does not include \"TRAFFIC_JAM_HEAVY\")." }, { "fields": [ { "mode": "NULLABLE", "name": "latitude", "type": "NUMERIC" }, { "mode": "NULLABLE", "name": "longitude", "type": "NUMERIC" } ], "mode": "REPEATED", "name": "interval_coordinates", "type": "RECORD", "description": "The geometry for this interval" } ], "mode": "REPEATED", "name": "speed_reading_intervals", "type": "RECORD", "description": "Legacy coordinate-based speed reading intervals. May stop being populated on or after November 9, 2026. Use speed_reading_offsets instead." }, { "fields": [ { "mode": "NULLABLE", "name": "duration_in_seconds", "type": "FLOAT", "description": "The duration of travel through the route based on\ncurrent traffic conditions." }, { "mode": "NULLABLE", "name": "static_duration_in_seconds", "type": "FLOAT", "description": "The duration of travel through the route without\ntaking traffic conditions into consideration." } ], "mode": "NULLABLE", "name": "travel_duration", "type": "RECORD", "description": "Legacy travel time information. May stop being populated on or after November 9, 2026. Use top-level duration_in_seconds and static_duration_in_seconds instead." }, { "fields": [ { "mode": "NULLABLE", "name": "seconds", "type": "INTEGER", "description": "Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive." }, { "mode": "NULLABLE", "name": "nanos", "type": "INTEGER", "description": "Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive." } ], "mode": "NULLABLE", "name": "retrieval_time", "type": "RECORD", "description": "Legacy timestamp when the traffic data was collected. May stop being populated on or after November 9, 2026. Use retrieval_timestamp instead." }, { "mode": "NULLABLE", "name": "route_geometry", "type": "STRING", "description": "Contains a geojson polyline representing the optimal route determined based on user's input waypoints" }, { "mode": "REPEATED", "name": "road_segment_ids", "type": "STRING", "description": "Road segment place IDs along the route. They follow topological order and are always connected" }, { "fields": [ { "mode": "NULLABLE", "name": "start_offset", "type": "INTEGER", "description": "The distance offset from the start of the route in meters for the start of the interval (inclusive)." }, { "mode": "NULLABLE", "name": "end_offset", "type": "INTEGER", "description": "The distance offset from the start of the route in meters for the end of the interval (exclusive; equals the start_offset of the subsequent interval)." }, { "mode": "NULLABLE", "name": "speed", "type": "STRING", "description": "Describes the categorized current speed of traffic, aligned with the colors in the Google Maps traffic layer. Possible values are: \"NORMAL\" (green): Traffic is flowing smoothly, no slowdown is detected. \"SLOW\" (yellow): Slowdown detected, but no traffic jam formed. \"TRAFFIC_JAM\" (red): Traffic jam detected. \"TRAFFIC_JAM_HEAVY\" (dark red): Heavy traffic jam detected (available as of October 8, 2026)." } ], "mode": "REPEATED", "name": "speed_reading_offsets", "type": "RECORD", "description": "Offset-based speed reading intervals representing traffic density across the route; each interval is demarcated by the distance offset from the start of the route. Omitted when has_road_closure is true." }, { "mode": "NULLABLE", "name": "duration_in_seconds", "type": "FLOAT", "description": "The duration of travel through the route based on current traffic conditions. Omitted when has_road_closure is true." }, { "mode": "NULLABLE", "name": "static_duration_in_seconds", "type": "FLOAT", "description": "The duration of travel through the route without taking traffic conditions into consideration." }, { "mode": "NULLABLE", "name": "retrieval_timestamp", "type": "TIMESTAMP", "description": "The time the traffic data was collected." }, { "mode": "NULLABLE", "name": "has_road_closure", "type": "BOOLEAN", "description": "Whether there is a full road closure on the route. When true, duration_in_seconds and speed_reading_offsets are omitted because the route is impassable. A NULL value indicates that road closure information is undetermined." } ]