0
Tải bản đầy đủ (.pdf) (77 trang)

Chức năng hệ thống

Một phần của tài liệu MÔ HÌNH VÀ TRỰC QUAN HÓA DỮ LIỆU TRẠNG THÁI GIAO THÔNG TRÊN NỀN WEB (Trang 62 -62 )

Các thành phần trong ứng dụng phát triển theo Mô hình trực quan hóa dữ liệu trạng thái giao thông trình bày tại mục 2.2. Theo phân tích khả năng đáp ứng của các công cụ lập trình tại mục 2.3, đề xuất sử dụng các công cụ bao gồm: Leaflet để trình bày dữ liệu bản đồ, Heatmap để biểu diễn trực quan trạng thái dữ liệu các tuyến đường và D3 để xây dựng đồ thị biểu diễn trực quan dữ liệu trạng thái giao thông tổng hợp theo thời gian. Sơ đồ áp dụng mô hình để phát triển ứng dụng như hình 3.2. Trang web Ứng dụng thử nghiệm D3 Leaflet, Heatmap Leaflet

Biểu diễn trực quan dữ liệu trạng thái giao thông tổng hợp

Biểu diễn trực quan trạng thái giao thông các tuyến đường cụ thể

Bản đồ nền Hiển thị JavaScript Y- A xi s X-Axis

Các chức năng hệ thống được mô tả cụ thể dưới đây:

- Nhóm chức năng hiển thị, thao tác bản đồ nền: Nhóm các chức năng này cho phép hiển thị bản đồ nền dạng tile và các thao tác cơ bản như phóng to, thu nhỏ, dịch chuyển bản đồ bằng chuột và nút điều khiển.

- Chức năng hiển thị trực quan dữ liệu trạng thái giao thông trên các tuyến đường: Chức năng này kết hợp dữ liệu địa lý và dữ liệu trạng thái giao thông tại một thời điểm để tạo ra một lớp bản đồ dạng heatmap trên nền bản đồ số. Các điểm heatmap nằm dọc theo đoạn đường có giá trị trạng thái giao thông được lấy từ cơ sở dữ liệu. Mật độ các điểm càng lớn càng thể hiện trạng thái giao thông đông đúc. Đồng thời với đó, dùng màu sắc và bán kính điểm hiển thị để thể hiện trạng thái giao thông. Điểm màu đỏ thể hiện mật độ đông hơn so với điểm có màu xanh. Điểm có trạng thái giao thông lớn sẽ có bán kính lớn hơn.

- Chức năng hiển trực quan dữ liệu trạng thái giao thông tổng hợp: Tại mỗi thời điểm xác định trạng thái giao thông tổng hợp của các tuyến phố khảo sát bằng giá trị trung bình của trạng thái giao thông từng tuyến. Biểu đồ sẽ thể hiện giá trị tổng hợp của trạng thái giao thông này theo thời gian. Dữ liệu qua các ngày được tổng hợp để xây dựng biểu đồ. Do thời gian có thể kéo dài nên biểu đồ này có 1 biểu đồ phụ ở phía dưới để người dùng có thể phóng tới thời điểm cần quan tâm để xem chi tiết. Chức năng này có lựa chọn xem biểu đồ tổng hợp trạng thái giao thông theo từng thời điểm lấy dữ liệu hoặc xem biểu đồ tổng hợp trạng thái giao thông của cả ngày, tuần, tháng.

- Tiện ích khi chọn vào thời điểm thể hiện trạng thái giao thông tổng hợp trên biểu đồ thì bản đồ hiển thị trạng thái giao thông tại từng tuyến phố tại thời điểm đó.

- Chức năng lựa chọn thời gian để xem trực quan dữ liệu trạng thái giao thông cho phép người dùng chọn thời gian quan tâm để xem.

- Chức năng phóng ở biểu đồ để xem các biểu đồ trạng thái giao thông tổng hợp ở các mức khác nhau: Biểu đồ thể hiện trạng thái giao thông trung bình theo thời điểm lấy mẫu, theo ngày, theo tuần, theo tháng.

- Chức năng cập nhật dữ liệu theo thời gian thực. Hệ thống sẽ tự động cập nhật dữ liệu để hiển thị trạng thái giao thông mới nhất có trong cơ sở dữ liệu.

3.2.3. Lƣợc đồ cơ sở dữ liệu

Dữ liệu sau khi được chuẩn hóa, đưa vào cơ sở dữ liệu phục vụ trực quan hóa gồm có 02 bảng được lưu trữ trong cơ sở dữ liệu PostgreSQL/PostGIS lưu thông tin và tình trạng giao thông của các tuyến đường, và 03 bảng lưu thông tin tình trạng giao thông tổng hợp theo ngày, tuần, tháng. Lược đồ cơ sở dữ liệu của hệ thống như hình 3.3.

tb_traffic PK ID bigint FK1 road_id int status int time datetime duration int description ntext tb_day_statistics PK ID bigint day date status real tb_week_statistics PK ID bigint week date status real tb_month_statistics PK ID bigint month date status real tb_street PK ID bigint name ntext direction real description ntext geom geometry Hình 3.3: Lược đồ cơ sở dữ liệu

Mô tả cụ thể các bảng dữ liệu trong lược đồ cơ sở dữ liệu:

Bảng Thông tin trạng thái giao thông

Mã bảng: tb_traffic

Kiểu dữ liệu: Bảng dữ liệu

Mô tả: Bảng dữ liệu tb_traffic thể hiện thông tin trạng thái giao thông tại các tuyến đường xác định trong các thời điểm cụ thể.

Các trường dữ liệu trong bảng tb_traffic:

STT Mã trường Kiểu dữ liệu Tên trường Mô tả

1 ID bigint Mã Khóa chính của bảng dữ

liệu.

2 road_id int Mã tuyến đường Mã tuyến đường khảo sát.

3 status int Trạng thái Dạng số trong khoảng từ 0-5 lưu giá trị tình trạng giao thông của tuyến đường. Giá trị lớn ứng với tình trạng đường tắc nghẽn. Các mức cụ thể gồm: 0: Thông thoáng 1: Dễ đi 2: Hơi đông

3: Đông đúc 4: Tắc

5: Tắc nghẽn

4 time datetime Thời gian Thời điểm có dữ liệu đánh giá tình trạng giao thông.

5 duration int Khoảng thời gian

Khoảng thời gian duy trì tình trạng giao thông tính bằng phút.

6 description ntext Mô tả Mô tả thêm về thông tin trạng thái giao thông.

Bảng Thông tin tuyến đường giao thông

Mã bảng: tb_street

Kiểu dữ liệu: Bảng dữ liệu

Mô tả: Bảng dữ liệu tb_ street thể hiện thông tin của các tuyến đường xác định.

Các trường dữ liệu trong bảng tb_ street:

STT Mã trường Kiểu dữ liệu Tên trường Mô tả

1 ID bigint Mã Khóa chính của bảng dữ

liệu. Là mã tuyến đường khảo sát.

2 name ntext Tên tuyến

đường

Tên tuyến đường khảo sát.

3 direction real Hướng di chuyển

Hướng di chuyển của tuyến đường khảo sát. Giá trị :

0: Không phân chiều 1: Chiều thuận kim đồng hồ

-1: Chiều ngược kim đồng hồ

4 description ntext Mô tả Mô tả thêm về thông tin tuyến đường giao thông. 5 geom geometry Thông tin địa

Dữ liệu địa lý của tuyến đường.

Bảng Thống kê trạng thái giao thông theo ngày

Mã bảng: tb_day_statistics Kiểu dữ liệu: Bảng dữ liệu

Mô tả: Bảng dữ liệu tb_day_statistics thống kê trạng thái giao thông tổng hợp theo ngày. Dữ liệu của bảng này dữ liệu tổng hợp trung bình trạng thái giao thông của cả hệ thống theo ngày.

Các trường dữ liệu trong bảng tb_day_statistics:

STT Mã trường Kiểu dữ liệu Tên trường Mô tả

1 ID bigint Mã Khóa chính của bảng dữ

liệu.

2 day date Ngày thống kê Ngày thống kê dữ liệu trạng thái giao thông trung bình.

3 status real Trạng thái giao thông

Giá trị trạng thái giao thông trung bình ngày.

Bảng Thống kê trạng thái giao thông theo tuần

Mã bảng: tb_week_statistics Kiểu dữ liệu: Bảng dữ liệu

Mô tả: Bảng dữ liệu tb_week_statistics thống kê trạng thái giao thông tổng hợp theo tuần. Dữ liệu của bảng này dữ liệu tổng hợp trung bình trạng thái giao thông của cả hệ thống theo tuần.

Các trường dữ liệu trong bảng tb_week_statistics:

STT Mã trường Kiểu dữ liệu Tên trường Mô tả

1 ID bigint Mã Khóa chính của bảng dữ

liệu.

2 week date Tuần thống kê Ngày đại diện (đầu tiên) của tuần thống kê dữ liệu trạng thái giao thông trung bình.

3 status real Trạng thái giao thông

Giá trị trạng thái giao thông trung bình tuần.

Bảng Thống kê trạng thái giao thông theo tháng

Mã bảng: tb_month_statistics Kiểu dữ liệu: Bảng dữ liệu

Mô tả: Bảng dữ liệu tb_ month _statistics thống kê trạng thái giao thông tổng hợp theo tháng. Dữ liệu của bảng này dữ liệu tổng hợp trung bình trạng thái giao thông của cả hệ thống theo tháng.

Các trường dữ liệu trong bảng tb_ month _statistics:

STT Mã trường Kiểu dữ liệu Tên trường Mô tả

1 ID bigint Mã Khóa chính của bảng dữ

liệu.

2 week date Tháng thống kê Ngày đại diện (đầu tiên) của tháng thống kê dữ liệu trạng thái giao thông trung bình.

3 status real Trạng thái giao thông

Giá trị trạng thái giao thông trung bình tháng.

3.3. Xây dựng ứng dụng và thử nghiệm

3.3.1. Môi trƣờng ứng dụng

- Thiết lập môi trường phát triển PHP với các thư viện javascript đã giới thiệu: D3.js, Heatmap.js, Leaflet.js, leaflet-heatmap.js.

- Máy chủ web: apache

- Hệ quản trị cơ sở dữ liệu: PostgreSQL/PostGIS - Máy chủ quản lý bản đồ: MapServer

3.3.2. Dữ liệu thử nghiệm

Dữ liệu được tạo để phục vụ thử nghiệm hệ thống trong khoảng thời gian từ 01/06/2014 đến 01/7/2015 theo lược đồ cơ sở dữ liệu:

Dữ liệu về đường giao thông: 5 đoạn đường gồm:

- Ngã ba Phạm Văn Đồng - Trần Quốc Hoàn (Hướng đi cầu Thăng Long) - Ngã ba Phạm Văn Đồng - Hoàng Quốc Việt (Hướng đi cầu Thăng Long) - Ngã ba Phạm Văn Đồng - Hoàng Quốc Việt (Hướng đi Phạm Hùng) - Ngã tư Khuất Duy Tiến - Nguyễn Trãi (Hướng đi Nguyễn Xiển) - Ngã tư Nguyễn Trãi - Nguyễn Xiển (Hướng đi Ngã Tư Sở)

Dữ liệu về trạng thái giao thông:

Dữ liệu được sinh ngẫu nhiên cho toàn bộ 5 đoạn đường trong khoảng thời gian từ 01/06/2014 đến 01/7/2015, thời điểm lấy dữ liệu trạng thái giao thông 15 phút/lần. Tổng số 198.890 bản ghi dữ liệu.

Theo yêu cầu, dữ liệu này sẽ được tính toán và cập nhật tự động cơ sở dữ liệu vào cuối ngày, tuần, tháng.

Dưới đây là FUNCTION tính dữ liệu trạng thái giao thông trung bình trong ngày (tính toán cho tuần, tháng được làm tương tự) được cài đặt trong PostgreSQL:

CREATE FUNCTION f_lv_tbngay(IN fromdate date, IN todate date) RETURNS SETOF f_lv_tbngay AS

$BODY$ DECLARE r somefun_type; query text := ''; var_match somefun_type; BEGIN

query := 'SELECT b.dt::date as dt, 1.25 FROM tb_traffic b where b.dt>='''||cast(fromdate as date)||''' and b.dt<='''||cast(todate as date)||''' and b.idroad = 1 group by b.dt::date order by b.dt::date asc';

FOR r IN EXECUTE(query) LOOP

query:='select '''||r.ngay||''', AVG(a.state) as tb from tb_traffic a where a.dt::date = '''||r.ngay||''' ';

FOR var_match IN EXECUTE(query) LOOP

RETURN NEXT var_match;

END LOOP; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000;

ALTER FUNCTION f_lv_tbngay(date, date) OWNER TO postgres;

Dữ liệu thử nghiệm của các bảng này trong cơ sở dữ liệu gồm: Bảng tb_day_statistics có 424 bản ghi, Bảng tb_day_statistics có 14 bản ghi, Bảng tb_day_statistics có 61 bản ghi.

3.3.3. Các vấn đề và giải pháp trong quá trình triển khai

3.3.3.1. Sử dụng heatmap thể hiện trạng thái giao thông trên tuyến đường

Để tạo heatmap trên một tuyến đường, ta căn cứ vào tọa độ của tập các điểm cơ sở của tuyến đường. Một tuyến đường bao gồm nhiều đoạn thẳng nối tiếp nhau, tập các điểm đầu và điểm cuối các đoạn đó là tập điểm cơ sở của tuyến đường. Sau đó, tùy vào giá trị tình trạng đường giao thông, ta sẽ bổ sung các điểm phù hợp vào giữa các điểm đã có để tăng mật độ điểm tạo thành tập điểm biểu diễn (như hình 3.4) và hiển thị màu sắc của tập điểm biểu diễn này theo giá trị tình trạng giao thông tương ứng.

Hình 3.4 Tập các điểm biểu diễn trên tuyến đường

Thuật toán xây dựng tập biểu diễn cuả tuyến đƣờng:

- B1: Xác định tập điểm cơ sở của tuyến đường là T1 được sắp theo thứ tự từ điểm đầu đến điểm cuối trên tuyến đường.

- B2: Đặt tập điểm biểu diễn T2 = T1. - B3: Duyệt từ đầu đến hết tập T2:

Xác định khoảng cách l giữa 2 điểm kế tiếp trong T2:

 Nếu l < r thì tiếp tục chuyển sang cặp điểm tiếp theo trong T2

 Nếu l ≥ r thì: Bổ sung 1 điểm ở giữa 2 điểm đang xét vào trong tập T2 và quay lại thực hiện B3.

Trong đó: r là khoảng cách được xác định theo các trạng thái giao thông.

Kết quả cuối cùng của thuật toán tạo ra các điểm cách đều nhau có khoảng cách nhỏ hơn r trên một đoạn đường như hình 3.4.

3.3.3.2. Kết hợp Leaflet và Heatmap

Để vẽ điểm heatmap trên bản đồ nền được xây dựng bằng leaftet, ta phải có sự kết hơp giữa Leaflet và Heatmap. Giải pháp được đưa ra là sử dụng thư viện leaflet-heatmap.js.

3.3.3.3. Thao tác với dữ liệu dạng GeoJSON

GeoJSON là một định dạng mã hóa cho một loạt các cấu trúc dữ liệu địa lý. Một đối tượng GeoJSON có thể đại diện cho một hình học, một tính năng hoặc một tập các tính năng. GeoJSON hổ trợ các loại hình sau: 1 điểm, 1 đường thẳng, đa giác, đa điểm, đa cạnh….

Leaflet hổ trợ tất cả các loại GeoJSON. Feature và FeatureCollections cho phép mô tả các thực thể (features) và thuộc tính(properties):

var geojsonFeature = {

"type": "Feature",

"properties": {

"name": "Coors Field",

"amenity": "Baseball Stadium",

"popupContent": "This is where the Rockies play!"

}, "geometry": { "type": "Point", "coordinates": [-104.99404, 39.75621] } };

3.3.3.4. Kết nối cơ sở dữ liệu

Để xây dựng các chức năng của ứng dụng phải kết nối đến cơ sở dữ liệu lấy thông tin. Để sử dụng PHP kết nối cơ sở dữ liệu Postgre, sử dụng PHP Interface APIs.

Dưới đây là một đoạn code để kết nối cơ sở dữ liệu.

<?php

$host ="host=127.0.0.1";

$port ="port=5432";

$dbname ="dbname=testdb";

$credentials ="user=postgres password=pass123";

$db = pg_connect("$host $port $dbname $credentials" );

if(!$db){

echo "Error : Unable to open database\n";

}else{

echo "Opened database successfully\n";

}

?>

3.3.3.5. Xây dựng biểu đồ tổng hợp dữ liệu trạng thái giao thông

Để xây dựng biểu đồ tổng hợp dữ liệu trạng thái giao thông cần kết nối đến cơ sở dữ liệu và tính trạng thái giao thông tổng hợp của toàn bộ hệ thống theo thời điểm, ngày, tuần và tháng. Do khối lượng tính toán lớn, phần này sẽ được tính toán tại phía server. Dữ liệu trạng thái giao thông theo ngày, tuần, tháng được tính toán khi kết thúc ngày, tuần, tháng và lưu sẵn trong cơ sở dữ liệu. Dữ liệu trạng thái giao thông theo thời điểm được tính toán trực tiếp khi có yêu cầu xây dựng biểu đồ.

Đoạn code dưới đây lấy dữ liệu trạng thái giao thông trung bình tại mỗi thời điểm có dữ liệu:

<?php

$fromDate = $_GET["fromdate"]; $toDate = $_GET["todate"];

$result = pg_query("SELECT b.id, b.dt, b.idroad, (select AVG(a.state) from tb_traffic a where

a.dt = b.dt) as state FROM tb_traffic b where dt>='".$fromDate."'

and dt<='".$toDate."' and idroad = 1 order by dt desc");

$temp = array(); while($myrow = pg_fetch_assoc($result)) { $temp[] = $myrow; } echo json_encode($temp); pg_close($dbconn); ?>

Dữ liệu trạng thái giao thông tổng hợp theo ngày, tuần, tháng được lấy trực tiếp trong các bảng lưu trong cơ sở dữ liệu do đã được tính toán và lưu lại từ trước.

Dữ liệu sau khi tính toán sẽ được khai báo tập đối tượng JSON trong D3 để đưa vào xây dựng biểu đồ.

d3.json('data2.php?fromdate='+fromDate+'&todate='+toDate, function(error, data) {

data.forEach(function (d) {

d.dt = parseDate(d.dt);

d.state = +d.state;

});

3.3.3.6. Cập nhật dữ liệu thời gian thực

Khi lựa chọn chế độ “Chạy theo thời gian thực” hệ thống tự động kiểm tra cơ sở dữ liệu để cập nhật dữ liệu mới nhất để hiển thị trạng thái giao thông. Thời gian cài đặt trong chương trình thử nghiệm là 10 phút. Thời gian này có thể thay đổi tùy theo yêu cầu trong thực tế.

3.4. Kết quả thử nghiệm

Thực hiện các thiết kế và kỹ thuật đã giới thiệu, xây dựng hệ thống thử nghiệm trực quan hóa trạng thái giao thông trên nền web như hình 3.5.

Ứng dụng thử nghiệm đã hiển thị được trực quan hóa dữ liệu các tuyến phố trên nền bản đồ và xây dựng đồ thị thể hiện kết quả tổng hợp trạng thái giao thông của hệ thống theo thời gian như các yêu cầu về chức năng hệ thống đã phân tích tại mục 3.2.2.

Hệ thống đã được cài đặt thử nghiệm tại máy chủ ở Bộ môn Hệ thống thông tin – Khoa Công nghệ thông tin – Trường Đại học Công nghệ, với địa chỉ truy cập: http://112.137.130.56/HTVS/.

Hình 3.5 Màn hình chương trình thử nghiệm

Khi lựa chọn “Chạy theo thời gian thực”, dữ liệu hiển thị trực quan trên bản đồ thể hiện sự thay đổi trạng thái của ngày cuối cùng được cập nhật trong cơ sở dữ liệu. Người dùng cũng có thể lựa chọn ngày để xem biểu diễn trực quan hóa trạng thái giao thông. Dữ liệu hiển thị trực quan trên bản đồ và biểu đồ thể hiện trạng thái giao thông của ngày được lựa chọn.

Người dùng chọn ngày và nhấn nút “Chọn” để hiển thị trực quan trạng thái giao thông trên bản đồ và biểu đồ thể hiện trạng thái giao thông tổng hợp

Một phần của tài liệu MÔ HÌNH VÀ TRỰC QUAN HÓA DỮ LIỆU TRẠNG THÁI GIAO THÔNG TRÊN NỀN WEB (Trang 62 -62 )

×