Data jalan real-time memberikan info terbaru tentang kondisi dan peristiwa jalan untuk rute yang Anda pilih, sehingga mendukung pemantauan dinamis dan respons cepat. Data ini berbeda dengan data yang dikumpulkan secara berkala yang tersedia di BigQuery, dan cocok untuk skenario yang memerlukan informasi tepat waktu.
Data ini di-streaming secara terus-menerus dan mencakup durasi perjalanan, yang menunjukkan waktu perjalanan di suatu rute, dan interval pembacaan kecepatan, yang menunjukkan kepadatan lalu lintas di sepanjang rute.
Untuk mengakses data jalan real-time, kontrak Anda harus mencakup paket Operasi Real-Time.
Membuat langganan Pub/Sub Interval Kecepatan dan Durasi Perjalanan
Topik Google Cloud Pub/Sub khusus akan diberikan kepada Anda, dan di sana Anda dapat berlangganan data real-time untuk semua rute yang Anda buat.
Contoh kode berikut menunjukkan format topik menggunakan encoding biner:
projects/maps-platform-roads-management/topics/rmi-roadsinformation-PROJECT_NUMBER
Kami juga menyediakan topik lain menggunakan encoding JSON (dengan akhiran -json). Anda harus berlangganan topik Pub/Sub yang diberikan kepada Anda untuk menerima pesan data real-time. Lihat Berlangganan topik untuk mengetahui ringkasan singkat tentang cara berlangganan dan menggunakan pesan dari topik Cloud Pub/Sub.
Skema Interval Membaca Cepat dan Durasi Perjalanan
Setiap pesan data real-time menggabungkan data seperti:
- Detail jalan seperti
duration_in_seconds,static_duration_in_seconds,speed_reading_offsets(interval pembacaan kecepatan berbasis offset), danretrieval_timestamp. - ID rute seperti
selected_route_iddandisplay_name.
Setiap pesan dipublikasikan dengan mematuhi format Protobuf berikut.
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; }
Interval membaca cepat berbasis offset dan migrasi kolom
Mulai 8 Oktober 2026, interval membaca cepat disediakan di kolom
speed_reading_offsets berbasis offset, dengan setiap interval dibatasi oleh
start_offset (inklusif) dan end_offset (eksklusif) dalam meter dari awal
rute, dan mencakup kategori kecepatan keempat TRAFFIC_JAM_HEAVY. Untuk
detail tentang kategori kecepatan dan format interval, lihat
Interval membaca cepat.
Tabel berikut memetakan setiap kolom Pub/Sub lama (yang mungkin berhenti diisi pada atau setelah 9 November 2026) ke penggantinya:
| Kolom lama | Kolom pengganti | Catatan |
|---|---|---|
speed_reading_intervals |
speed_reading_offsets |
Menggunakan offset meter (start_offset, end_offset) alih-alih koordinat polyline dan menambahkan kategori kecepatan TRAFFIC_JAM_HEAVY. |
travel_duration.duration_in_seconds |
duration_in_seconds |
Diratakan ke kolom float tingkat teratas. |
travel_duration.static_duration_in_seconds |
static_duration_in_seconds |
Diratakan ke kolom float tingkat teratas. |
retrieval_time |
retrieval_timestamp |
Diformat sebagai string RFC 3339, yang secara otomatis dikonversi oleh langganan BigQuery menjadi TIMESTAMP. |
Mengalirkan Data Rute ke BigQuery menggunakan Pub/Sub
Anda dapat mengonfigurasi langganan Pub/Sub untuk melakukan streaming data jalan langsung ke tabel BigQuery. Hal ini memungkinkan penyimpanan data yang andal dan memungkinkan analisis yang canggih terhadap informasi rute yang diberikan. Sebelum menyiapkan jenis langganan ini, Anda perlu membuat set data dan tabel yang sesuai di project BigQuery untuk menulis data.
Untuk mengetahui petunjuk mendetail tentang cara membuat langganan Pub/Sub yang menulis
ke BigQuery, lihat
Streaming data ke BigQuery.
Buat langganan BigQuery di topik yang dienkode JSON. Saat mengonfigurasi
langganan, pilih Gunakan skema tabel dan aktifkan Hapus kolom
yang tidak diketahui agar pipeline penyerapan Anda terus berjalan lancar saat kolom
baru ditambahkan. Untuk menyimpan kolom baru, seperti speed_reading_offsets, tambahkan kolom yang sesuai ke tabel Anda.
Skema tabel BigQuery
Pesan yang dipublikasikan ke topik Pub/Sub Anda, yang juga dapat ditulis ke tabel BigQuery Anda, sesuai dengan skema berikut. Anda harus menggunakan skema ini saat membuat tabel BigQuery target untuk memastikan kompatibilitas.
[ { "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." } ]