بيانات الطرق في الوقت الفعلي

توفّر بيانات الطرق في الوقت الفعلي آخر المعلومات عن حالة الطرق والأحداث على الطرق المحدّدة، ما يتيح المراقبة الديناميكية والاستجابة السريعة. تختلف هذه البيانات عن البيانات التي يتم جمعها بشكل دوري والمتاحة في BigQuery، وهي مناسبة للحالات التي تتطلّب معلومات في الوقت المناسب.

يتم بث هذه البيانات بشكل مستمر وتشمل: مدة الرحلة، التي تشير إلى أوقات السفر على أحد المسارات، وفواصل قراءة السرعة، التي تعرض كثافة مقطع الطريق.

للوصول إلى بيانات الطرق في الوقت الفعلي، يجب أن تتضمّن عقدك حزمة Real-Time Operations.

إنشاء اشتراك في Cloud Pub/Sub

بعد إعداد مشروعك لتلقّي البيانات في الوقت الفعلي، سيتوفّر موضوع مخصّص على Google Cloud Pub/Sub لمشروعك. هذا الموضوع على Pub/Sub هو المكان الذي يمكنك فيه العثور على البيانات في الوقت الفعلي لجميع المسارات التي أنشأتها.

يوضّح نموذج الرمز التالي تنسيق عنوان URL الخاص بالموضوع.

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

يجب الاشتراك في موضوع Pub/Sub المقدَّم إليك لتلقّي رسائل البيانات في الوقت الفعلي. راجِع مقالة الاشتراك في موضوع للحصول على نظرة عامة سريعة حول كيفية الاشتراك في موضوع Cloud Pub/Sub واستهلاك الرسائل منه.

مخطّط رسالة بيانات حركة المرور في الوقت الفعلي

تتضمّن كل رسالة بيانات في الوقت الفعلي بيانات مثل:

  • تفاصيل الطريق، مثل travel_duration وspeed_reading_intervals
  • معرّفات المسارات، مثل selected_route_id وdisplay_name

يتم نشر كل رسالة وفقًا لتنسيق 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;
}

نقل بيانات المسار إلى BigQuery باستخدام Pub/Sub

يمكنك إعداد اشتراك في Pub/Sub لبث بيانات الطرق مباشرةً إلى جدول في BigQuery. ويتيح ذلك تخزين البيانات بشكل قوي وإجراء تحليلات فعّالة على معلومات المسار المقدَّمة. قبل إعداد هذا النوع من الاشتراكات، عليك إنشاء مجموعة بيانات وجدول مناسبَين في مشروعك على BigQuery لكتابة البيانات فيهما.

اطّلِع على مقالة نقل البيانات المتدفقة إلى BigQuery للحصول على تعليمات تفصيلية حول كيفية إنشاء اشتراك في Pub/Sub يكتب إلى BigQuery.

مخطط جدول BigQuery

تتّبع الرسائل المنشورة في موضوع Pub/Sub، والتي يمكن أيضًا كتابتها في جدول BigQuery، المخطّط التالي. يجب استخدام هذا المخطّط عند إنشاء جدول BigQuery المستهدَف لضمان التوافق.

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