《無線定位課程設(shè)計.doc》由會員分享,可在線閱讀,更多相關(guān)《無線定位課程設(shè)計.doc(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
定位技術(shù)及其應(yīng)用 設(shè)計說明書
(封面)
學(xué)院名稱: 計算機與信息工程學(xué)院
班級名稱: 13級物聯(lián)網(wǎng)
學(xué)生姓名:
學(xué) 號: 2
題 目:基于WiFi的定位系統(tǒng)設(shè)計
指導(dǎo)教師
姓 名:
日 期: 2015年11月10日
第一部分:正文部分
一、選題背景
隨著當(dāng)前移動通信技術(shù)的發(fā)展以及無線網(wǎng)絡(luò)的逐漸普及,對于基于定位服務(wù)的需求也迅速增加,例如,商場購物車定位和顧客消費習(xí)慣的收集;再者是醫(yī)院重癥患者的跟蹤監(jiān)護;以及還有學(xué)生上課期間的對所在的位置的收集等。所以定位的計算和服務(wù)在人們的日常生活中扮演者越來越重要的角色。
盡管基于GPS技術(shù)的室外定位已經(jīng)達到很高的定位精度,但是由于GPS無法在室內(nèi)進行定位,所以室內(nèi)定位也就成為目前研究的焦點?,F(xiàn)在的室內(nèi)定位有技術(shù)主要有紅外定位、超聲波定位、WiFi定位等。其中WiFi定位最受人們的關(guān)注,因為WiFi定位網(wǎng)絡(luò)廣泛存在于室內(nèi)的環(huán)境中,信息傳輸?shù)乃俣缺容^快,而且硬件成本低,耗能也比較少。有利于在現(xiàn)在普及的WIFI熱點的室內(nèi)實現(xiàn),極大的彌補了GPS在建筑密集或者室內(nèi)應(yīng)用的限制,擴大了室內(nèi)定位服務(wù)的應(yīng)用行業(yè)和范圍。
2、 方案論證
2.1 WiFi定位的網(wǎng)絡(luò)成員與結(jié)構(gòu)
IEEE 802.11主要規(guī)定了兩種不同類型的基本架構(gòu):有基礎(chǔ)架構(gòu)的無線局域網(wǎng)絡(luò) (Infrastructure Wireless LAN) 和無基礎(chǔ)架構(gòu)的無線局域網(wǎng)絡(luò) (Ad Hoc Wireless LAN) 。在Wi-Fi定位中常用的架構(gòu)是有基礎(chǔ)架構(gòu),如下圖2-1所示:
圖2-1
2.2 WiFi定位的流程
(1) 首先通過編寫程序用來獲取該移動設(shè)備周邊的WiFi的物理地址。
(2) 提取WiFi的物理地址并進行相應(yīng)的解析。
(3) 通過使用了NativeWiFi,可以獲取到當(dāng)前WiFi信號的RSSI值,并將其記錄便可連續(xù)采集當(dāng)前網(wǎng)卡所采集到所有WiFi信號的RSSI。
(4) 添加MAP.html文件將采集到的信息加載到百度地圖。
移動終端獲取WiFi
Web服務(wù)器
WiFi數(shù)據(jù)平臺
進行WiFi的解析
加載到百度地圖
圖2-2定位流程圖
三、過程論述
3.1界面設(shè)計(如下圖)
圖3-1界面設(shè)計圖
3.2 控件的設(shè)計
3.2.1 Label的使用:在工具箱中找到Label,拖放至設(shè)計界面中,如圖3-2、圖3-3所示,可以對其屬性進行修改,以及在界面中移動其位置。
圖3-2工具箱 圖3-3屬性
3.2.2 TextBox的使用:在工具箱中找到TextBox,拖放至設(shè)計界面中,如圖3-4、圖3-5所示,可以對其屬性進行修改,在界面中移動其位置。
圖3-4 TextBox工具圖 圖3-5 TextBox屬性圖
3.2.3 Button的使用在工具箱中找到Buttton,拖放至設(shè)計界面中,如圖3-6、圖3-7所示,可以對其屬性進行修改,以及在界面中移動其位置。
圖3-6 Button工具圖 圖3-7 Button屬性圖
3.2.4實現(xiàn)基于WebBrowser加載Baidu地圖,如圖3-8所示。
圖3-8 WebBrowser工具圖
3.2.5在bin/Bebug路徑下,新建文本文件,輸入以下內(nèi)容,并重命名為Map.html,保存并退出,如圖3-9所示。
圖3-9 Map.html嵌入圖
3.3功能設(shè)計
3.3.1加載百度地圖的代碼實例
新建一個txt文件,輸入代碼后將該文件改為Map.html,以下是代碼:
城市名定位
經(jīng)度:
緯度:
完成上述操作之后選中Form1,在事件選項中選擇Load,并雙擊打開相應(yīng)代碼:
private void Form1_Load(object sender, EventArgs e)
{
string str_url = Environment.CurrentDirectory + "/Map.html";
Uri url = new Uri(str_url);
this.webBrowser1.Navigate(url);
}
此時運行程序界面上會出現(xiàn)加載到WebBrowser的百度地圖。
3.3.2 獲取AP的相關(guān)信息
(1) 下載ManagedWiFi:http://managedwifi.codeplex.com/
加入到工程中并添加引用 ,如下圖3-10所示
圖3-10添加AP
并申請命名空間為: using NativeWifi;
(2) 獲取WIFI的名稱以及MAC地址,代碼如下:
private void button3_Click(object sender, EventArgs e)
{
WlanClient client = new WlanClient();
foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
{
Wlan.WlanBssEntry[] WBE = wlanIface.GetNetworkBssList();
for (int i = 0; i < WBE.Length - 1; i++)
{
for (int j = i; j< WBE.Length - 1; j++)
{
Wlan.WlanBssEntry index;
if (WBE[i].rssi <= WBE[j].rssi)
{
index = WBE[i];
WBE[i] = WBE[j];
WBE[j] = index;
}
}
}
for (int i = 0; i < 3; i++)
{
STR[i] = new info(GetStringForMACAddress(WBE[i].dot11Bssid), WBE[i].rssi.ToString());
}
foreach (Wlan.WlanBssEntry sub_wbe in WBE)
{
string SSID = GetStringForSSID(sub_wbe.dot11Ssid);
string MAC = GetStringForMACAddress(sub_wbe.dot11Bssid);
string RSSI = sub_wbe.rssi.ToString();
string LinkQuality = sub_wbe.linkQuality.ToString();
textBox1.AppendText("SSID:" + SSID + " " + "MAC:" + MAC + " " + "RSSI:" + RSSI + " " + "LQ:" + LinkQuality + System.Environment.NewLine);
}
}
JavaScriptSerializer Serializer = new JavaScriptSerializer();
string s = Serializer.Serialize(STR);
String S = "http://api.haoservice.com/api/LocationByWifiData?requestdata=" + s + "&type=1&key=5888d456644a4d8eb92cf9bc92fa8c85";
textBox2.Text = S;
textBox2.Show();
}
3.3.3提取MAC地址
private void button4_Click(object sender, EventArgs e)
{
string _StringURL = textBox2.Text;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_StringURL);
request.Method = "GET";
request.Accept = "*/*";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
response.Close();
reader.Close();
dataStream.Close();
this.textBox2.Text = responseFromServer;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
3.3.4解析MAC和SSID
private string GetStringForMACAddress(byte[] macAddr)
{
uint num = (uint)macAddr.Length;
string[] array = new string[num];
int num2 = 0;
while ((long)num2 < (long)((ulong)num))
{
array[num2] = macAddr[num2].ToString("x2").ToUpper();//ToString("x2"):X為十六進制,2為每次都是兩位數(shù).
num2++;
}
return string.Join(":", array);//Join()方法:串聯(lián)數(shù)組里所有字符串,并用指定分隔符連接
}
private string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);//0表示索引,ssid.SSIDlength表示解碼字節(jié)數(shù)
}
3.3.5將解析的數(shù)據(jù)定位到百度地圖
private void button1_Click(object sender, EventArgs e)
{
HtmlElement HE_longitude = webBrowser1.Document.GetElementById("longitude");
HE_longitude.SetAttribute("value", location[0]);
HtmlElement HE_latitude = webBrowser1.Document.GetElementById("latitude");
HE_latitude.SetAttribute("value", location[1]);
webBrowser1.Document.InvokeScript("theLocation");
}
四、結(jié)果分析
4.1 WiFi定位分析圖如下圖:
圖4-1 WiFi定位圖
由上圖可知通過用C#軟件編寫程序?qū)崿F(xiàn)了WiFi的定位的基本功能,通過點擊獲取按鈕搜索到周邊的WiFi,點擊請求和解析的按鈕然后得到對應(yīng)的具體地址。然后點擊定位按鈕并能將其成功的定位到百度地圖上。盡管界面比較簡單,但是基本上能獲取WiFi定位條件下所需要的數(shù)據(jù)。經(jīng)過多次的測試,程序還是比較穩(wěn)定的,每次都能順利的運行??傮w來說,該WiFi定位系統(tǒng)還是相對完善的,是可執(zhí)行的。
五、結(jié)論(或總結(jié))
通過本次WiFi定位系統(tǒng)的課程設(shè)計,我們了解了WiFi定位的基本原理以及它的實現(xiàn)過程。盡管遇到過很多的問題,但是最終都能夠得到解決。同時這也是對個人能力的鍛煉,使我們以后能很好的把理論應(yīng)用于實踐。除了個人能力得到很好的鍛煉之外,同時我也意識到自己有很多的不足之處,比如編寫代碼能力還不是那么熟練,好多編程思想不夠成熟,希望能夠在今后的學(xué)習(xí)中多多去改善這些不足,努力把自己的編程水平提升上去。同時感謝老師的耐心指導(dǎo)、細心講解,希望以后的學(xué)習(xí)中老師能夠多多糾正我們學(xué)習(xí)之中的不足。
第二部分:參考文獻
學(xué)生簽名: 填表日期: 年 月 日
第四部分: 指導(dǎo)教師評語
第五部分:成績評定
鏈接地址:http://www.hcyjhs8.com/p-6607671.html