定位

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

发表于:2012-12-10评论:0条分类:基站定位基站数据手机定位导读:利用google数据在手机上实现基站定位定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于移动运营网手机基站定位服务又叫做移动位置服务(LBS——LocationBasedService),它是通过电信移动运营商的网络(如GSM网)获取移动终端...利用google数据在手机上实现基站定位定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于移动运营网手机基站定位服务又叫做移动位置服务(LBS——LocationBasedService),它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务[1],在手机上不需要增加任何功能,向运营商开通相关服务就可以实现。本文所说的基站定位,是采用google的数据,在功能手机上实现的定位功能(另一种方法是:内置基站位置信息,然后查询。这需要购买第三方的数据库,并且由于运营商的网络优化,数据会变得不准确。当然,在智能手机的实现那就更简单了)。这方面的文章网上也有不少,大多偏向于理论,将它转化成代码,还是有些内容需要自己恩考。本文尽量将自己实现代码的过程及注意点写下来,目的是:看了本文,就知道该如何写代码了(如果还看不懂,就先查看网上原理性的东东,呵呵)。其基本原理是:1、调用手机协议栈函数,获取当前服务小区和邻近小区的CellID,mnc,mcc,lac,rssi值,至少需要要3组。2、通过手机的HTTP协议,将上述小区信息传到GoogleGelocationServer获取相对应小区的经纬度。3、根据无线电传播路径损耗理论公式,将RSSI值转化成相对应的距离。4、运用三角形质心算法,采用3组小区的坐标信息和距离,得出手机当前的位置信息。下面具体描述实现过程。一、获取服务小区和邻近小区的相关信息。由于手机平台的不同,调用的协议栈函数不同。但必须获得以下的数据:小区ID号:CellID,移动网络号码(用于识别移动客户所属的移动网络):mnc;移动国家号码(用于唯一地标识移动客户属于的国家):mcc;位置区码(用于标识不同的位置区):lac;接收的信号强度指示:RSSI。根据三角形算法的需要,至少要3组小区信息。在展讯平台中,一般情况下能够获得6组小区信息,这给挑选可信任度较高的数据,提供了便利。二、通过手机的HTTP协议,将上述小区信息传到GoogleGelocationServer获取相对应小区的经纬度。获取位置信息时,必须遵照网络位置提供者协议(NetworkLocationProviderProtocol),详细的协议在google的网站上做了说明。其要点有:1、使用HTTPPOST,请求和响应的格式都是JSON,请求的内容示例如下:1/6———————–Page2———————–利用google数据在手机上实现基站定位{“version”:“1.1.0″,“host”:“maps.google.com”,“home_mobile_country_code”:310,“home_mobile_network_code”:410,“radio_type”:“gsm”,“carrier”:“Vodafone”,“request_address”:true,“address_language”:“en_GB”,“location”:{“latitude”:51.0,“longitude”:-0.1},“cell_towers”:[{cell_id:42,location_area_code:415,mobile_country_code:310,mobile_network_code:410,age:0,signal_strength:-60,timing_advance:5555},{cell_id:88,location_area_code:415,mobile_country_code:310,mobile_network_code:580,age:0,signal_strength:-70,timing_advance:7777}],“wifi_towers”:[{mac_address:01-23-45-67-89-ab,signal_strength:8,age:0},{mac_address:01-23-45-67-89-ac,signal_strength:4,age:0}[2]2/6———————–Page3———————–利用google数据在手机上实现基站定位]}其中,”version”和”host”字段是必须有的,当然,里面要求的信息尽可能全面提供。响应的示例如下:{“location”:{“latitude”:51.0,“longitude”:-0.1,“altitude”:30.1,“accuracy”:1200.1,“altitude_accuracy”:10.1,“address”:{“street_number”:“100″,“street”:“AmphibianWalkway”,“postal_code”:“94043″,“city”:“MountainView”,“county”:“MountainViewCounty”,“region”:“California”,“country”:“UnitedStatesofAmerica”,“country_code”:“US”}}}[2]如果请求的数据格式不正确,服务器返回HTTP的状态为400,并在响应的文本中有详细描述。如果请求的数据格式正确,服务器返回HTTP的状态为200。如果定位成功,就有返回经纬度信息;如果定位不成功,经纬度信息就为空。2、POST时,URL地址是:。3、HTTP发送时,对应的IP就是解析得到的“74.125.71.105”,端口:804、将上述请求的数据组织成HTTP数据包格式,才能发送成功。如果手机软件本身已经集成了HTTP协议的相关代码,这一步就省了。由于是在展讯modem版本的软件上实现此功能,HTTP协议没有被集成,因此必须自己组织HTTP数据包。HTTP数据包包含以下几个字段:“POST/loc/jsonHTTP/1.1″“Host:”“Content‐Type:application/requestJson”“UserAgent:username”3/6———————–Page4———————–利用google数据在手机上实现基站定位“Content‐Length:”+内容的长度每个字段间都要加上回车换行符,实际内容与上述字段间要加2个回车换行符。这些数据组织完成,再调用socketAPI发送出去就行了。三、根据无线电传播路径损耗理论公式,将RSSI值转化成相对应的距离。自由空间无线电传播路径损耗模型为:式中,d为距信源的距离,单位为km;f为频率,单位为MHz;k为路径衰减因子,范围在2~5之间。对数一常态分布模型,其路径损耗的计算公式为:式中,Xσ是平均值为O的高斯分布随机变数,其标准差范围为4~10;PL(d0),是式(1)取d=1时,算出的Loss值。根据式(1)和式(2),得出信号强度为:RSSI=发射功率(Pt)+天线增益(Pf)一路径损耗(PL(d))根据上面的理论公式,推算出距离与RSSI的关系公式:D=10^((Pt+Pf-RSSI-PL(d0)-X0)/(10*K))PL(d0)=32.44+10*K*log10(f),根据发射频率算出PL(d0)。令A=Pt+Pf–X0,则A是一常数,距离D的公式变成:D=10^((A-PL(d0))/(10*K))[计算中,K取中间值3]四、计算前的单位转换。由于经纬度信息单位度与根据RSSI算出的距离公里,是不同的单位,不能直接计算,必须转换成统一的单位。方法是:找出离目标最近的一点作为参考点(原点),其它点参考原点换算出相对的经纬度差值,再将该差值根据刻度与实际距离的关系,换算成公里数,就得到其它点相对原点的坐标值,单位也统一成公里。地球的子午线总长度大约40008km,平均:纬度1度=大约111km,纬度1分=大约1.85km,纬度1秒=大约30.9m[4]。我们知道,地球的半径大概是6378.137公里,那么经度与距离的关系如下式进行换算:经度1度=2*pi*6378.137*cos(当前的四、计算前的单位转换。由于经纬度信息单位度与根据RSSI算出的距离公里,是不同的单位,不能直接计算,必须转换成统一的单位。方法是:找出离目标最近的一点作为参考点(原点),其它点参考原点换算出相对的经纬度差值,再将该差值根据刻度与实际距离的关系,换算成公里数,就得到其它点相对原点的坐标值,单位也统一成公里。地球的子午线总长度大约40008km,平均:纬度1度=大约111km,纬度1分=大约1.85km,纬度1秒=大约30.9m[4]。我们知道,地球的半径大概是6378.137公里,那么经度与距离的关系如下式进行换算:经度1度=2*pi*6378.137*cos(当前的纬度)km五、找出可信度相对较高的三组数据。由于距离越远,根据RSSI算出的距离误会越大,我们认为可信度较高的数据就是距离最小的数据。据此,选出距离最小的三组数据作为下面三角形质心算法的数据。六、运用三角形质心算法,得出手机当前的位置信息。三角形质心定位算法的基本思想4/6———————–Page5———————–利用google数据在手机上实现基站定位是:计算三圆交叠区域的3个特征点的坐标,以这三个点为三角形的顶点,未知点即为三角形质心。特征点为E,F,G,特征点E点的计算方法为[3]:同理,可计算出F,G,此时未知点的坐标为。但是二次方程,求解过程计算量较大,将式(3)中的方程式两两相减,则分别得到每条交线的直线方程,特征点E的坐标则可以通过这些直线方程求解,如下三个直线方程式:1:2(Xb-Xa)Xe+2(Yb-Ya)Ye=ra*ra-rb*rb-Xa*Xa+Xb*Xb-Ya*Ya+Yb*Yb2:2(Xb-Xc)Xe+2(Yb-Yc)Ye=rc*rc-rb*rb-Xc*Xc+Xb*Xb-Yc*Yc+Yb*Yb3:2(Xa-Xc)Xe+2(Ya-Yc)Ye=rc*rc-ra*ra-Xc*Xc+Xa*Xa-Yc*Yc+Ya*Ya根据上面算出的未知点的坐标是相对于原点的公里数,先将公里数转化成经纬度,然后再与原点的经纬度相加,就得到了手机的位置信息。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的,精度比较高,在空旷的地方表现优越;而在大厦内部,由于信号微弱,无法实现定位功能。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的,不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小,本文实现的基站定位误差在200m之内,在一定程度上弥补了GPS信号无法覆盖区域的定位缺憾。本帖最后由baidwei于2013-4-2712:37编辑本代码实现GPS定位,并定时在界面上呈现定位的精度以及在用卫星数量。布局代码如下:LinearLayoutxmlns:android=:tools=:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalTextViewandroid:id=@+id/showtvandroid:layout_width=fill_parent

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功