Données routières en temps réel

Les données routières en temps réel fournissent des informations à jour sur les conditions de circulation 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 sont différentes de celles collectées périodiquement et disponibles dans BigQuery. Elles conviennent aux scénarios nécessitant des informations à jour.

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é des tronçons de route.

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 la durée du trajet et les intervalles de lecture de la vitesse

Une fois votre projet configuré pour recevoir des données en temps réel, un sujet Google Cloud Pub/Sub dédié devient disponible pour votre projet. C'est dans ce sujet Pub/Sub que vous trouverez les données en temps réel pour tous les itinéraires que vous avez créés.

L'exemple de code suivant montre le format de l'URL du sujet.

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

Vous devez vous abonner au sujet Pub/Sub qui vous est fourni pour recevoir des messages de données en temps réel. Consultez S'abonner à un sujet pour obtenir un aperçu rapide de la procédure d'abonnement et de consommation de messages à partir d'un sujet Cloud Pub/Sub.

Schéma de la durée du trajet et des intervalles de lecture de la vitesse

Chaque message de données en temps réel intègre des données telles que les suivantes :

  • Informations sur la route , telles que travel_duration et speed_reading_intervals.
  • Identifiants d'itinéraire , tels que selected_route_id et display_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 {
  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;
}

Transférer des données d'itinéraire vers BigQuery à l'aide de Pub/Sub

Vous pouvez configurer un abonnement Pub/Sub pour transférer des données routières directement dans une table BigQuery. Cela permet un stockage robuste des données et une analyse puissante des 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.

Consultez Transférer des données vers BigQuery pour obtenir des instructions détaillées sur la création d'un abonnement Pub/Sub qui écrit dans BigQuery.

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 lorsque vous créez 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."
      },
      {
        "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\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": "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"
  }