现在知道用CELL ID的到GOOGLE MAP上定位的方法
但是具体从那个通信模块获取呢(指的是硬件)? 试问如果只用1个GSM模块+SIM是否可以得到CELL ID?
又如何获取CELL ID呢? 只要求获取到CELL ID相关信息就够了
------解决方案--------------------
1、首先 获取服务 telephonyManager =(TelephonyManager) getSystemService(TELEPHONY_SERVICE);
2、注册监听器 telephonyManager.listen(celllistener, PhoneStateListener.LISTEN_CELL_LOCATION); // 基站位置的变化
3、编写监听代码
public PhoneStateListener celllistener = new PhoneStateListener() {
@Override
public void onCellLocationChanged(CellLocation location) {
super.onCellLocationChanged(location);
// 判断 location的类型 是GsmCellLocation 还是 CdmaCellLocation
// 最后 根据你的业务 需求 实现你的代码
}
};
------解决方案--------------------
Cell ID,即无线网络上报终端所处的小区号(根据服务的基站来估计),位置业务平台把小区号翻译成经纬度坐标。这种方法实现简单,无需在无线接入网侧增加设备,对网络结构改动小,缺点是定位精度低,在市区一般可以达到300-500m,郊区几公里。小区号将在如下场景下获得: 1、小区路由寻呼 2、定位区域更新 3、小区更新 4、URA更新 5、路由区更新
小区覆盖信息可以用Cell ID 、服务小区ID或服务小区的地理坐标来标识。UE的估计位置可以是服务小区的固定位置(如基站的位置)、服务小区覆盖区域的其它固定位置。地理坐标可以联合其它信息得到,如FDD的往返时间直RTT或TDD的Rx时间偏差或UE提前时间,不过该增强的技术我们在另一章中描述。
Cell ID定位涉及的网元包括:定位应用、定位网关(3GPP为GMLC,3GPP2为MPC)、MSC、HLR、SRNC(包括SAS)、NodeB、UE。我们把最典型的流程说明一下:
1) 用户U1发起请求到应用上,应用将此请求发送GMLC,由GMLC对应用进行鉴权;应用鉴权通过后,GMLC上对发起定位用户A1进行鉴权;鉴权通过后,GMLC对目标用户U2鉴权,检查U2的隐私权限。
2) 如果目标用户U2允许定位,GMLC向U2归属的HLR请求目标用户的拜访地信息;
3) HLR将U2当前的拜访地信息给GMLC;
4) GMLC根据拜访地信息,向MSC/SGSN发送定位请求,请求对用户U2进行定位;
5) MSC/SGSN对用户A2定位。如果必要的话,MSC/SGSN可以向终端U2发起寻呼来更新所处的小区。
6) 定位结束后,MSC/SGSN向GMLC返回用户U2的位置信息;
7) GMLC再向应用返回用户A2的位置信息,应用利用这个信息,结合GIS向用户U1报告请求的地理位置信息。
Cell ID定位应用的实现有三种方式,包括基于网络的方式和基于终端的方式:
1 基于网络方式1:GSM03.71协议的方式;
2 基于网络方式2:采用MAP ATI信令,遵循3GPP TS 09.02;
3 基于终端STK方式。
一是目标UE没有处于软切换状态,此时只有一个Cell与UE有连接,可以直接获得该CELL的ID;另一种情况是UE处于软切换状态,可能有多个Cell与UE有连接,此时需要根据一定的准则来选择其中的一个Cell。例如:根据接收到的小区的信号质量,选择离UE最近的基站控制下的小区等。 Cell ID的定位精度和小区的半径有关。在密集城区且有200米以上的距离,在偏远郊区和农村、公路空旷处,小区半径甚至在1公里以上,这样的定位精度很少能有实际的定位作用。Cell ID给我们提供了一个以基站为圆心、以小区半径为半径的圆形区域。而如何结合一些增强的技术,则可以提供更为精准的定位精度。 在FDD模式下为RTT技术;在TDD模式下,则可以结合时间提前、时间偏移和到达方向角提供。
------解决方案--------------------
android 有提供的接口,用GsmCellLocation() 的getCid()即可得到Cell ID,CDMACellLocation()也类似
你想用Radio Interface Layer的方式,估计需要从协议的底层中提取