Để khắc phục việc ánh xạ dữ liệu lên bản đồ bị sai lệch, phƣơng pháp map- matching đã đƣợc nghiên cứu và thực hiện trong phạm vi luận văn.
Mô hình đƣợc xây dựng nhƣ sau:
Hình 3.6 Mô hình ánh x d u v trí lên bạ ữliệ ị ản đồ
Mô hình đƣợc xây dựng gồm các bƣớc tiền xử lý dữ liệu, map-matching(ánh xạ dữ liệu lên bản đồ), lƣu cơ sở dữ liệu và hiển thị dữ liệu. Mỗi bƣớc đóng một vai trò quan
Formatted: Centered
Formatted: Font: No underline
Formatted: Font: Not Bold, English (U.S.)
Formatted: Justified, Level Space After: 63, pt, Outline numbered + Level: 3 + Numbering Style: 1, 2, 3,… + Start at: 1 + Alignment: Left + Aligned at: 0.25" + Indent at: 0.75"
Formatted: Font: No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT trọng trong việc thực hiện đƣa dữ liệu lên bản đồ một cách chính xác và thời gian hiển thị nhanh.
Tại server:
- Bƣớc 1: Dữ liệu đầu vàolà dữ liệu đƣợc gửi về từ thiết bị GPS và lƣu vào cơ sở dữ liệu.
- Bƣớc 2: Tiền xử lý dữ liệu dùng để loại bỏ lƣợng lớn các điểm sai, điểm dƣ thừa để giảm số điểm lƣu trữ không cần thiết đồng thời giảm số lƣợng các request
cho bƣớc tiếp theo và qua đó tăng tốc độ xử lý. Điểm sai và những điểm dƣ thừa
là những điểm do thiết bị gửi về nhƣng sau khi đƣợc tính toán thì bị loại bỏ do sự phi logic và sự lặp lại của những điểm này.
- Bƣớc 3: Ánh xạ dữ liệu lên bản đồ (Map-matching) là việc gửi dữ liệu định vị thô lên server của Google Maps nhằm ánh xạ những điểm này vào các tuyến đƣờng tƣơng ứng.
- Bƣớc 4: Lƣu vào CSDL những điểm đã đƣợc map-matching ở bƣớc 4. Việc lƣu trữ này sẽ phục vụ cho các yêu cầu hiển thị ở các bƣớc tiếp theo.
Tại client:
- Hiển thị kết quả đƣợc thực hiện bên phía client. Khi ngƣời dùng yêu cầu về hiển thi lộ trình và vị trí, mô hình sẽ truy cập cơ sở dữ liệu chứa các dữ liệu đã đƣợc
map-matching và trả về kết quả trên bản đồ.
3.3.2.1Thực hiện mô hình map-matching
- Bƣớc 1:Lấy dữ liệu gửi về trang khớp dữ liệu bản đồ (map-matching)
Bảng dữ liệu định vị đầu vào đƣợc lƣu trong cơ sở dữ liệu có dạng nhƣ trong hình sau:
Formatted:No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Hình 3.7 Dữ liệu đầu vào thuật toán map-matching
Để lấy đƣợc dữ liệu này ta phải thực hiện các câu lệnh Select trên javascript với các thủ tục nhƣ sau:
Hình 3.8 Các bƣớc để truy v n d ấ ữliệu định v ị
Trong bảng dữ liệu lƣu các trƣờng thông tin VehicleID, Time, Lat, Lng…Tuy nhiên để thực hiện khớp dữ liệu lên bản đồ ta chỉ cần lấy ra tọa độ lat,lng từ CSDL qua
câu lệnh: SELECT lat,lng FROM tableCSDL
Formatted: Centered
Formatted: Font: Not Bold, No underline, Font color: Auto
Formatted: Font: No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Hình 3.9 D ữliệu sau khi đƣợc select có d ngạ
Sau đó dữ liệu sẽ đƣợc nhận tại trang khớp bản đồ bằng phƣơng thức Post trong
javax thông qua javascript $.ajax({
'type':'POST',
'url' : đường dẫn tới trang khớp dữ liệu, 'data':{ dữ liệu nhận từ trang chứa CSDL }, 'success':function(data){
}
Dữ liệu nhận đƣợc có dạng là một mảng các điểm chứa tọa độ lat,lng
Hình 3.10 B ng d u nhả ựliệ ận đƣợc
Truy xuất vào từng thành phần của dữ liệu để lấy ra tọa độlat,lng đƣa vảo mảng thực hiện khớp dữ liệu bản đồ
- Bƣớc 2: Gửi các yêu cầu lên Google Map API
Formatted: Caption, Centered, Indent: First line: 0", Line spacing: single, Don't keep with next
Formatted: Font: Not Bold, No underline, Font color: Auto
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Caption, Centered, Line spacing: single
Formatted: Font: Not Bold, No underline, Font color: Auto
Formatted:No underline, Font color: Auto
Formatted: Font: Not Bold, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Tại bƣớc này, ta phải tạo ra các request
var request={
Origin : , Destination : , waypoint : , travelMode : }
Các thuộc tính bắt buộc của một request gửi đi phải gồm origin (điểm đầu), destination (điểm cuối) và travelMode (chế độ di chuyển của phƣơng tiện) của yêu cầu tìm đƣờng Tham số đƣợc truyền vào cho origin và destination có thể là tọa độ lat,. lng
hoặc các tọa độ đã đƣợc giải mã địa chỉ nhƣ Đại học Bách Khoa Hà Nội với
travelMode ta có các tùy chọn cho chế độ di chuyển nhƣ đi bộ (WALKING) hoặc lái
xe (DRIVING).
Do Google Map giới hạn số lƣợng request gửi đi trong một ngày và thời gian gửi đi gửi các request dẫn đến số lƣợng request ta cần gửi đi bị hạn chế và thời gian đáp ứng trả về sẽ lâu. Để khắc phục điểm này, tasử dụng thêm tùy chọn waypoint –là một mảng các các điểm trung gian gửi đi trong một request các điểm truyền vào có thể ở ,
dạng tọa độ lat,lng hay ở dạng đã geocoder - Google sẽ tìm đƣờng thông qua các các
waypoint này. Đối với các ứng dụng sử dụng Google Map miễn phí thì waypoint bị hạn chế số điểm tối đa là 8, con số này ở các ứng dụng bỏ phí mua dịch vụ của Google
số điểm waypoint có thể lên tới 23.
Để minh họa cho lợi ích của việc sử dụng waypoint ta có thể có ví dụ sau:
Giảsử ta có 217 điểm cần load với cùng thời gian gửi giữa các request là 1s.
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
: Hình 3.11 So sánh khi request không và có s d ng waypoint ử ụ
Dễ dàng nhận thấy, với cùng một số điểm đầu vào là 217 điểm, phƣơng pháp dùng waypoint chỉ mất 26 giây để thực hiện toàn bộ việc gửi request lên server của Google trong khi đó phƣơng pháp còn lại mất khoảng 218 giây. Nhƣ vậy bằng việc sử dụng waypoint, số request gửi tới Google server và thời gian thực hiện đã giảm đáng kể.
Một vấn đề khác là Google Map không chỉ hạn chế số request gửi đi trong một ngày mà còn hạn chế thời gian gửi đi giữa các request. Do đó không thể gửi liên tiếp
các request lên Google đƣợc mà các request cần cách nhau một khoảng thời gian nhất đinh. Để giải quyết điều này, tasử dụng kỹ thuật Thread trong javascript để xử lý cụ thể là Tập hợp các request sẽ đƣợc đặt trong vòng thread để xử lý.Trong mỗi lần request đƣợc gửi đi, các request khác sẽ đợi cho tới khi request trƣớc đƣợc thực hiện hoàn thành. Để đảm bảo tránh lỗi request, thời gian gửi giữa các request là 1s đủ
Google Map xử lý việc tìm đƣờng.
- Bƣớc 3: Nhận các reponse trả về và kiểm tra kết quả tìm đƣờng của Google Map
Để nhận và thực hiện các request, t cần tạo một đối tƣợng của lớp DirectionServicea .
Formatted: Centered
Formatted: Font: No underline, Font color: Auto
Formatted: Font: Not Bold
Formatted: Font: Not Bold
Formatted:No underline, Font color: Auto
Formatted: Font: Not Bold, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
var directionService = new.Google.maps.DirectionsService();
Sau đó gọi phƣơng thức xác định hƣớng route của đồi tƣợng directionService:
directionsService.route(request, function (response, status))
trong đó route[] là một mảng các đối tƣợng DirectionsRoute. Mỗi 1 route chỉ ra cách
nhận đƣợc hƣớng từ điểm đầu và điểm cuối. Thông thƣờng một route sẽ trả kết quả về cho bất cứ request nào. Hàm function(response,status) là hàm callback đƣợc gọi khi
thực hiện hoàn thành các yêu cầu Hàm này chứa kết quả . Google Map trả về kết quả
thông qua DirectionsResult và DirectionsStatus.
DirectionsStatus trả về kết quả của việc thực hiện phƣơng thức route:
- Nếu Status = OK khi đó phƣơng thức route đã hoàn thành việc tìm ra hƣớng giữa các điểm .Google trả về hƣớng đã xác định.
- Nếu Status!= OK có lỗi ảy ra khi thực hiện requestx .
Một số lỗi xảy ra khi request là:
- Gửi quá nhiều request trong một khoảng thời gian ngắn. - Tọa độ điểm truyền vào trong request không hợp lệ. Khi lỗi request xảy ra các điểm không đƣợc nối lại với nhau
Hình 3.12 K t qu khi có l i requestế ả ỗ Formatted: Caption, Centered, Line spacing: single
Formatted: Font: Not Bold, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Để khắc phục các lỗi request, ta cần sử dụng tùy chọn waypoint để làm giảm số lƣợng request cần gửi đồng thời sử dụng kỹ thuật thread trong javascript Cứ sau , .
khoảng một thời gian nhất định các request sẽ đƣợc gửi, Google Map sẽ xử lý từng
request và hiển thị kết quả lên bản đồ.
Khi thực hiện request thành công Google Map trả về kết quả của câu lệnh truy vấn
trong hàm DirectionsResult. Kết quả trả về chứa các trƣờng thông tin nhƣ:
- Leg: tập hợp mảng gồm tập hợp các mảng DirectionsLeg. Mỗi một leg chứa tọa độ các điểm đã đƣợc ánh xạ cũng nhƣ địa đị chỉ của điểm đó.
- Overview_path: tập hợp tọa độ lat,lng thể hiện cho đoạn đƣờng request. - Warning: cảnh báo đƣợc hiển thị khi chỉ ra những hƣớng đi.
Kết quả này có thta ể tự xử lý hoặc thông qua đối tƣợng DirectionsRender tự động hiển thị kết quả lên bản đồ Hiển thị kết quả từ DirectionsResult sử dụng .
DirectionsRender đơn giản ta thực hiện nhƣ sau:
Đầu tiên, ta ạo một đối tƣợng DirectionsRendert : Var directionsDisplay = new Google.maps.DirectionsRenderer (rendererOptions);
Trong đó RendenerOption là tùy chọn trong hiển thị Các tùy chọn của .
DirectionsRenderer có thể bao gồm đối tƣợng thể hiện (trên map) các tùy chọn của vẽ ,
đƣơng thể hiện Polyline nhƣ màu hiển thị, kích thƣớc đƣờng hiển thị.
Sau đó gọi phƣơng thức setMap() để hiển thị thị kết quả trên bản đồ và phƣơng thức
setDirection() của render. Các đối tƣợng render tự động phát hiện ra bất kỳ thay đổi thuộc tính của nó và cập nhật các bản đồ khi hƣớng dẫn liên quan của nó đã thay đổi.
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Hình 3.13 So sánh l ộ trình trƣớc và sau khi kh p bớ ản đồ - Bƣớc 4: Lƣu vào cơ sở dữ liệu những điểm trƣớc và sau map-matching
Lý do cần lƣu lại cơ sở dữ liệu đã đƣợc khớp lên bản đồ là do nếu request đƣợc thực hiện ở phía client thì ta sẽ mất rất nhiều thời gian để hiển thị kết quả do Google
phải thực hiện tìm kiếm trong cơ sở dữ liệu của mình điều này có thể gây những tác ,
động không tốt tới tâm lý ngƣời sử dụng. Khi ngƣời dùng muốn hiển thị lộ trình trên một đoạn đƣờng dài hay trong khoảng thời gian dài dẫn đến số lƣợng các điểm cần request sẽ lớn gây ra lỗi vƣợt quá giới hạn request của Google Map.
Với các lý do trên, thuật toán khớp bản đồ map-matching chỉ thực hiện bên phía server.
Để tăng tốc độ hiển thị bên phía ngƣời dùng đồng thời không bị giới hạn số điểm muốn hiển thị ta lƣu các điểm đã đƣợc khớp vào cơ sở dữ liệu. Khi đã có cơ sở dữ liệu chính xác về vị trí hay lộ trình của phƣơng tiện đƣợc trả về từ Google Map,kết quả sẽ đƣợc hiện lên bản đồ một cách nhanh chóng chính xác mà không cần thực hiện gửi các yêu cầu request lên Google Map.
Formatted: Centered, Indent: Left: 0"
Formatted: Font: Not Bold, No underline, Font color: Auto
Formatted: Font: Not Bold
Formatted: Font: Not Bold, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Hình 3.14 Lƣu đồ các bƣớc lƣu dữliệu đã đƣợc khớp vào cơ sở ữ d uliệ
Lấy dữ liệu từ Google Map trả về gồm có: Tọa độ các điểm lat,lng chƣa đƣợc khớp lên bản đồ ọa độ các điểm lat,lng đã đƣợc khớp chính xác lên bản đồ và địa chỉ các điểm , t
trên bản đồ.
Formatted: Font: Not Bold, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT
Hình 3.15Hình 0-3: D u l y v ữliệ ấ ề tƣ Google Map sau khi map-matching
Sau mỗi request ta sẽ lƣu các thông tin cần thiết vào 1 mảng. Khi toàn bộ các request đã hoàn thành dữ liệu sẽ đƣợc gửi đi Dữ liệu nhận đƣợc cần phải đƣợc gửi về một , .
trang xử lý khác, để làm nhƣ thế tôi đã xây dựng hàm gửi dữ liệu dùng phƣơng thức
POST trong ajax thông qua javascript: function postServer(postData) { $.ajax({
url: "đường dấn tới trang nhận dữ liệu", data: { dữ liệu gửi đi },
type: 'POST',
success: function (data, status) { }
}); };
Gọi hàm gửi dữ liệu: Sau khi đã hoàn thành request dữ liệu đã đƣợc thu về đầy đủ , ta gửi toàn bộ dữ liệu thu đƣợc lên trang nhận dữ liệu, trang nàysẽ nhận dữ liệu thông qua đối tƣợng Request. Đối tƣợng request đƣợc dùng để nhận thông tin giữa các trang gửi về tới server. Các thông tin đƣợc gửi về thông qua phƣơng thức GET hoặc POST hay các tham số đƣợc ghi cùng trang asp.net trong lời gọi trang đó Đối tƣợng request .
Formatted: Caption, Centered, Line spacing: single
Formatted: Font: Not Bold, No underline, Font color: Auto
Formatted: Font: Not Bold, No underline, Font color: Auto
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
Formatted: Font: Italic
Formatted: Font: Italic, No underline, Font color: Auto
NGHIÊN CỨU THIẾT KẾ VÀ CHẾ TẠO THIẾT BỊ ĐỊNH VỊ CHÍNH XÁC KẾT HỢP TRUYỀN THÔNG VÔ TUYẾN PHỤC VỤ CÁC MỤC ĐÍCH GIÁM SÁT sẽ đƣợc dùng để chia sẻ thông tin giữa các trang ASP.NET trong một ứng dụng và để lấy cookie lƣu trữ trên máy client.
Bóc tách cơ sở dữ liệu nhận đƣợc Dữ liệu thu đƣợc gồm một mảng các chứa thông :
tin của các trƣờng dữ liệu.Ta cần tách các trƣờng thông tin riêng rẽ để lƣu vào cở sở dữ liệuở đây dùng hàm Split(). Hàm Split() là một hàm chuyên dùng để chiamột chuỗi ra thành một mảng của chuỗi con dựa vào các kí tự đặc biệt phân cách chuỗi.
Ví d ụ đữliệu thu đƣợc có d ngạ : “21.014635: 105.849226666667: số 1,Đại C Vi t ồ ệ ”
Sau khi tách ta s ẽ đƣợc các trƣờng d ữ liệu riêng biệt “21.014635”, “105.849226666667”,” số 1, Đại C Viồ ệt”. Vi c c n làm tiệ ầ ếp theo là lƣu các điểm này