Data jalan real-time

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 dialirkan secara terus-menerus dan mencakup: durasi perjalanan, yang menunjukkan waktu perjalanan di suatu rute, dan interval pembacaan kecepatan, yang menunjukkan kepadatan segmen jalan.

Untuk mengakses data jalan real-time, kontrak Anda harus menyertakan paket Operasi Real-Time.

Buat langganan Pub/Sub cloud

Setelah project Anda disiapkan untuk menerima data real-time, topik Google Cloud Pub/Sub khusus akan tersedia untuk project Anda. Topik Pub/Sub ini adalah tempat Anda dapat menemukan data real-time untuk semua rute yang Anda buat.

Contoh kode berikut menunjukkan format URL topik.

projects/maps-platform-roads-management/topics/rmi-roadsinformation-PROJECT_NUMBER

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 pesan data lalu lintas real-time

Setiap pesan data real-time menggabungkan data seperti:

  • Detail jalan seperti travel_duration dan speed_reading_intervals.
  • ID rute seperti selected_route_id dan display_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 {
  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;
  }
  // Represents the latitude and longitude of a coordinate
  // within speed reading interval.
  message LatLng {
    float latitude = 1;
    float longitude = 2;
  }
  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": Congestion detected.
    string speed = 2;
  }
  // Id for selected_route.
  string selected_route_id = 1;
  // User provided name for the route.
  string display_name = 2;
  // Intervals representing the road density across the route.
  repeated SpeedReadingInterval speed_reading_intervals = 3;
  // Travel time information.
  TravelDuration travel_duration = 4;
  // The time the road data was collected.
  Timestamp retrieval_time = 5;
  // Contains a geojson polyline representing the optimal route determined based
  // on user's input waypoints.
  string route_geometry = 6;
}

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 pada informasi rute yang diberikan. Sebelum menyiapkan jenis langganan ini, Anda perlu membuat set data dan tabel yang sesuai di project BigQuery untuk menulis data.

Lihat Streaming data ke BigQuery untuk mengetahui petunjuk mendetail tentang cara membuat langganan Pub/Sub yang menulis ke BigQuery.

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."
      },
      {
        "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": "Intervals representing the traffic density across the route."
  },
  {
    "fields": [
      {
        "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": "travel_duration",
    "type": "RECORD",
    "description": "Travel time information."
  },
  {
    "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": "The time the traffic data was collected."
  },
  {
    "mode": "NULLABLE",
    "name": "route_geometry",
    "type": "STRING",
    "description": "Contains a geojson polyline representing the optimal route determined based on user's input waypoints"
  }