Dati stradali in tempo reale

I dati stradali in tempo reale forniscono aggiornamenti attuali sulle condizioni stradali e sugli eventi per i percorsi selezionati, supportando il monitoraggio dinamico e la risposta rapida. Questi dati sono diversi da quelli raccolti periodicamente disponibili in BigQuery e sono adatti a scenari che richiedono informazioni tempestive.

Questi dati vengono trasmessi in streaming continuamente e includono: la durata del viaggio, che indica i tempi di percorrenza su un percorso, e gli intervalli di lettura della velocità, che mostrano la densità dei segmenti stradali.

Per accedere ai dati stradali in tempo reale, il contratto deve includere il pacchetto Operazioni in tempo reale.

Creare una sottoscrizione Pub/Sub cloud

Una volta configurato il progetto per ricevere dati in tempo reale, diventa disponibile un argomento Pub/Sub di Google Cloud dedicato per il progetto. In questo argomento Pub/Sub puoi trovare i dati in tempo reale per tutti i percorsi creati.

Il seguente esempio di codice mostra il formato dell'URL dell'argomento.

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

Per ricevere i messaggi di dati in tempo reale, devi abbonarti all'argomento Pub/Sub che ti è stato fornito. Consulta Abbonarsi a un argomento per una rapida panoramica su come abbonarsi e utilizzare i messaggi da un argomento Pub/Sub di Cloud.

Schema dei messaggi dei dati sul traffico in tempo reale

Ogni messaggio di dati in tempo reale incorpora dati come:

  • Dettagli strada come travel_duration e speed_reading_intervals.
  • Identificatori di percorso come selected_route_id e display_name.

Ogni messaggio viene pubblicato in base al seguente formato Protobuf.

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;
}

Trasmettere i dati del percorso in streaming a BigQuery utilizzando Pub/Sub

Puoi configurare una sottoscrizione Pub/Sub per trasmettere in streaming i dati stradali direttamente in una tabella BigQuery. Ciò consente un'archiviazione robusta dei dati e un'analisi efficace delle informazioni sul percorso fornite. Prima di configurare questo tipo di sottoscrizione, devi creare un set di dati e una tabella adatti nel tuo progetto BigQuery in cui scrivere i dati.

Per istruzioni dettagliate su come creare una sottoscrizione Pub/Sub che scrive in BigQuery, consulta Trasmettere dati in streaming a BigQuery.

Schema della tabella BigQuery

I messaggi pubblicati nell'argomento Pub/Sub, che possono anche essere scritti nella tabella BigQuery, sono conformi al seguente schema. Per garantire la compatibilità, devi utilizzare questo schema quando crei la tabella BigQuery di destinazione.

  {
    "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"
  }