[讨论] Gprs基站定位目标物理地址综述

2011-11-7 王健宇 转载

作者:AMK [ESST]
议题组:噩靈戰隊讨论群成员,热议讨论人员:蛆总,小宇。

信息来源:噩靈戰隊[Evil-Soul Security Team] http://bbs.x-xox-x.com/ 转载请注明。

名词释义:
基站定位一般应用于手机用户,手机基站定位服务又叫做移动位置服务(LBS——Location Based Service),它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务,例如目前中国移动动感地带提供的动感位置查询服务等。其大致原理为:移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻)或TDOA(Time Difference of Arrivalm,到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。

技术原理:
移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。

  手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。基于GPS的定位方式是利用手机上的GPS定位模块将自己的位置信号发送到定位后台来实现手机定位的。基站定位则是利用基站对手机的距离的测算距离来确定手机位置的。后者不需要手机具有GPS定位能力,但是精度很大程度依赖于基站的分布及覆盖范围的大小,有时误差会超过一公里。前者定位精度较高。此外还有利用Wifi在小范围内定位的方式。

主要应用:
基站定位主要应用于手机用户、GPS手持端等,像中国移动动感地带提供的动感位置查询服务;谷歌手机地图等各类手机地图软件中的粗略定位;和GPS配合产生的A-GPS等等都是利用基站定位来实现的。

技术要求:

一、覆盖率要求高  一方面要求覆盖的范围足够大。另一方面要求覆盖的范围包括室内。用户大部分时间是在室内使用该功能,从高层建筑和地下设施必须保证覆盖到每个角落。手机定位根据覆盖率的范围,可以分为三种覆盖率的定位服务:在整个本地网、覆盖部分本地网和提供漫游网络服务类型。除了考虑覆盖率外,网络结构和动态变化的环境因素也可能使一个电信运营商无法保证在本地网络或漫游网络中的服务。
二、定位精度要求高  手机定位应该根据用户服务需求的不同提供不同的精度服务,并可以提供给用户选择精度的权利。例如美国FCC推出的定位精度在50米以内的概率为67%,定位精度在150米以内的概率为95%。定位精度一方面与采用的定位技术有关,另外还要取决于提供业务的外部环境,包括无线电传播环境、基站的密度和地理位置、以及定位所用设备等。

典型应用:
家长定位老人、儿童;主要是出于安全和关心的需求;其它用途不必多说大家懂得

企业对车辆的管理;出于GPS成本高以及地下室等无信号的原因,有些物流企业采用了手机GSM定位技术方案。这种方案的成本是GPS的1/3。但受移动基站网络资源的限制,在连续定位方面的成本较高。 企业对员工的管理;能提供对于有多个分部的销售公司,对销售人员上班时间工作的管理。

总结:
原理就是利用基站定位,只需要在手机上安装一个软件就OK了,软件会从基站上面获取数据,而且没有GPS的手机也能用GOOGLE MAP定位,就是因为GOOGLE MAP里面有一个模块,获取基站的数据去分析得出坐标信息。

整合此板块中:

浅谈定位手机QQ物理地址思路,写出以下原理分析和报告,

一般来说连GPRS都不用开,只需要GSM数据就可以了,只需要3个基站 就可以大体知道你的位置,基站越多定位越准确,农村一般是大功率发射器,基站比较少,但是功率大,所以没那么精确,城市里面都是小功率 分布很密集。一般GSM基站会发射它所在的坐标信息和标准时间,根据手机接收到不同基站的时间算出时间差,得到手机到不同基站的距离,然后以各基站为圆心,以这个时间算出来的距离做半径,画圆,相交区域就是你手机所在的位置。
下面是一个转载的安卓基站定位示例源码
package cn.MyAndroid.Test;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import org.json.JSONArray;

import org.json.JSONObject;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.telephony.TelephonyManager;

import android.telephony.gsm.GsmCellLocation;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

public class MyLocation extends Activity {

TextView mTextView;

Button mButton;

TelephonyManager tm;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mTextView = (TextView) findViewById(R.id.TextView01);

mButton = (Button) findViewById(R.id.Button01);

tm = (TelephonyManager) this

.getSystemService(Context.TELEPHONY_SERVICE);

mButton.setOnClickListener(new Button.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

GsmCellLocation gcl = (GsmCellLocation) tm.getCellLocation();

int cid = gcl.getCid();

int lac = gcl.getLac();

int mcc = Integer.valueOf(tm.getNetworkOperator().substring(0,

3));

int mnc = Integer.valueOf(tm.getNetworkOperator().substring(3,

5));

try {

//组装JSON查询字符串

JSONObject holder = new JSONObject();

holder.put("version", "1.1.0");

holder.put("host", "maps.google.com");

// holder.put("address_language", "zh_CN");

holder.put("request_address", true);

JSONArray array = new JSONArray();

JSONObject data = new JSONObject();

data.put("cell_id", cid); // 25070

data.put("location_area_code", lac);// 4474

data.put("mobile_country_code", mcc);// 460

data.put("mobile_network_code", mnc);// 0

array.put(data);

holder.put("cell_towers", array);

// 创建连接,发送请求并接受回应

DefaultHttpClient client = new DefaultHttpClient();

HttpPost post = new HttpPost(

"
http://www.google.com/loc/json");

StringEntity se = new StringEntity(holder.toString());

post.setEntity(se);

HttpResponse resp = client.execute(post);

HttpEntity entity = resp.getEntity();

BufferedReader br = new BufferedReader(

new InputStreamReader(entity.getContent()));

StringBuffer sb = new StringBuffer();

String result = br.readLine();

while (result != null) {

sb.append(result);

result = br.readLine();

}

mTextView.setText(sb.toString());

} catch (Exception e) {

// TODO: handle exception

}

}

});

}

}

注意要给Activity加入以下权限:<uses-permission android:name="android.permission.PERMISSION_NAME" />
< uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
< uses-permission android:name="android.permission.READ_PHONE_STATE" />
< uses-permission android:name="android.permission.INTERNET" />
关于基站查询协议的话,请参考这个链接:
http://code.google.com/intl/zh-CN/apis/gears/geolocation_network_protocol.html
听说如果再加一个获取手机号码的功能和一个向外发送的功能,你就做好了一个定位间谍软件,用途你懂得。
上述文字为今晚噩靈戰隊讨论群里主要议题,欢迎朋友们的参与和指正。

标签: 基站定位目标物理地址

发表评论:

Powered by emlog sitemap