最近有一个客户咨询如何通过基站获取设备的经纬度,所以查了一下相关资料,分享给大家。
基站是运营商(移动,联通,电信)的设备,这些设备的分配的使用是由运营商来管理的,但好在基站的信息有一个行业规则,基站编号有一定的规则。
基站基础知识
基站图片
基站数据
MCC:国家码。如 460 表示中国
MNC:运营商码。0 代表移动 2G,1 代表联通 2G
LAC:位置区码。可以理解为大区
CellID:基站塔编码。可以理解为小区
一般定位是需要以上几个信息的
定位原理
原理有点类似于 md5 密码破解一样,就是有一些同时带有基站定位和 GPS 定位的硬件设备,上传两样数据,这样两样数据就有了关联。
其他用户再根据基站信息查询坐标时,就有了数据可查询。随着这样的数据越来越多,就有了这样的库。
纯粹依赖移动、联通、电信等移动网络定位,定位精度在 500 米-5000 米之间。
GPS 定位结果
通过设备 GPS 定位模块返回的定位结果,精度较高,在 10 米-100 米左右
查询服务
openGPS.cn 网站
https://www.opengps.cn/data/cell/search.aspx
上面有一些基站位置是查询不到的。
基于浏览器定位功能也定位不到,原因不太清楚。
服务端
高德
申请高德账户,认证的企业用户,然后申请才能开通基站定位功能,而且网页没有相关的 API,申请通过后会得到一个 PDF 技术文档。
调用过程需要 key
调用方式 http get 方式
http://apilocate.amap.com/position?accesstype=0&imei=352315052834187&smac=E0:DB:55:E4:C7:49&cdma=1&bts=13824,1,1838,1674723,575739,-52&serverip=10.2.166.4&output=xml&ke y=<用户Key>
返回数据
{
"infocode": "10000",
"result": {
"city": "郑州市",
"province": "河南省",
// 定位附近的 poi 名称-
"poi": "香雪儿面包房(枫杨街店)",
// 区域编码-
"adcode": "410102",
"street": "枫杨街",
"desc": "河南省 郑州市 中原区 枫杨街 靠近香雪儿面包房(枫杨街店)",
"country": "中国",
// 定位类型,0:没有得到定位结果;其他数字为:正常获取定位结果
"type": "4",
// 经纬度 经度longitude 113.5633803 纬度latitude:34.813311
"location": "113.5633803,34.8133111",
"road": "枫杨街",
// 定位精度半径,单位:米
"radius": "550",
"citycode": "0371"
},
"info": "OK",
// 返回状态,值为 0 或 1,0 代表 false
"status": "1"
}
LBS 数据仓库
免费的根据基站获取经纬度的 API 接口,详细介绍看接口说明即可。
http://www.cellocation.com/api/
腾讯
腾讯说不提供相应服务,但查其文档,需要联系客服开通才可以。
https://lbs.qq.com/service/webService/webServiceGuide/location
总结
最后我们选择的是高德,为什么免费的没有用呢?经过测试,免费的质量较差,有一些基站免费的无法定位到,但高德的可以。
高德的品牌影响力稍微大一些。
而且高德的 API 小量使用时是免费的,我们使用量不大,目前还没有付费,只要注册认证就可以使用。
需要高德 API 文档的,可以关注我公众号,回复“定位”,自动获取。