Hiện thực việc lấy dữ liệu về tình trạng giao thông

Một phần của tài liệu Xây dựng hệ thống cảnh báo tình trạng giao thông trên nền tảng web (Trang 112 - 118)

8 Cập nhật hệ thống

8.3.3Hiện thực việc lấy dữ liệu về tình trạng giao thông

Sau khi đã chọn được vị trí mà mình muốn lấy dữ liệu về tình trạng giao thông trên bản đồ ở phần trước, đến đây người dùng sẽ lựa chọn thêm khoảng thời gian để thực hiện việc lấy dữ liệu như hình 8.19.

Hình 8.19: Ảnh minh họa chọn khoảng thời gian để lấy dữ liệu giao thôngTất cả dữ liệu mà người dùng đã cung cấp bao gồm dữ liệu tọa độ địa lý Tất cả dữ liệu mà người dùng đã cung cấp bao gồm dữ liệu tọa độ địa lý <latitude, longitude> của các vị trí đã chọn trên bản đồ và khoảng thời gian đã chọn sẽ được ứng dụng web thu thập sau đó gửi về server thông qua API để thực hiện việc lấy dữ liệu về tình trạng giao thông. API này có định dạng như sau:

• METHOD: POST

• ENDPOINT: https://api.bktraffic.com/api/get-public-data

• AUTHENTICATION: Không

• BODY: JSON Object chứa các trường được xem là dữ liệu dùng để cập nhật

tình trạng giao thông:

– type (rectangle|circle|line): Mô tả request của người dùng đang yêu cầu lấy dữ liệu tình trạng giao thông theo khu vực hình chữ nhật, khu vực hình tròn hay là đoạn một đoạn đường.

– coordinates (Array): Tập hợp các cặp tọa độ <lat,lng> của các điểm để xác định vị trí cập nhật tình trạng giao thông. Đối với trường hợp vị trí cập nhật là hình chữ nhật thì trường này bao gồm tọa độ 2 điểm thuộc 1 đường chéo bất kì của hình chữ nhật, trong trường hợp vị trí cập nhật là hình tròn thì trường này bao gồm tọa độ của tâm hình tròn, cuối cùng trong trường hợp vị trí cập nhật là đoạn đường thì trường này bao gồm tọa độ của 2 điểm đầu cuối thuộc đoạn đường đó.

– radius (Number): Bán kính khu vực cập nhật dữ liệu, chỉ áp dụng cho trường hợp khu vực chọn là hình tròn. Giá trị chấp nhận từ 100m đến 2000m.

– start_time (Date): Thời gian bắt đầu việc lấy dữ liệu.

– end_time (Date): Thời gian kết thúc việc lấy dữ liệu.

• RESPONSE: JSON Object chứa thông tin về tình trạng giao thông tại khoảng

thời gian đã chọn

Chi tiết quá trình lấy dữ liệu về tình trạng giao thông sau khi tiếp nhận request từ phía người dùng được chúng tôi thực hiện qua các bước sau:

1. Xác định tất cả cácsegment từ collection Segmentsđược lưu trữ trong cơ sở

dữ liệu cần lấy tình trạng giao thông. Với từng trường type khác nhau được

gửi đến thì cách truy xuất tập các segment sẽ khác nhau. Việc này được thực

hiện giống như phần lấy tập các segment để admin cập nhập tình trạng giao

thông được trình bày ở phần 8.2.3.

2. Sau khi đã có được danh sách cácsegment cần để lấy dữ liệu ở bước đầu tiên,

ở bước này chúng tôi sẽ duyệt qua tất cả các segment này và dựa vào trường

segment_id để tiếp tục truy vấn vào collection TrafficStatusđể lấy dữ liệu

về tình trạng giao thông tương ứng với các segment. Dựa vào các khoảng thời

gian mà người dùng đã cung cấp start_time và end_time, việc truy vấn

dữ liệu giao thông được thực hiện mỗi 15 phút một lần kể từ thời điểm bắt đầu. Dữ liệu về tình giao thông được hệ thống được thu thập từ nhiều nguồn,

trong trường hợp tại một thời điểm một segment có dữ liệu từ nhiều nguồn

thì chúng tôi sẽ gửi đến người dùng theo thứ tự ưu tiên như đã được liệt kê ở bảng 5.1. Đặc biệt, trong trường hợp dữ liệu về tình trạng giao thông tại thời

điểm đang xét của segment không có trong collection TrafficStatus thì sẽ

được lấy từ bộ dữ liệu nền tức là truy xuất từ collection BasicTrafficStatus. Kết quả được server phản hồi về cho người dùng mặc định sẽ có định dạng là

JSON Object chứa thông tin dưới dạng mảng dữ liệu như ở hình 8.20. Dữ liệu về

tình trạng giao thông này có thể mô tả với các trường sau:

• segmentId (Number) : ID của segment

• polyline (Object): Thông thông mô tả vị trí địa lý của segment. Giá trị

coordinates là tọa độ địa lý <longitude, latitude> của segment, _id là ID của thực thực địa lý đang xét đến, type mặc định có giá trị là "LineString"

mô tả segment này có dạng đường thẳng.

• source (String): Thông tin về nguồn dữ liệu.

• velocity(Number): Tốc độ lưu thông (đơn vị km/h) của dòng xe trênsegment hiện tại.

• los (String): Mức độ phục vụ giao thông của segment hiện tại.

• time (Date/Time): Thời điểm chính xác mà dữ liệu giao thông của segment

được truy xuất.

• street (Object): Thông tin về tuyến đường mà segment đang xét thuộc về

Hình 8.20: Dữ liệu về tình trạng giao thông dưới định dạng JSON

Ngoài hiển thị dữ liệu dưới dạng mặc định là JSON, ứng dụng web cũng cung

cấp dữ liệu dưới các định khác như XML như ở hình8.21, file CSV và XLSX như ở

hình8.23. Chúng tôi đã sử dụng thư việnjs2xmlparser [70] để chuyển đổi dữ liệu

với định dạng JSON sang định dạng XML và thư việnjson2csv [71] để chuyển đổi

dữ liệu với định dạng JSON sang định dạng file CSV và XLSX. Cả hai thư viện kể trên đều hỗ trợ tốt và được sử dụng trong các ứng dụng web. Bên cạnh đó, để hỗ trợ người dùng có thể dễ dàng khai thác dữ liệu giao thông trên ứng dụng web, đối với dữ liệu ở định dạng JSON và XML chúng tôi cấp cơ chế cho phép người dùng có thể dễ dàng copy các dữ liệu này bằng nút "COPY DATA" ở hình 8.20

và hình 8.21, còn đối với dữ liệu ở định dạng file CSV và XLSX thì chúng tôi cấp cơ chế cho phép người dùng có thể dễ dàng tải các file này như ở hình 8.22.

Hình 8.21: Dữ liệu về tình trạng giao thông dưới định dạng XML

Một phần của tài liệu Xây dựng hệ thống cảnh báo tình trạng giao thông trên nền tảng web (Trang 112 - 118)