Minh họa vùng lấy dữ liệu tình trạng giao thông trong hệ thống cũ

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 50 - 54)

10 Phụ lục của đề tài

5.4 Minh họa vùng lấy dữ liệu tình trạng giao thông trong hệ thống cũ

Chi tiết cách hiện thực:

• Để lấy dữ liệu các segment theo đúng kích thước của bản đồ thì cần phải có

tọa độ cụ thể của bản đồ. Bản đồ mà người dùng đang sử dụng có hình chữ nhật nên chỉ cần có tọa độ hai điểm đầu cuối của một đường chéo bất kì của bản đồ thì có thể có được tọa độ bốn điểm xung quanh của bản đồ. Hiện tại ứng dụng web đang sử dụng thư viện react-leaflet [49] để hiển thị bản đồ. Để lấy được tọa độ hai điểm đầu cuối của đường chéo bản đồ thì chúng tôi đã sử dụng một con trỏ để trỏ đến bản đồ mục đích là để mỗi lần vị trí của bản đồ thay đổi (người dùng tìm kiếm hay di chuyển bản đồ đến vị trí mới) thì vẫn có con trỏ tham chiếu đến bản đồ. Tiếp sau đó sử dụng hàm

getBounds() của thư viện này để lấy tọa độ hai điểm đầu cuối (hướng đông bắc và tây nam) của đường chéo bản đồ mỗi lần mà bản đồ hiển thị hoặc

thay đổi vị trí mới. Hàm getBounds() sẽ trả về tọa độ địa lý của hai điểm

Hình 5.5: Minh họa việc lấy tọa độ của bản đồ

• Sau khi đã có được tọa độ hai điểm thuộc đường chéo của bản đồ, chúng tôi

đã thay đổi câu truy vấn để phù hợp với việc truy vấn tập dữ liệu segment từ cơ sở dữ liệu trong một vùng hình chữ nhật ứng với tọa độ các điểm của bản đồ mà phía ứng dụng web đã cung cấp. Chúng tôi đã ánh xạ các điểm tọa độ

của bản đồ sang dữ liệu GeoJSON Objects [54] với kiểu là Polygon (đa

giác) và sau đó sử dụng toán tử $geoIntersects [57] để truy vấn ra tập các

segment từCollection SegmentscủaMongoDB đã có đánh chỉ mục2dsphere

nằm trong đa giác đã được định nghĩa từ tọa độ các điểm của bản đồ. Đoạn

mã 5.6 mô tả câu truy vấn được chúng tôi sử dụng để lấy tập các segment.

Ý nghĩa của câu truy vấn này đó là tìm tất cả các segment có tọa độ địa lý

của hai điểm đầu cuối hình thành nên segment (dữ liệu trường polyline) nằm

bên trong đa giác được định nghĩa bởi tọa độ bốn điểm của bản đồ lần lượt là A, B, C và D hình thành lên chữ nhật ABCD. 1 { 2 polyline = { 3 $ g e o I n t e r s e c t s: { 4 $ ge om et r y: { 5 type: 'Polygon', 6 c o o r d i n a t e s: [ 7 [l o n g i t u d e _ A, l a t i t u d e _ A], 8 [l o n g i t u d e _ B, l a t i t u d e _ B], 9 [l o n g i t u d e _ C, l a t i t u d e _ C], 10 [l o n g i t u d e _ D, l a t i t u d e _ D], 11 [l o n g i t u d e _ A, l a t i t u d e _ A] 12 ], 13 }

14 },

15 }

16 }

Listing 5.6: Truy vấn tập các segment theo tọa độ của bản đồ

Bên cạnh đó, khi mức độ thu phóng của bản đồ (zoom_level) càng nhỏ thì số

lượng segment cần truy vấn về lý thuyết sẽ tăng lên. Tuy nhiên, việc truy vấn và

biểu diễn quá nhiều segment lên bản đồ ở các mức thu phóng nhỏ sẽ không cần

thiết và khiến cho thời gian phản hồi tăng lên. Dựa vào trường street_type(loại

đường) của các segment, chúng tôi phân loại các segment này thành bốn mức gọi

là street_level với giá trị lần lượt là 1, 2, 3, 4. Tùy vào giá trị của zoom_level mà

chúng tôi truy vấn các segment với giá trị street_level khác nhau. Bảng 5.5 thể

hiện giá trịstreet_level của cácsegment được truy vấn ứng với các mức zoom_level khác nhau.

Bảng 5.5: Tương quan giữa giá trị của zoom_level và street_level

Zoom_level Street_level

19,18,17 1,2,3,4

15, 16 1,2,3

14, 13 1,2

12,11,10 1

Sau khi ứng dụng web nhận được phản hồi từ server dữ liệu về tình trạng

giao thông và dữ liệu của các segment tương ứng. Layer Polyline của thư viện

Leaflet[48] được sử dụng để hiển thị các dữ liệu này lên bản đồ, cụ thể chúng tôi

ánh xạ dữ liệu tọa độ địa lý của các segment thành các layer dạng đoạn thẳng có

tọa độ tương ứng, màu sắc của cáclayer này biến đổi phụ thuộc vào giá trị vận tốc (velocity) của segment. Tuy nhiên, ứng với mỗi lần hiển thị tình trạng giao thông lên bản đồ thì số lượng layer kể trên cần hiển thị cùng lúc sẽ rất lớn nên thay vì hiển thị tất cả các layer này thì chúng tôi sẽ chia nhỏ chúng thành nhiều phần và hiển thị từng phần lên bản đồ. Hơn thế nữa, để giảm kích thước của bản đồ trên

ứng dụng web, mỗi lần người dùng thay đổi vị trí thì tập hợp các layer mới biểu

diễn tình trạng giao thông sẽ được thêm vào bản đồ, khi đó thì chúng tôi sẽ xóa

các layer không cần thiết nữa bằng cách sử dụng hàmremoveLayer của thư viện

Leaflet.

Dưới đây là mô tả thông tin API lấy tình trạng giao thông mà nhóm đã cập nhật:

• METHOD: GET

• ENDPOINT: https://api.bktraffic.com/api/traffic-status/get-status-v2

• AUTHENTICATION: Không

• PARAMS:

– NElat : Vĩ độ của vị trí được cho là góc theo hướng đông bắc của vùng đang xét.

– NElng : Kinh độ của vị trí được cho là góc theo hướng đông bắc của vùng đang xét.

– WSlat : Vĩ độ của vị trí được cho là góc theo hướng tây nam của vùng đang xét.

– WSlng : Kinh độ của vị trí được cho là góc theo hướng tây nam của vùng đang xét.

– zoom : Mức độ thu phóng của bản đồ.

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

5.2.4 Đánh giá kết quả thực hiện

Như đã phân tích trong phần đầu ở phần 5.2.3, với cách hiện thực việc truy

vấn tình trạng giao thông của các nhóm nghiên cứu trước lấy dữ liệu tình trạng giao thông theo khu vực hình tròn thì việc truy vấn dữ liệu dư thừa là không thể tránh khỏi. Hơn thế nữa, lượng dữ liệu trả về lại phụ thuộc khá nhiều vào mức độ thu phóng của bản đồ, từ đó dẫn đến:

• Đối với các mức độ thu phóng vừa và lớn thì lượng dữ liệu dư thừa này khiến thời gian phản hồi của server chậm và hiệu năng của việc hiển thị ở ứng dụng web giảm do phải biểu diễn cả tình trạng giao thông ở những vùng mà bản đồ không được hiển thị.

• Đối với các mức thu phóng nhỏ thì khối lượng dữ liệu cần truy xuất rất lớn

kết hợp với việc các nhóm nghiên cứu trước ước tính khu vực tìm kiếm để lấy dữ liệu tình trạng giao thông không chính xác khiến cho kết quả phản hồi từ server không những chậm mà còn không được chính xác.

Để thấy được cách hiện thực mới đó là lấy dữ liệu theo khu vực hình hình chữ nhật (kích thước của bản đồ trên màn hình người dùng) tốt hơn cách hiện thực của các nhóm nghiên trước đó là lấy dữ liệu theo khu vực hình tròn thì chúng tôi sẽ tiến hành khảo sát lại và dựa trên kết quả phản hồi của hai phiên bản mới và cũ của API lấy tình trạng giao thông và kết quả tình trạng giao thông được hiển thị trên bản đồ để đánh giá kết quả. Những hình ảnh, bảng số liệu và biểu đồ kế tiếp sau đây là kết quả khảo sát việc hiển thị tình trạng giao thông lên bản đồ cũng như là kết quả phản hồi của API lấy tình trạng giao thông trước và sau khi được chúng tôi cập nhật. Các kết quả này được chúng tôi thực hiện khảo sát tại khu vực

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 50 - 54)