Echtzeit-Straßendaten liefern aktuelle Informationen zu Straßenbedingungen und Ereignissen für Ihre ausgewählten Routen und unterstützen so dynamisches Monitoring und schnelle Reaktion. Diese Daten unterscheiden sich von den regelmäßig erhobenen Daten, die in BigQuery verfügbar sind, und eignen sich für Szenarien, in denen zeitnahe Informationen erforderlich sind.
Diese Daten werden kontinuierlich gestreamt und umfassen die Fahrtdauer, die die Reisezeiten auf einer Route angibt, und Geschwindigkeitsmessintervalle, die die Verkehrsdichte entlang der Route zeigen.
Damit Sie auf Echtzeit-Straßendaten zugreifen können, muss das Real-Time Operations-Paket in Ihrem Vertrag enthalten sein.
Pub/Sub-Abo für Reisezeit und Geschwindigkeitsmessintervalle erstellen
Sie erhalten dedizierte Google Cloud Pub/Sub-Themen, über die Sie die Echtzeitdaten für alle Ihre erstellten Routen abonnieren können.
Das folgende Codebeispiel zeigt das Format des Themas mit binärer Codierung:
projects/maps-platform-roads-management/topics/rmi-roadsinformation-PROJECT_NUMBER
Außerdem stellen wir ein weiteres Thema mit JSON-Codierung bereit (mit dem Suffix -json). Sie müssen das Ihnen zur Verfügung gestellte Pub/Sub-Thema abonnieren, um Echtzeit-Datennachrichten zu erhalten. Unter Thema abonnieren finden Sie eine kurze Übersicht dazu, wie Sie Nachrichten aus einem Cloud Pub/Sub-Thema abonnieren und verarbeiten.
Schema für Reisedauer und Intervalle für schnelles Lesen
Jede Echtzeitdatennachricht enthält Daten wie:
- Straßendetails wie
duration_in_seconds,static_duration_in_seconds,speed_reading_offsets(offsetbasierte Intervalle für das Lesen der Geschwindigkeit) undretrieval_timestamp. - Routen-IDs wie
selected_route_idunddisplay_name.
Jede Nachricht wird im folgenden Protobuf-Format veröffentlicht.
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. repeated SpeedReadingOffset speed_reading_offsets = 8; // The duration of travel through the route based on current traffic // conditions. 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; }
Offsetbasierte Intervalle für das schnelle Lesen und Feldmigration
Seit dem 8. Oktober 2026 werden die Intervalle für die Lesegeschwindigkeit im feld speed_reading_offsets auf Grundlage von Offsets angegeben. Jedes Intervall wird durch seinen start_offset (einschließlich) und end_offset (ausschließlich) in Metern ab dem Start der Route abgegrenzt und umfasst die vierte Geschwindigkeitskategorie TRAFFIC_JAM_HEAVY. Weitere Informationen zu Geschwindigkeitskategorien und Intervallformaten findest du unter Intervalle für das Speedreading.
In der folgenden Tabelle wird jedes alte Pub/Sub-Feld (das ab dem 9. November 2026 oder danach nicht mehr ausgefüllt wird) seinem Ersatzfeld zugeordnet:
| Legacy-Feld | Ersatzfeld | Hinweise |
|---|---|---|
speed_reading_intervals |
speed_reading_offsets |
Verwendet Meter-Offsets (start_offset, end_offset) anstelle von Polylinienkoordinaten und fügt die Geschwindigkeitskategorie TRAFFIC_JAM_HEAVY hinzu. |
travel_duration.duration_in_seconds |
duration_in_seconds |
Auf ein float-Feld der obersten Ebene reduziert. |
travel_duration.static_duration_in_seconds |
static_duration_in_seconds |
Auf ein float-Feld der obersten Ebene reduziert. |
retrieval_time |
retrieval_timestamp |
Als RFC 3339-String formatiert, der von BigQuery-Abos automatisch in TIMESTAMP konvertiert wird. |
Routendaten mit Pub/Sub in BigQuery streamen
Sie können ein Pub/Sub-Abo konfigurieren, um Straßendaten direkt in eine BigQuery-Tabelle zu streamen. Das ermöglicht eine robuste Datenspeicherung und leistungsstarke Analysen der bereitgestellten Routeninformationen. Bevor Sie diese Art von Abo einrichten, müssen Sie ein geeignetes Dataset und eine geeignete Tabelle in Ihrem BigQuery-Projekt erstellen, in die die Daten geschrieben werden sollen.
Eine detaillierte Anleitung zum Erstellen eines Pub/Sub-Abos, mit dem Daten in BigQuery geschrieben werden, finden Sie unter Daten in BigQuery streamen.
Erstellen Sie das BigQuery-Abo für das JSON-codierte Thema. Wählen Sie beim Konfigurieren des Abos Tabellenschema verwenden aus und aktivieren Sie Unbekannte Felder löschen, damit Ihre Erfassungspipeline auch dann reibungslos funktioniert, wenn neue Felder hinzugefügt werden. Wenn Sie neue Felder wie speed_reading_offsets speichern möchten, fügen Sie der Tabelle die entsprechenden Spalten hinzu.
Schema der BigQuery-Tabelle
Die Nachrichten, die in Ihrem Pub/Sub-Thema veröffentlicht werden und auch in Ihre BigQuery-Tabelle geschrieben werden können, entsprechen dem folgenden Schema. Sie sollten dieses Schema verwenden, wenn Sie Ihre BigQuery-Zieltabelle erstellen, um die Kompatibilität zu gewährleisten.
[ { "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." }, { "mode": "NULLABLE", "name": "duration_in_seconds", "type": "FLOAT", "description": "The duration of travel through the route based on current traffic conditions." }, { "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." } ]