基于WiFi的定位系统设计Word格式.docx
《基于WiFi的定位系统设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于WiFi的定位系统设计Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
![基于WiFi的定位系统设计Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/1/99117af4-8bee-4c92-b01f-71b87046fe67/99117af4-8bee-4c92-b01f-71b87046fe671.gif)
2.1WiFi定位的网络成员与结构
IEEE802.11主要规定了两种不同类型的基本架构:
有基础架构的无线局域网络(InfrastructureWirelessLAN)和无基础架构的无线局域网络(AdHocWirelessLAN)。
在Wi-Fi定位中常用的架构是有基础架构,如下图2-1所示:
图2-1
2.2WiFi定位的流程
(1)首先通过编写程序用来获取该移动设备周边的WiFi的物理地址。
(2)提取WiFi的物理地址并进行相应的解析。
(3)通过使用了NativeWiFi,可以获取到当前WiFi信号的RSSI值,并将其记录便可连续采集当前网卡所采集到所有WiFi信号的RSSI。
(4)添加MAP.html文件将采集到的信息加载到XX地图。
图2-2定位流程图
三、过程论述
3.1界面设计(如下图)
图3-1界面设计图
3.2控件的设计
3.2.1Label的使用:
在工具箱中找到Label,拖放至设计界面中,如图3-2、图3-3所示,可以对其属性进行修改,以及在界面中移动其位置。
图3-2工具箱图3-3属性
3.2.2TextBox的使用:
在工具箱中找到TextBox,拖放至设计界面中,如图3-4、图3-5所示,可以对其属性进行修改,在界面中移动其位置。
图3-4TextBox工具图图3-5TextBox属性图
3.2.3Button的使用在工具箱中找到Buttton,拖放至设计界面中,如图3-6、图3-7所示,可以对其属性进行修改,以及在界面中移动其位置。
图3-6Button工具图图3-7Button属性图
3.2.4实现基于WebBrowser加载Baidu地图,如图3-8所示。
图3-8WebBrowser工具图
3.2.5在bin/Bebug路径下,新建文本文件,输入以下内容,并重命名为Map.html,保存并退出,如图3-9所示。
图3-9Map.html嵌入图
3.3功能设计
3.3.1加载XX地图的代码实例
新建一个txt文件,输入代码后将该文件改为Map.html,以下是代码:
<
html>
head>
<
metahttp-equiv="
Content-Type"
content="
text/html"
/>
metaname="
viewport"
initial-scale=1.0,user-scalable=no"
styletype="
text/css"
>
body,html{width:
100%;
height:
margin:
0;
font-family:
"
微软雅黑"
;
}
#allmap{height:
500px;
width:
100%;
#r-result{width:
font-size:
14px;
/style>
scripttype="
text/javascript"
src="
title>
城市名定位<
/title>
.anchorBL{
display:
none;
}
/head>
body>
divid="
allmap"
/div>
r-result"
经度:
inputid="
longitude"
type="
text"
style="
100px;
margin-right:
10px;
纬度:
latitude"
margin-right:
<
inputtype="
button"
value="
查询"
onclick="
theLocation()"
/body>
/html>
//XX地图API功能
varmap=newBMap.Map("
);
map.centerAndZoom(newBMap.Point(116.331398,39.897445),11);
map.enableScrollWheelZoom(true);
//用经纬度设置地图中心点
functiontheLocation(){
if(document.getElementById("
).value!
="
&
document.getElementById("
){
map.clearOverlays();
varnew_point=newBMap.Point(document.getElementById("
).value,document.getElementById("
).value);
varmarker=newBMap.Marker(new_point);
//创建标注
map.addOverlay(marker);
//将标注添加到地图中
map.panTo(new_point);
}
}
/script>
完成上述操作之后选中Form1,在事件选项中选择Load,并双击打开相应代码:
privatevoidForm1_Load(objectsender,EventArgse)
{
stringstr_url=Environment.CurrentDirectory+"
/Map.html"
Uriurl=newUri(str_url);
this.webBrowser1.Navigate(url);
此时运行程序界面上会出现加载到WebBrowser的XX地图。
3.3.2获取AP的相关信息
(1)下载ManagedWiFi:
加入到工程中并添加引用,如下图3-10所示
图3-10添加AP
并申请命名空间为:
usingNativeWifi;
(2)获取WIFI的名称以及MAC地址,代码如下:
privatevoidbutton3_Click(objectsender,EventArgse)
WlanClientclient=newWlanClient();
foreach(WlanClient.WlanInterfacewlanIfaceinclient.Interfaces)
Wlan.WlanBssEntry[]WBE=wlanIface.GetNetworkBssList();
for(inti=0;
i<
WBE.Length-1;
i++)
for(intj=i;
j<
j++)
Wlan.WlanBssEntryindex;
if(WBE[i].rssi<
=WBE[j].rssi)
index=WBE[i];
WBE[i]=WBE[j];
WBE[j]=index;
3;
STR[i]=newinfo(GetStringForMACAddress(WBE[i].dot11Bssid),WBE[i].rssi.ToString());
foreach(Wlan.WlanBssEntrysub_wbeinWBE)
stringSSID=GetStringForSSID(sub_wbe.dot11Ssid);
stringMAC=GetStringForMACAddress(sub_wbe.dot11Bssid);
stringRSSI=sub_wbe.rssi.ToString();
stringLinkQuality=sub_wbe.linkQuality.ToString();
textBox1.AppendText("
SSID:
+SSID+"
+"
MAC:
+MAC+"
RSSI:
+RSSI+"
LQ:
+LinkQuality+System.Environment.NewLine);
JavaScriptSerializerSerializer=newJavaScriptSerializer();
strings=Serializer.Serialize(STR);
StringS="
+s+"
type=1&
key=5888d456644a4d8eb92cf9bc92fa8c85"
textBox2.Text=S;
textBox2.Show();
3.3.3提取MAC地址
privatevoidbutton4_Click(objectsender,EventArgse)
string_StringURL=textBox2.Text;
try
HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(_StringURL);
request.Method="
GET"
request.Accept="
*/*"
request.KeepAlive=false;
HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();
StreamdataStream=response.GetResponseStream();
StreamReaderreader=newStreamReader(dataStream);
stringresponseFromServer=reader.ReadToEnd();
response.Close();
reader.Close();
dataStream.Close();
this.textBox2.Text=responseFromServer;
catch(Exceptionex)
MessageBox.Show(ex.ToString());
3.3.4解析MAC和SSID
privatestringGetStringForMACAddress(byte[]macAddr)
uintnum=(uint)macAddr.Length;
string[]array=newstring[num];
intnum2=0;
while((long)num2<
(long)((ulong)num))
array[num2]=macAddr[num2].ToString("
x2"
).ToUpper();
//ToString("
):
X为十六进制,2为每次都是两位数.
num2++;
returnstring.Join("
:
array);
//Join()方法:
串联数组里所有字符串,并用指定分隔符连接
privatestringGetStringForSSID(Wlan.Dot11Ssidssid)
returnEncoding.UTF8.GetString(ssid.SSID,0,(int)ssid.SSIDLength);
//0表示索引,ssid.SSIDlength表示解码字节数
3.3.5将解析的数据定位到XX地图
privatevoidbutton1_Click(objectsender,EventArgse)
HtmlElementHE_longitude=webBrowser1.Document.GetElementById("
HE_longitude.SetAttribute("
value"
location[0]);
HtmlElementHE_latitude=webBrowser1.Document.GetElementById("
HE_latitude.SetAttribute("
location[1]);
webBrowser1.Document.InvokeScript("
theLocation"
四、结果分析
4.1WiFi定位分析图如下图:
图4-1WiFi定位图
由上图可知通过用C#软件编写程序实现了WiFi的定位的基本功能,通过点击获取按钮搜索到周边的WiFi,点击请求和解析的按钮然后得到对应的具体地址。
然后点击定位按钮并能将其成功的定位到XX地图上。
尽管界面比较简单,但是基本上能获取WiFi定位条件下所需要的数据。
经过多次的测试,程序还是比较稳定的,每次都能顺利的运行。
总体来说,该WiFi定位系统还是相对完善的,是可执行的。
五、结论(或总结)
通过本次WiFi定位系统的课程设计,我们了解了WiFi定位的基本原理以及它的实现过程。
尽管遇到过很多的问题,但是最终都能够得到解决。
同时这也是对个人能力的锻炼,使我们以后能很好的把理论应用于实践。
除了个人能力得到很好的锻炼之外,同时我也意识到自己有很多的不足之处,比如编写代码能力还不是那么熟练,好多编程思想不够成熟,希望能够在今后的学习中多多去改善这些不足,努力把自己的编程水平提升上去。
同时感谢老师的耐心指导、细心讲解,希望以后的学习中老师能够多多纠正我们学习之中的不足。
第二部分:
参考文献
学生签名:
填表日期:
年月日
第四部分:
指导教师评语
第五部分:
成绩评定