基于百度地图API的无线定位
发布时间:2016-05-21 21:21:41
发布时间:2016-05-21 21:21:41
江南大学物联网工程学院
无线传输与定位实验报告Ⅱ
班级 物联网 1303班
姓名 王俊国
学号 1030613333
日期 2016.04
基于WiFi的无线定位应用
一、开发环境
vs2010
二、应用背景及意义
随着科学技术的高速发展和人们生活水平品质的不断提高,定位服务将成为IT业务范围内的重要组成部分之一。近年来,定位服务市场发展迅速,定位服务的需求量也呈现飞速发展的趋势,定位技术的不断发展将会给诸多领域带来便捷。
无线通信的高速发展使得社交网络得到了很多年轻人的青睐,定位技术的发展也将给社交网络注入新鲜的活力。在广告服务领域,移动用户的具体位置一旦得到确定,将会给相应周边地区的商家带来巨大的经济效益,商家可以给自己周边的用户发送本商店的广告信息,吸引更多的顾客。同时,定位技术的发展还可以使得一些公共安全服务更加完善,比如帮助寻找遗落的物品、被盗的自行车、帮助家长寻找走失的孩子和宠物等。此外,定位技术还可以为大型制造厂家提供商品生产流程中的各产品部件的位置信息、旅客在陌生地方的旅游信息查询、大型商场超市内的具体商品位置信息服务、车辆在大型停车场内寻找空闲车位信息等许多服务。甚至博物馆、校园、大型娱乐场所都可以提供类似的基于位置信息的服务,给用户带来便捷。
而对于通信运营商来说,定位技术的发展也将给切换计费服务提供更详细的计费标准,运营商根据得到用户的地理位置,提供相应的网络接入方式和接入速率,并以此为依据进行计费。同时通过对实际目标的位置进行估计,通过大量的数据可以为移动网络设计和资源优化配置提供可靠依据,例如哪里需要增加基站,哪里需要增加基站的容量,提高基站服务覆盖率的同时提高频谱利用效率,很大程度上节省无线通信资源,提高服务质量。
物联网,同样作为新一代信息技术的重要组成部分,其含义是“物物相连的互联网”,显而易见,它会将各种物品通过物联网连接互联网,按照约定好的协议,达到信息交换和通信连接的目的,进行信息交换和通信,以实现家电智能化、定位信息交换、物品及人、动物的跟踪、安全监控和物品管理的一种网络。定位技术的发展也会为物联网诸多应用提供帮助,让物联网深入到我们生活的每一部分。
在军事通信方面,定位技术运用的领域也十分广泛。在步兵和炮兵侦察中,主要通过轻型便携式脉冲激光测距仪和红外目标指示器等,对前沿阵地和空中目标进行侦察,并通过电磁波通信系统向后方指挥所传送目标的位置信息对空火炮导弹防御,在有效的火力杀伤范围内,对空中高速运动的目标进行跟踪,进而判断目标的威胁等级,并采取相应的防御措施消除目标的威胁。
WIFI技术已被广泛应用于各个领域,WIFI网络的接入点遍布于大型商厦、如啡馆、学校、大型医院、公交站、地铁站等场所。通过WIFI技术来进行定位,可以弥补GPS(全球卫星定位系统)在高层建筑较多或者室内障碍物较多的限制,李广大定位服务的应用行业和领域的同时,在提高定位精准度的同时,提高现有WIFI网络的利用率,此外也能降低定位所需的部署成本,增强对突发事件的救援能力,具有重要的社会意义。
三、WiFi定位的框架结构
IEEE 802.11主要规定了两种不同类型的基本架构:有基础架构的无线局域网络 (Infrastructure Wireless LAN) 和无基础架构的无线局域网络 (Ad Hoc Wireless LAN) 。在Wi-Fi定位中常用的架构是有基础架构:
四、WiFi定位的流程
(1)首先通过编写程序用来获取该移动设备周边的WiFi的物理地址;
(2)提取WiFi的物理地址并进行相应的解析;
(3)通过使用了NativeWiFi,可以获取到当前WiFi信号的RSSI值,并将其记录便可连续采集当前网卡所采集到所有WiFi信号的RSSI;
(4)添加MAP.html文件将采集到的信息加载到百度地图。
五、系统设计
1、界面设计
2、程序实现
(1)调用百度地图API中的地图快速生成工具,复制代码,并保存成html文件。代码如下:
地图生成工具基于百度地图JS api v2.0版本开发,使用请申请密匙。
//创建和初始化地图函数:
functioninitMap(){
createMap();//创建地图
setMapEvent();//设置地图事件
addMapControl();//向地图添加控件
addMapOverlay();//向地图添加覆盖物
}
functioncreateMap(){
map = new BMap.Map("map");
map.centerAndZoom(new BMap.Point(116.403874,39.914889),12);
}
functionsetMapEvent(){
map.enableScrollWheelZoom();
map.enableKeyboard();
map.enableDragging();
map.enableDoubleClickZoom()
}
functionaddClickHandler(target,window){
target.addEventListener("click",function(){
target.openInfoWindow(window);
});
}
functionaddMapOverlay(){
}
//向地图添加控件
functionaddMapControl(){
varscaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT});
scaleControl.setUnit(BMAP_UNIT_IMPERIAL);
map.addControl(scaleControl);
varnavControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE});
map.addControl(navControl);
varoverviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true});
map.addControl(overviewControl);
}
var map;
initMap();
完成上述操作之后选中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的百度地图。
(2)、下载ManagedWiFi,加入到工程中并添加引用,并申请命名空间为:using NativeWifi;获取WIFI的名称以及MAC地址,代码如下:
Privatevoidbutton3_Click(object sender, EventArgs e)
{ WlanClient client = newWlanClient();
foreach (WlanClient.WlanInterfacewlanIfacein client.Interfaces) { Wlan.WlanBssEntry[] WBE = wlanIface.GetNetworkBssList();
for (inti = 0; 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 (inti = 0; i < 3; i++)
{ STR[i] = newinfo(GetStringForMACAddress(WBE[i].dot11Bssid),
WBE[i].rssi.ToString());
}
foreach (Wlan.WlanBssEntrysub_wbe in WBE)
{ string SSID = GetStringForSSID(sub_wbe.dot11Ssid);
string MAC = GetStringForMACAddress(sub_wbe.dot11Bssid);
string RSSI = sub_wbe.rssi.ToString();
stringLinkQuality=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();
}
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)解析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();
num2++;
}
return string.Join(":", array);
}
private string GetStringForSSID(Wlan.Dot11Ssid ssid)
{
return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);
}
(4)将解析的数据定位到百度地图
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");
六、设计体会
随着科技的不断进步,无线城市概念的进一步深化,WIFI技术将成为人们生活中必不可少的技术,同时随着社交网络的发展,定位技术也与人们的业余生活息息相关。基于WIFI技术的无线定位技术将深入到我们生活的每一个角落,对于无线城市的发展也有着重要的意义。
该基于接收信号强度的二次定位方法虽已在仿真环境以及实际的环境中得到了验证,但是还存在着许多不足。对于如何消除各个AP节点的硬件差异性还是一个比较难以解决的问题,各AP节点天线的发射增益以及接收增益,同时硬件老化对定位结果带来的误差也会比较大。同时,在实际测量过程中,天线的方向性也对定位结果产生一定的影响。这些问题都是我们研究人员在后续过程中急需解决的问题。