快捷搜索:

Android基站定位之实现三基站(多基站)定位

这一篇基于:Android基站定位之实现单基站定位

阐述几个观点:

基站:类似于WIFI热点,官方解释,移动通信系统中,连接固定部分与无线部分,并经由过程空中的无线传输与移动台相连的设备。基站即公用移动通信基站是无线电台站的一种形式,是指在必然的无线电覆盖区中,经由过程移动通信互换中间,与移动电话终端之间进行信息通报的无线电收发信电台。

单基站定位是指:经由过程手机获取当前连接到的基站信息,来确定用户的大年夜概位置(用户可能在某个基站(手机当前连接的基站)发出的无线电覆盖区域中)。

三基站或多基站:经由过程手机获取相近区域的基站信息(不是用户当前连接的基站,获得的是一组基站信息),来确定用户的大年夜概位置。

获取邻区基站信息:

// 获取邻区基站信息

List infos = mTelephonyManager.getNeighboringCellInfo();StringBuffer sb = new StringBuffer("总数 : " + infos.size() + "\n");

for (NeighboringCellInfo info1 : infos) { // 根据邻区总数进行轮回sb.append(" LAC : " + info1.getLac()); // 掏出当前邻区的LAC

sb.append(" CID : " + info1.getCid()); // 掏出当前邻区的CIDsb.append(" BSSS : " + (-113 + 2 * info1.getRssi()) + "\n"); // 获取邻区基站旌旗灯号强度

}

注:中国联通的基础上获取不到相近的基站,我测的时刻应用的是中国移动。

一、探索:

1、我猜想哀求参数的Json是这样组装的:

JSONObject json = new JSONObject();

json.put("version", "1.1.0");json.put("host", "maps.google.com");

json.put("location_area_code", "6338");json.put("mobile_country_code", "460");

json.put("mobile_network_code", "0");json.put("age", 0);

JSONArray array = new JSONArray();

JSONObject json1 = new JSONObject();json1.put("cell_id", "62291");

json1.put("signal_strength", -95);array.put(json1);

JSONObject json2 = new JSONObject();

json2.put("cell_id", "62290");json2.put("signal_strength", -101);

array.put(json2);

json.put("cell_towers", array);

2、组拼好的JSON字符串:

{

"mobile_network_code":"0","location_area_code":"6338",

"host":"maps.google.com","cell_towers":

[{

"signal_strength":-95,"cell_id":"62291"

},{

"signal_strength":-101,"cell_id":"62290"

}],

"age":0,"mobile_country_code":"460",

"version":"1.1.0"}

3、经由过程HTTP哀求返回的JSON形式结果:

{

"location":{

"latitude":"0.0","longitude":"0.0",

"address":{

"city":"基站信息不存在,请从手机上读取精确的基站信息。","country":"",

"country_code":"","county":"",

"postal_code":"","region":"",

"street":"","street_number":""

}},

"access_token":"dummytoken"}

二、可行的要领:

1、经由过程单个相近的基站信息定位:

组装参数:

/**

* 获取JSON形式的基站信息* @param mcc 移动国家代码(中国的为460)

* @param mnc 移动收集号码(中国移动为0,中国联通为1,中国电信为2);* @param lac 位置区域码

* @param cid 基站编号* @param bsss 基站旌旗灯号强度

* @return json* @throws JSONException

*/private String getJsonCellPos(int mcc, int mnc, int lac, int cid, int bsss) throws JSONException {

JSONObject jsonCellPos = new JSONObject();jsonCellPos.put("version", "1.1.0");

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

JSONArray array = new JSONArray();JSONObject json1 = new JSONObject();

json1.put("location_area_code", "" + lac + "");json1.put("mobile_country_code", "" + mcc + "");

json1.put("mobile_network_code", "" + mnc + "");json1.put("age", 0);

json1.put("cell_id", "" + cid + "");json1.put("signal_strength", bsss);

array.put(json1);

jsonCellPos.put("cell_towers", array);return jsonCellPos.toString();

}

哀求的JSON字符串:

{

"cell_towers":[

{"mobile_network_code":"0",

"location_area_code":"6338","cell_id":"62291",

"signal_strength":-95,"age":0,

"mobile_country_code":"460"}

],"host":"maps.google.com",

"version":"1.1.0"}

返回JSON形式结果:

{

"location":{

"latitude":"31.214667405","longitude":"121.59903152499999",

"address":{

"city":"上海市浦东新区郭守敬路;上海奥威科技开拓公司、科威国际技巧转移中间公司、张江高科技园区热力中间[相近]","country":"",

"country_code":"","county":"",

"postal_code":"","region":"",

"street":"","street_number":""

}},

"access_token":"dummytoken"}

2、经由过程多个相近的基站信息定位:

又一次猜想:

哀求JSON:

{

"cell_towers":[

{"mobile_network_code":"0",

"location_area_code":"6338","cell_id":"62291",

"signal_strength":-95,"age":0,

"mobile_country_code":"460"},

{"mobile_network_code":"0",

"location_area_code":"6338","cell_id":"62290",

"signal_strength":-101,"age":1,

"mobile_country_code":"460"}

],"host":"maps.google.com",

"version":"1.1.0"}

返回JSON:

{

"location":{

"latitude":"31.21485922285714","longitude":"121.59990774285711",

"address":{

"city":"上海市浦东新区郭守敬路276号;上海奥威科技开拓公司、科威国际技巧转移中间公司、张江高科技园区热力中间[相近]","country":"",

"country_code":"","county":"",

"postal_code":"","region":"",

"street":"","street_number":""

}},

"access_token":"dummytoken"}

结论:第三方办事器端可能有限定,每次只吸收JSONArray中的第一个元素。假如要想一次性查找相近多个基站的经纬度及所在的地址,就只能编写for轮回,一次一次的造访第三方的办事器。

3、小我不雅点:所谓的三点定位或多点定位,只是让想知道用户当前位置的人多了一个选择而已。三点定位获得的是三个点,并非是一个对照准确的点。

三、测试网址:http://www.minigps.net/map3.html

转自:http://blog.csdn.net/android_ls/article/details/8673532

您可能还会对下面的文章感兴趣: