داده‌های هم‌زمان جاده

داده‌های جاده‌ای هم‌زمان به‌روزرسانی‌های فعلی درباره وضعیت جاده و رویدادهای مسیرهای انتخابی شما ارائه می‌دهد و از پایش پویا و پاسخ سریع پشتیبانی می‌کند. این داده‌ها با داده‌های جمع‌آوری‌شده دوره‌ای که در BigQuery دردسترس است متفاوت است و برای سناریوهایی که به اطلاعات به‌موقع نیاز دارند مناسب است.

این داده‌ها به‌طور پیوسته جاری‌سازی می‌شود و شامل مدت سفر می‌شود که نشان‌دهنده زمان سفر در یک مسیر است، و فاصله‌های سرعت‌خوانی، که تراکم ترافیک درطول مسیر را نشان می‌دهد.

برای دسترسی به داده‌های جاده‌ای هم‌زمان، قرارداد شما باید شامل بسته «عملیات هم‌زمان» باشد.

ایجاد اشتراک Pub/Sub برای «سرعت و فواصل خواندن مدت سفر»

موضوعات اختصاصی Google Cloud Pub/Sub دراختیارتان قرار خواهد گرفت که در آن می‌توانید برای داده‌های بی‌درنگ همه مسیرهای ایجادشده‌تان مشترک شوید.

نمونه کد زیر قالب موضوع را بااستفاده از کدبندی باینری نشان می‌دهد:

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

همچنین موضوع دیگری را بااستفاده از کدبندی JSON ارائه می‌دهیم (با پسوند -json). برای دریافت پیام‌های داده بی‌درنگ، باید در موضوع Pub/Sub که به شما ارائه شده است مشترک شوید. برای آشنایی سریع با نحوه مشترک شدن و مصرف پیام‌ها از موضوع Cloud Pub/Sub، به مشترک شدن در موضوع مراجعه کنید.

طرحواره «مدت سفر و فاصله‌های تندخوانی»

هر پیام داده‌های هم‌زمان شامل داده‌هایی ازجمله موارد زیر است:

  • جزئیات جاده مثل duration_in_seconds، static_duration_in_seconds، speed_reading_offsets (فاصله‌های خواندن سرعت براساس انحراف)، و retrieval_timestamp.
  • شناسه‌های مسیر مانند 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 {
  // 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;
}

فاصله‌های خواندن سریع براساس جبران و انتقال فیلد

از تاریخ ۸ اکتبر ۲۰۲۶، فاصله‌های سرعت خواندن در فیلد مبتنی بر جبران انحراف speed_reading_offsets ارائه می‌شود، که در آن هر فاصله با start_offset (شامل) و end_offset (غیرشامل) در متر از ابتدای مسیر مشخص می‌شود و شامل چهارمین دسته سرعت TRAFFIC_JAM_HEAVY می‌شود. برای جزئیات مربوط به دسته‌های سرعت و قالب‌های بازه، به بازه خواندن سریع مراجعه کنید.

جدول زیر هر فیلد قدیمی Pub/Sub (که ممکن است در تاریخ ۹ نوامبر ۲۰۲۶ یا بعداز آن دیگر پر نشود) را به جایگزین آن نگاشت می‌کند:

فیلد قدیمی فیلد جایگزین یادداشت‌ها
speed_reading_intervals speed_reading_offsets به‌جای مختصات چندخطی از انحراف‌های کنتور (start_offset،‏ end_offset) استفاده می‌کند و دسته سرعت TRAFFIC_JAM_HEAVY را اضافه می‌کند.
travel_duration.duration_in_seconds duration_in_seconds به فیلد float سطح بالا مسطح شد.
travel_duration.static_duration_in_seconds static_duration_in_seconds به فیلد float سطح بالا مسطح شد.
retrieval_time retrieval_timestamp به‌صورت رشته RFC 3339 قالب‌بندی شده است که اشتراک‌های BigQuery به‌طور خودکار آن را به TIMESTAMP تبدیل می‌کنند.

جاری‌سازی داده‌های مسیر به BigQuery بااستفاده از Pub/Sub

می‌توانید اشتراک Pub/Sub را پیکربندی کنید تا داده‌های جاده‌ای را مستقیماً در جدول BigQuery جاری‌سازی کند. این کار امکان ذخیره‌سازی داده‌های قوی را فراهم می‌کند و تجزیه‌وتحلیل‌های قدرتمندی را روی اطلاعات مسیر ارائه‌شده فعال می‌کند. قبل‌از راه‌اندازی این نوع اشتراک، باید مجموعه داده و جدول مناسبی در پروژه BigQuery خود ایجاد کنید تا داده‌ها را در آن بنویسید.

برای دستورالعمل‌های دقیق درباره نحوه ایجاد اشتراک Pub/Sub که در BigQuery می‌نویسد، به جاری‌سازی داده‌ها به BigQuery مراجعه کنید. اشتراک BigQuery را در موضوع کدبندی‌شده با JSON ایجاد کنید. هنگام پیکربندی اشتراک، استفاده از طرحواره جدول را انتخاب کنید و حذف فیلدهای ناشناخته را فعال کنید تا خط لوله انتقال داده شما هنگام اضافه شدن فیلدهای جدید به‌طور روان به کار خود ادامه دهد. برای ذخیره کردن فیلدهای جدید، مثل speed_reading_offsets، ستون‌های مربوطه را به جدولتان اضافه کنید.

طرح جدول 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 (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."
  }
]