资源描述
定位技术及其应用 设计说明书
(封面)
学院名称: 计算机与信息工程学院
班级名称: 13级物联网
学生姓名:
学 号: 2
题 目:基于WiFi的定位系统设计
指导教师
姓 名:
日 期: 2015年11月10日
第一部分:正文部分
一、选题背景
随着当前移动通信技术的发展以及无线网络的逐渐普及,对于基于定位服务的需求也迅速增加,例如,商场购物车定位和顾客消费习惯的收集;再者是医院重症患者的跟踪监护;以及还有学生上课期间的对所在的位置的收集等。所以定位的计算和服务在人们的日常生活中扮演者越来越重要的角色。
尽管基于GPS技术的室外定位已经达到很高的定位精度,但是由于GPS无法在室内进行定位,所以室内定位也就成为目前研究的焦点。现在的室内定位有技术主要有红外定位、超声波定位、WiFi定位等。其中WiFi定位最受人们的关注,因为WiFi定位网络广泛存在于室内的环境中,信息传输的速度比较快,而且硬件成本低,耗能也比较少。有利于在现在普及的WIFI热点的室内实现,极大的弥补了GPS在建筑密集或者室内应用的限制,扩大了室内定位服务的应用行业和范围。
二、 方案论证
2.1 WiFi定位的网络成员与结构
IEEE 802.11主要规定了两种不同类型的基本架构:有基础架构的无线局域网络 (Infrastructure Wireless LAN) 和无基础架构的无线局域网络 (Ad Hoc Wireless LAN) 。在Wi-Fi定位中常用的架构是有基础架构,如下图2-1所示:
图2-1
2.2 WiFi定位的流程
(1) 首先通过编写程序用来获取该移动设备周边的WiFi的物理地址。
(2) 提取WiFi的物理地址并进行相应的解析。
(3) 通过使用了NativeWiFi,可以获取到当前WiFi信号的RSSI值,并将其记录便可连续采集当前网卡所采集到所有WiFi信号的RSSI。
(4) 添加MAP.html文件将采集到的信息加载到百度地图。
移动终端获取WiFi
Web服务器
WiFi数据平台
进行WiFi的解析
加载到百度地图
图2-2定位流程图
三、过程论述
3.1界面设计(如下图)
图3-1界面设计图
3.2 控件的设计
3.2.1 Label的使用:在工具箱中找到Label,拖放至设计界面中,如图3-2、图3-3所示,可以对其属性进行修改,以及在界面中移动其位置。
图3-2工具箱 图3-3属性
3.2.2 TextBox的使用:在工具箱中找到TextBox,拖放至设计界面中,如图3-4、图3-5所示,可以对其属性进行修改,在界面中移动其位置。
图3-4 TextBox工具图 图3-5 TextBox属性图
3.2.3 Button的使用在工具箱中找到Buttton,拖放至设计界面中,如图3-6、图3-7所示,可以对其属性进行修改,以及在界面中移动其位置。
图3-6 Button工具图 图3-7 Button属性图
3.2.4实现基于WebBrowser加载Baidu地图,如图3-8所示。
图3-8 WebBrowser工具图
3.2.5在bin/Bebug路径下,新建文本文件,输入以下内容,并重命名为Map.html,保存并退出,如图3-9所示。
图3-9 Map.html嵌入图
3.3功能设计
3.3.1加载百度地图的代码实例
新建一个txt文件,输入代码后将该文件改为Map.html,以下是代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";}
#allmap{height:500px;width:100%;}
#r-result{width:100%; font-size:14px;}
</style>
<script type="text/javascript" src="
<title>城市名定位</title>
<style type="text/css">
.anchorBL{
display:none;
}
</style>
</head>
<body>
<div id="allmap"></div>
<div id="r-result">
经度: <input id="longitude" type="text" style="width:100px;
margin-right:10px;" />
纬度: <input id="latitude" type="text" style="width:100px; margin-right:10px;" />
<input type="button" value="查询" onclick="theLocation()" />
</div>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(116.331398,39.897445),11);
map.enableScrollWheelZoom(true);
// 用经纬度设置地图中心点
function theLocation(){
if(document.getElementById("longitude").value != "" && document.getElementById("latitude").value != ""){
map.clearOverlays();
var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value);
var marker = new BMap.Marker(new_point); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
map.panTo(new_point);
}
}
</script>
完成上述操作之后选中Form1,在事件选项中选择Load,并双击打开相应代码:
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);
}
此时运行程序界面上会出现加载到WebBrowser的百度地图。
3.3.2 获取AP的相关信息
(1) 下载ManagedWiFi:
加入到工程中并添加引用 ,如下图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 = " + 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为每次都是两位数.
num2++;
}
return string.Join(":", array);//Join()方法:串联数组里所有字符串,并用指定分隔符连接
}
private string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);//0表示索引,ssid.SSIDlength表示解码字节数
}
3.3.5将解析的数据定位到百度地图
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");
}
四、结果分析
4.1 WiFi定位分析图如下图:
图4-1 WiFi定位图
由上图可知通过用C#软件编写程序实现了WiFi的定位的基本功能,通过点击获取按钮搜索到周边的WiFi,点击请求和解析的按钮然后得到对应的具体地址。然后点击定位按钮并能将其成功的定位到百度地图上。尽管界面比较简单,但是基本上能获取WiFi定位条件下所需要的数据。经过多次的测试,程序还是比较稳定的,每次都能顺利的运行。总体来说,该WiFi定位系统还是相对完善的,是可执行的。
五、结论(或总结)
通过本次WiFi定位系统的课程设计,我们了解了WiFi定位的基本原理以及它的实现过程。尽管遇到过很多的问题,但是最终都能够得到解决。同时这也是对个人能力的锻炼,使我们以后能很好的把理论应用于实践。除了个人能力得到很好的锻炼之外,同时我也意识到自己有很多的不足之处,比如编写代码能力还不是那么熟练,好多编程思想不够成熟,希望能够在今后的学习中多多去改善这些不足,努力把自己的编程水平提升上去。同时感谢老师的耐心指导、细心讲解,希望以后的学习中老师能够多多纠正我们学习之中的不足。
第二部分:参考文献
学生签名: 填表日期: 年 月 日
第四部分: 指导教师评语
第五部分:成绩评定
展开阅读全文