基于google地图地理定位api的gsm小区位置估计
geocell的Python项目详细描述
google maps地理定位api实际上允许您定义多个gsm 牢房按它的要求而建。但它只会返回位置 基于第一个单元(服务单元)的准确性,不做任何有意义的事情 关于相邻小区,rssi和定时提前值。
所以这是一个尝试,做一些更有意义的事情…
安装
使用pip:
pip install geocell
或者克隆回购协议并:
pip setup.py install
设置您的google maps api密钥
钥匙将用于:
- google maps geolocation api用于请求单元格位置
- google maps用于绘制地图的javascript api
如果你没有google maps api密钥。去 here 然后按照指示拿钥匙。
使用以下任一方法设置API密钥:
- 将密钥设置为GOOGLE_MAPS_API_KEY环境变量
- import geocell然后geocell.api_key="<your api key>"
用法
简单位置请求
>>>importgeocell>>>sample_cell={"mnc":2,"mcc":286,"cid":51861,"lac":54110}>>>geocell.locate(sample_cell){'location':{'lat':40.7018889,'lng':29.8912834},'accuracy':3250.0}
位置估计
我们需要rssi值和多个单元格信息来生成 估计值
>>>sample_cells=[...{"rssi":-82,"mnc":2,"mcc":286,"cid":51861,"lac":54110},...{"rssi":-85,"mnc":2,"mcc":286,"cid":16116,"lac":54110},...{"rssi":-93,"mnc":2,"mcc":286,"cid":0,"lac":54108},...{"rssi":-94,"mnc":2,"mcc":286,"cid":38344,"lac":54110},...{"rssi":-97,"mnc":2,"mcc":286,"cid":52555,"lac":54110},...{"rssi":-98,"mnc":2,"mcc":286,"cid":51857,"lac":54108},...{"rssi":-99,"mnc":2,"mcc":286,"cid":39684,"lac":54110}...]>>>geocell.estimate(sample_cells){'location':{'lat':40.70356939393244,'lng':29.88564243119295},'accuracy':251.3839360809747}
注意
你会注意到这个函数需要几秒钟 返回,原因是google maps geolocation api 请求需要一些时间。但是单元请求是在内部缓存的 在模块中,因此下次请求同一单元格时, 将立即返回。如果你喜欢,你也可以 geocell.is_multiprocess = True执行多个请求,只需 不要在解释器中使用多处理,它不喜欢这样。
现在让我们看看它的实际效果:
>>>geocell.estimate(sample_cells,"map.html"){'location':{'lat':40.70356939393244,'lng':29.88564243119295},'accuracy':251.3839360809747}
查看生成的地图:
- 浅黄色圆圈是服务单元格
- 红色是相邻单元格
- 蓝线是在 每一步。飞行路线的起点是 服务单元
- 标记显示飞行路径的终点和最后一个 估计位置
让我们仔细看看:
>>>geocell.estimate(sample_cells,"map_estimate.html",cell_display="estimate"){'location':{'lat':40.70356939393244,'lng':29.88564243119295},'accuracy':251.3839360809747}
现在地图只显示估计的位置(标记)和估计的 精度(半径)。箭头指向实际位置。