ข้อมูลถนนแบบเรียลไทม์

ข้อมูลถนนแบบเรียลไทม์จะให้ข้อมูลอัปเดตล่าสุดเกี่ยวกับสภาพท้องถนนและเหตุการณ์ต่างๆ สำหรับ เส้นทางที่คุณเลือก ซึ่งรองรับการตรวจสอบแบบไดนามิกและการตอบสนองอย่างรวดเร็ว ข้อมูลนี้แตกต่างจากข้อมูลที่รวบรวมเป็นระยะๆ ซึ่งมีอยู่ใน BigQuery และเหมาะสำหรับสถานการณ์ที่ต้องการข้อมูลที่ทันท่วงที

ข้อมูลนี้จะสตรีมอย่างต่อเนื่องและประกอบด้วยระยะเวลาการเดินทาง ซึ่งบ่งบอกถึงเวลาเดินทางในเส้นทาง และช่วงเวลาการอ่านความเร็ว ซึ่งแสดงความหนาแน่นของส่วนถนน

หากต้องการเข้าถึงข้อมูลถนนแบบเรียลไทม์ สัญญาของคุณต้องมีแพ็กเกจการปฏิบัติงานแบบเรียลไทม์

สร้างการสมัครใช้บริการ Cloud Pub/Sub

เมื่อตั้งค่าโปรเจ็กต์ให้รับข้อมูลแบบเรียลไทม์แล้ว หัวข้อ Pub/Sub ของ Google Cloud ที่เจาะจงจะพร้อมใช้งานสำหรับโปรเจ็กต์ หัวข้อ 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 เพื่อเขียนข้อมูล

ดูวิธีการโดยละเอียดเกี่ยวกับวิธีสร้างการสมัครใช้บริการ Pub/Sub ที่เขียนไปยัง BigQuery ได้ที่การสตรีมข้อมูลไปยัง 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"
  }