Location-Based Services Using CellID in Android

Location-Based Services Using CellID in Android
              ---"基于基站CellID信息的定位"

顾名思义,就是没有GPS功能,通过GPRS或者3G数据业务来基站信息的定位。手机端可以通过接口获取到CellID,然后给Google的数据库发送POST消息,就可以获取基站的经度、纬度,然后结合地图查找到方位。
此外,在此基础上可以扩展实现出各种手机定位应用
(比如说,给丢失的手机发个短信,可以随时知道丢失手机的大致方位。给喜欢搞外遇的老公发个短信就可以知道此时此刻他在哪里“办公”等等,当然这可能已经涉及到法律的底线)

代码实现
1、Obtaining the Cell ID and LAC

第一步,获取Cell ID和LAC
"
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
location = (GsmCellLocation) tm.getCellLocation();

cellID = location.getCid();
lac = location.getLac();
"

2、Obtaining the Latitude and Longitude using the Google Maps API
第二步,通过Google Maps的API来获取经度和纬度
"
//---open a connection to Google Maps API---
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) conn;        
httpConn.setRequestMethod("POST");
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.connect();

//---write some custom data to Google Maps API---
OutputStream outputStream = httpConn.getOutputStream();
WriteData(outputStream, cellID, lac);
  
//---get the response---
InputStream inputStream = httpConn.getInputStream();  
DataInputStream dataInputStream = new DataInputStream(inputStream);
"

3、Testing the Application
第三步,测试应用
应用截图(该应用下载在本文最下面)
1、打开应用,按下Button

2、选择地图(打开gprs功能)

3、搜索LBS

4、定位,和GPS定位精度差不多,可能是周围基站比较密集


附录-网上讨论基站定位的各种方法:
(1)COO(Cell of origin)定位

COO定位是一种单基站定位,即根据设备当前连接的蜂窝基站的位置来确定设备的位置。那么很显然,定位的精度就取决于蜂窝小区的半径。在基站密集的城市中心地区,通常会采用多层小区,小区划分的很小,这时定位精度可以达到50M以内;而在其他地区,可能基站分布相对分散,小区半径较大,可能达到几千米,也就意味着定位精度只能粗略到几千米。目前Google地图移动版中,通过蜂窝基站确定“我的位置”,基本上用的就是这种方法。

从原理上我们可以看出,COO定位其精度是不太确定的。但是这却是GSM网络中的移动设备最快捷、最方便的定位方法,因为GSM网络端以及设备端都不需要任何的额外硬件投入。只要运营商支持,GSM网络中的设备都可以以编程方式获取到当前基站的一个唯一代码,我们可以称之为基站ID,或CellID。在一般的设备中,可能都存在一个类似如下的GetCurrentCellID()方法的接口来提供当前GSM蜂窝基站ID:

CellID = GetCurrentCellID();通过这个接口获取到CellID后,我们还需要根据这个CellID查出该蜂窝基站所在的具体地理坐标。这时,我们可能就需要调用一些包含[CellID,地理坐标]对应关系的外部数据以确定相应的地理坐标。这个外部数据,通常可以由一些第三方Web服务来提供。这些Web服务的接口可能类似于如下形式:

Position=GetPosition(CellID);当然,再次说明,上面的GetCurrentCellID方法、GetPosition方法都是我虚构的,只是为了说明逻辑关系,并不一定实际存在。

(2)七号信令定位
该技术以信令监测为基础,能够对移动通信网中特定的信令过程,如漫游、切换以及与电路相关的信令过程进行过滤和分析,并将监测结果提供给业务中心,以实现对特定用户的个性化服务。该项技术通过对信令进行实时监测,可定位到一个小区,也可定位到地区。故适用对定位精确度要求不高的业务,如漫游用户问候服务,远程设计服务、平安报信和货物跟踪等。目前,国内各省和地区移动公司的短信欢迎系统采用的就是此种技术。

(3)TOA/TDOA定位
TOA(Time of Arrival,到达时间)、TDOA(Time Difference of Arrival,到达时间差)都是基于电波传播时间的定位方法。同时也都是三基站定位方法,二者的定位都需要同时有三个位置已知的基站合作才能进行。


如上图所示,TOA/DTOA定位方法都是通过三对[Positioni,Ti](i=1,2,3)来确定设备的位置Location。二者的不同只是GetLocation()函数的具体算法上的不同。

TOA电波到达时间定位基本原理是得到Ti(i=1,2,3)后,由Ti*c得到设备到基站i之间的距离Ri,然后根据几何只是建立方程组并求解,从而求得Location值。如下图所示。


由于图中距离的计算完全依赖于时间,因此TOA算法对系统的时间同步要求很高,任何很小的时间误差都会被放大很多倍,同时由于多径效应的影响又会带来很大的误差,因而单纯的TOA在实际中应用很少。

DTOA电波到达时间差定位是对TOA定位的改进,与TOA的不同之处在于,得到Ti后不是立即用Ti去求距离Ri,而是先对T1,T2,T3两两求差,然后通过一些巧妙的数学算法建立方程组并求解,从而得到Location值。如下图所示。


DTOA由于其中巧妙设计的求差过程会抵消其中很大一部分的时间误差和多径效应带来的误差,因而可以大大提高定位的精确度。

由于DTOA对网络要求相对较低,并且精度较高,因而目前已经成为研究的热点。

(4)AOA定位
AOA(Angle of Arrival,到达角度)定位是一种两基站定位方法,基于信号的入射角度进行定位。


如上图所示,知道了基站1到设备之间连线与基准方向的夹角α1,就可以画出一条射线L1;同样知道了知道了基站2到设备之间连线与基准方向的夹角α2,就可以画出一条射线L2。那么L1月L2的交点就是设备的位置。这就是AOA定位的基本数学原理。用函数调用表达如下。

Location=GetLocation([Pisition1,α1],[Position2,α2]);AOA定位通过两直线相交确定位置,不可能有多个交点,避免了定位的模糊性。但是为了测量电磁波的入射角度,接收机必须配备方向性强的天线阵列。

(5)基于场强的定位
该方法是通过测出接收到的信号场强和已知的信道衰落模型及发射信号的场强值估计收发信短的距离,根据多个三个距离值就可以得到设备的位置。从数学模型上看,和TOA算法类似,只是获取距离的方式不同。场强算法虽然简单,但是由于多径效应的影响,定位精度较差。

(6)混合定位
混合定位就是同时使用两种以上的定位方法来进行定位。通过各种定位方法之间结合使用,互补短长,以达到更高的定位精度。

A-GPS定位(辅助GPS定位)就是一种混合定位,是GPS定位技术与GSM网络的结合。A-GPS具有很高的定位精度,目前正被越来越广泛的使用。

GPS定位作为一种传统的定位方法,仍是目前应用最广泛、定位精度最高的定位技术。但是相对而言,GPS定位成本高(需要终端配备GPS硬件)、定位慢(GPS硬件初始化通常需要3~5分钟甚至10分钟以上的时间)、耗电多(需要额外硬件自然耗电多),因此在一些定位精度要求不高,但是定位速度要求较高的场景下,并不是特别适合;同时因为GPS卫星信号穿透能力弱,因此在室内无法使用(关于GPS的定位原理可参考GPS定位基本原理浅析)。相比之下,GSM蜂窝基站定位快速、省电、低成本、应用范围限制小,因此在一些精度要求不高的轻型场景下,也大有用武之地。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值