资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
发表于:2012-12-10 评论:0 条 分类:基站定位 基站数据 手机定位 导读:利用 google 数据在手机上实现基站定位 定位技术有两种,一种是基于 GPS 的定 位,一种是基于移动运营网的基站的定位。 基于移动运营网手机基站定位服务又叫做移动 位置服务(LBSLocation Based Service ) ,它是通过电信移动运营商的网络(如 GSM 网)获取移动终端. 利用 google 数据在手机上实现基站定位 定位技术有两种,一种是基于 GPS 的定位,一种是基于移动运营网的基站的定位。 基于移动运营网手机基站定位服务又叫做移动位置服务(LBSLocation Based Service ) ,它是通过电信移动运营商的网络(如 GSM 网)获取移动终端用户的位置信息 (经纬度坐标) ,在电子地图平台的支持下,为用户提供相应服务的一种增值业务1, 在手机上不需要增加任何功能,向运营商开通相关服务就可以实现。 本文所说的基站定位,是采用 google 的数据,在功能手机上实现的定位功能(另 一种方法是:内置基站位置信息,然后查询。这需要购买第三方的数据库,并且由于运营 商的网络优化,数据会变得不准确。当然,在智能手机的实现那就更简单了) 。这方面的 文章网上也有不少,大多偏向于理论,将它转化成代码,还是有些内容需要自己恩考。 本文尽量将自己实现代码的过程及注意点写下来,目的是:看了本文,就知道该如何 写代码了(如果还看不懂,就先查看网上原理性的东东,呵呵) 。 其基本原理是:1、调用手机协议栈函数,获取当前服务小区和邻近小区的 CellID, mnc,mcc,lac,rssi 值,至少需要要 3 组。2、通过手机的 HTTP 协议,将上述小区信 息传到 Google Gelocation Server 获取相对应小区的经纬度。3、根据无线电传播路径损 耗理论公式,将 RSSI 值转化成相对应的距离。4、运用三角形质心算法,采用 3 组小区 的 坐标信息和距离,得出手机当前的位置信息。下面具体描述实现过程。 一、获取服务小区和邻近小区的相关信息。由于手机平台的不同,调用的协议栈函数不 同。但必须获得以下的数据:小区 ID 号:CellID,移动网络号码(用于识别移动客户所 属的移动网络):mnc;移动国家号码(用于唯一地标识移动客户属于的国家):mcc;位 置区码(用于标识不同的位置区):lac;接收的信号强度指示:RSSI。根据三角形算法的 需 要,至少要 3 组小区信息。在展讯平台中,一般情况下能够获得 6 组小区信息,这给挑 选可 信任度较高的数据,提供了便利。 二、通过手机的 HTTP 协议,将上述小区信息传到 Google Gelocation Server 获取相 对应小区的经纬度。获取位置信息时,必须遵照网络位置提供者协议(Network Location Provider Protocol),详细的协议在 google 的网站上做了说明。其要点有: 1、使用 HTTP POST,请求和响应的格式都是 JSON ,请求的内容示例如下: 1 / 6 Page 2 利用 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 Page 3 利用 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”: “Amphibian Walkway”, “postal_code”: “94043, “city”: “Mountain View”, “county”: “Mountain View County”, “region”: “California”, “country”: “United States of America”, “country_code”: “US” 2 如果请求的数据格式不正确,服务器返回 HTTP 的状态为 400,并在响应的文本中 有详细描述。如果请求的数据格式正确,服务器返回 HTTP 的状态为 200。如果定位成 功,就有返回经纬度信息;如果定位不成功,经纬度信息就为空。 2、POST 时,URL 地址是:http:/www.google.com/loc/json。 3、HTTP 发送时,对应的 IP 就是解析 www.google.com 得到的“74.125.71.105”,端口: 80 4、将上述请求的数据组织成 HTTP 数据包格式,才能发送成功。如果手机软件本身已 经集成了 HTTP 协议的相关代码,这一步就省了。由于是在展讯 modem 版本的软件上实 现 此功能,HTTP 协议没有被集成,因此必须自己组织 HTTP 数据包。HTTP 数据包包含以 下几 个字段: “POST /loc/json HTTP/1.1 “Host:www.google.com” “ContentType: application/requestJson” “User Agent: user name” 3 / 6 Page 4 利用 google 数据在手机上实现基站定位 “ContentLength: ” + 内容的长度 每个字段间都要加上回车换行符,实际内容与上述字段间要加 2 个回车换行符。这些数 据组织完成,再调用 socket API 发送出去就行了。 三、根据无线电传播路径损耗理论公式,将 RSSI 值转化成相对应的距离。自由空间 无线电传播路径损耗模型为:式中,d 为距信源的距离,单位为 km;f 为频率,单位为 MHz;k 为路径衰减因子,范 围在 25 之间。对数一常态分布模型,其路径损耗的计算公式为: 式中,X 是平均值为 O 的高斯分布随机变数,其标准差范围为 410;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.9m4。 我们 知道,地球的半径大概是 6378.137 公里,那么经度与距离的关系如下式进行换算: 经度 1 度 = 2*pi *6378.137*cos(当前的四、计算前的单位转换。 由于经纬度信息单位度与根据 RSSI 算出的距离公里,是不同的单位,不能直接计算, 必须转换成统一的单位。方法是:找出离目标最近的一点作为参考点(原点) ,其它点参考 原点换算出相对的经纬度差值,再将该差值根据刻度与实际距离的关系,换算成公里数, 就 得到其它点相对原点的坐标值,单位也统一成公里。地球的子午线总长度大约 40008km, 平 均:纬度 1 度 = 大约 111km,纬度 1 分 = 大约 1.85km,纬度 1 秒 = 大约 30.9m4。 我们 知道,地球的半径大概是 6378.137 公里,那么经度与距离的关系如下式进行换算: 经度 1 度 = 2*pi *6378.137*cos(当前的纬度) km 五、找出可信度相对较高的三组数据。 由于距离越远,根据 RSSI 算出的距离误会越大,我们认为可信度较高的数据就是距离 最小的数据。据此,选出距离最小的三组数据作为下面三角形质心算法的数据。 六、运用三角形质心算法,得出手机当前的位置信息。三角形质心定位算法的基本思想 4 / 6 Page 5 利用 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*Yb 2: 2(Xb-Xc)Xe+2(Yb-Yc)Ye=rc*rc-rb*rb-Xc*Xc+Xb*Xb-Yc*Yc+Yb*Yb 3: 2(Xa-Xc)Xe+2(Ya-Yc)Ye=rc*rc-ra*ra-Xc*Xc+Xa*Xa-Yc*Yc+Ya*Ya 根据上面算出的未知点的坐标是相对于原点的公里数,先将公里数转化成经纬度,然后再 与原点的经纬度相加,就得到了手机的位置信息。 基于 GPS 的定位方式是利用手机上的 GPS 定
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号