Hình 4-37: Client side matching Algorithm

Một phần của tài liệu Công nghệ định vị và ứng dụng android cho mạng địa xã hội (Trang 62 - 66)

Có rất nhiều hướng tiếp cận tới thuật toán xác định vị trí người dùng, trong đó phải kể đến 2 phương pháp nổi bật nhất là:

• Range based Matching: tìm location ID dựa trên so sánh độ mạnh sóng mà client gửi lên có nằm trong khoảng LowRange và HighRange hay không? • Euclidean Matching: tính khoảng cách Euclid giữa độ mạnh sóng của các

Access Point mà phía client gửi lên với độ mạnh sóng lưu trong cột stored của bảng AccessPoint. LocationID nào cho khoảng cách Euclid nhỏ nhất, sẽ là locationID mà khả năng người sử dụng đang đứng ở đấy lớn nhất.

Thuật toán Range based Matching:

Thuật toán đơn giản như sau, duyệt toàn bộ các địa chỉ MAC gửi lên, với mỗi địa chỉ MAC, tìm trong bảng AccessPoint các hàng có địa chỉ MAC này, được một danh sách. Sau đó, trong danh sách này, những địa chỉ MAC nào có độ mạnh sóng nằm trong khoảng Low-high thì giữ lại, chọn làm địa điểm tiềm năng. Cuối

cùng, nếu chỉ thu được 1 Location ID thì trả lại LocationID đó, nếu không, ta chọn LocationID đầu tiên vì địa điểm này được xác định dựa trên MAC có sóng mạnh nhất, vì vậy nó có nhiều khả năng là địa điểm chính xác. Cụ thể:

• Đầu vào: danh sách các MAC+strength được sắp theo thứ tự giảm dần theo strength.

• Đầu ra: LocationID của địa điểm mà người dùng đang đứng. Nếu không có, trả lại -1.

int LocID RangeBasedMatching(List<MAC> MAClst){ List<AC_location> lstAClocationPossible=null; //Duyệt theo danh sách các MAC clien gửi lên

Foreach (MAC in MAClst){

// với mỗi địa chỉ MAC, tìm danh sách các AC_location có chứa MAC đó. List<AC_location> lstACLoc= searchLocByMAC(MAC); // Nếu danh sách chỉ cho ra 1 AC_location, chuyển ngay sang MAC tiếp theo.

If(lstACLoc.size==1){

lstAClocationPossible.add(lstACLoc[0]); Continue;

}

//Nếu danh sách trống, chuyển qua MAC tiếp theo.

if(lstAcLoc.size==0) {

Continue; }

// Nếu danh sách có nhiều hơn 1 địa điểm, xét các địa điểm này theo strength. Nếu //nằm trong khoảng thì add vào danh sách lstAClocationPossible.

Foreach(ac_location in LstAcLoc){

If( MAC.strength nằm trong khoảng ac_location) { lstAClocationPossible.add(ac_location); }

} } 

// Trong danh sách lstAClocationPossible, ta chọn cái đầu tiên làm ứng viên tốt nhất //cho thuật toán này.

If(lstAClocationPossible!=null){

return lstAClocationPossible[0].getLocID(); }

else return -1; }

MAC là một class java bean chỉ chứa 2 thuộc tính: MAC có kiểu String chứa địa chỉ MAC của Access Point mà thiết bị thu được, và thuộc tính strength kiểu in chứa độ mạnh sóng của Access Point đó. AC_location cũng là một lớp java bean chứa dữ liệu cho bảng sau:

LocID MAC Low High stored

1 A2B 45 70 57 1 A2C 30 40 34 2 A2B 25 39 30 2 A2C 50 75 60 3 E3D 56 89 70 3 E3K 34 67 60

Bảng 4-2: Dữ liệu lấy mẫu

Thuật toán Euclidean Matching.

Giả sử vector R(s1, s2, s3, …, sn) là vector mà người sử dụng nhận được trong đó, si là độ mạnh sóng của access point i. Fj(f1, f2, f3, …, fm) là vector lưu trong cơ sở dữ liệu. Trong đó, s là độ mạnh của các access point j. Ta sẽ tính khoảng cách Euclid Ej giữa R và Fj, so sánh và chọn ra Ek nhỏ nhất thì tức là location thứ k sẽ là location mà người đó đang đứng. Số lượng access point mà người dùng bắt được(n) và số lượng access point có lưu trong cơ sở dữ liệu(m) có thể khác nhau.

Khi đó, ta chỉ tính khoảng cách Euclid đến số nhỏ hơn, phần còn lại không cần thiết phải so sánh. Công thức trên tính khoảng cách Euclid giữa vector độ mạnh sóng của sóng nhận được và sóng mẫu trong database.

1.14. Chương trình lấy mẫu WifiScanner

Hiện nay do thời gian có hạn, nên em mới chỉ cài đặt được cho phần sampling, ứng dụng sẽ được cài đặt trên điện thoại Android và được các thành viên của nhóm phát triển Foloyu đi lấy mẫu, lưu vào cơ sở dữ liệu sampling. Dự tính trong tương lai, nhóm chúng em sẽ tiếp tục cài đặt module định vị cho foloyu theo thuật toán Range Based matching đã được trình bày trong mục 3.2.3. Thuật toán này bộc lộ rất nhiều yếu điểm khi triển khai trong những tình huống phức tạp như các quán café trong rạp chiếu phim, hay trong các trung tâm thương mại lớn. Tuy nhiên, với các quán café ở Hà Nội, cách nhau khá xa, và gần như giữa 2 location ID không có chung access point thì phương pháp này lại tỏ ra có nhiều ưu điểm. Vì thứ nhất, nó đáp ứng được yêu cầu của module định vị là định vị chính xác, thứ hai, không yêu cầu điện thoại cài đặt thêm phần cứng phức tạp, thứ ba không gây tốn pin, thứ tư tận dụng được sức mạnh của server nên phần tính toán ở client không lớn. Và cuối cùng, thuật toán cài đặt đơn giản, nên tránh được những phức tạp không cần thiết làm cho server phải tính toán nhiều. Cuối cùng, em xin trình bày về ứng dụng lấy mẫu cho dự án.

1.14.1. Thiết kế chương trình

Chương trình lấy mẫu phải đảm bảo các yêu cầu sau: phải quét được hết các sóng wifi mà thiết bị thu được, phải tính được vị trí hiện thời của thiết bị lấy mẫu, và phải có giao diện cho phép người thu thập mẫu điền thông tin về địa điểm, sau đó toàn bộ các thông tin này được gửi lên server rồi lưu lại vào cơ sở dữ liệu. Chính vì vậy, trong phần này em phải làm hai công việc chính là, viết ứng dụng client trên thiết bị Android và viết một server nhận thông tin từ client này.

Hình vẽ 4-5 mô tả quá trình lấy dữ liệu. Người thu thập dữ liệu lấy dữ liệu sóng wifi, sau đó điền thông tin về địa điểm, gửi lên server thu thập dữ liệu. Nhiệm vụ server là kết nối tới cơ sở dữ liệu, tiến hành kiểm tra lại thông tin về địa điểm này, xem nó đã có trong cơ sở dữ liệu chưa, rồi sau đó quyết định có lưu vào cơ sở dữ liệu không, và trả lại kết quả cho nhân viên thu thập dữ liệu biết xem họ đã lưu thành công hay chưa.

Hình 4-38: Mô hình lấy mẫu dữ liệu

Một phần của tài liệu Công nghệ định vị và ứng dụng android cho mạng địa xã hội (Trang 62 - 66)

Tải bản đầy đủ (DOC)

(94 trang)
w