目录
基站/WIFI定位
简介
手机在插入sim卡开机以后,需要搜索周围的基站信息(就是找信号),通常在有信号的地方,手机能搜索到的基站不止一个,就像你的笔记本在小区里能搜到不止一个开着的路由器一样。然后手机会自动从这些基站中选择信号最好的(假如是基站A)连接注册。其余的基站就不用了吗?不不,手机仍然搜索着它们,一旦你离开基站A一段距离,基站A的信号不如基站B了,手机会自动切换成基站B。这也就是为什么同样是待机一天,你在火车上比在家里耗电要多的原因,手机需要不停的搜索、连接基站。
当手机的网络覆盖到一定程度的时候,基站定位也就应运而生了。
其原理如下:
众所周知,距离基站越远,信号越差,所以用信号的强度可以大致估计距离基站的远近。好了,由于基站都是中国移动中国联通等运营商建立的,所以他们可以确定每个基站准确的位置,当手机同时搜索到至少三个基站的信号时(现在的网络覆盖这是很轻松的一件事情),手机除了连接信号最好的一个外,同时根据基站信号的强弱,大致估计出距离基站的远近。由于基站位置是确定的,所以确定位置是很容易的,只需要以基站为圆心,距离为半径多次画圆即可,需要三个基站的信号可以准确的定位。
相对于三个基站的信号来说,如果只搜索到一个基站或者两个基站,也可以定位,只不过,相对来说不准确
WIFI定位的原理和基站定位原理类似
API说明
luat的文件操作来自标准lua库直接按照标准语法使用即可
API接口 | 描述 |
---|---|
lbsLoc.request(cbFnc, reqAddr, timeout, productKey, host, port, reqTime, reqWifi) | 发送根据基站查询经纬度请求(仅支持中国区域的位置查询) |
lbsLoc.request(getLocCb) | 获取基站对应的经纬度后的回调函数 |
wifiScan.request(cbFnc,timeout) | wifi定位 |
详细的API介绍见lbsLoc API说明
实现流程
- 基站定位
定义回调函数getLocCb,调用lbsLoc.request(getLocCb),在getLocCb里就会有查询到的经纬度。 - WI-FI定位
先扫描WI-FI,把扫描的数据传入lbsLoc.request(),查询成功就会返回经纬度。
示例
基站定位相关实例程序在脚本库的demo\lbsLoc文件夹下。
demo讲解
Wi-Fi定位相关实例程序在脚本库的demo\wifi文件夹下。
demo讲解
常见问题
1. 如何在网站上查询小区对应的位置信息?
例如:通过AT+CEREG?查询到的小区信息如下:
+CEREG: 2,1,“812f”,“0ba1d982”,7
这里的812f和0ba1d982都是16进制格式
合宙官方提供了一个在线查询位置的位置服务:在线根据小区查询位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nj7g0uhe-1624433128936)(http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20201111102719621_无标题.png “undefined”)]
注意:任何一个在线查询网站,查询结果仅供参考;无法保证100%可以成功,因为小区id不断在新增,查询网站的后台数据库很难做到实时更新小区id数据库
2. wifi定位失败的可能原因有哪些?
(1)首先确认模块硬件是否支持wifi
- 如果模块型号带有NFM或者NAM后缀(例如Air724UG-NFM、Air720UG-NAM),则支持wifi
- 其余后缀不支持wifi
- 如果没有后缀,可能支持、也可能不支持wifi,需要发出来模块标签图片找FAE确认
(2)烧录wifi demo
开机测试,luatools抓日志分析: - 如果没有搜索到wifi热点,用手机对比确认下是否可以搜索到附件wifi,如果手机可以搜到,确认下模块的板子上是否有接wifi天线
- 如果可以搜索到wifi热点,但是wifi热点很少,用手机对比确认下搜索到附件wifi数量,如果数量差别太大,确认下模块的板子上是否有接wifi天线或者所接的天线是否支持2.4G频段
3. 基站定位获取的经纬度是什么格式的?
- 基站定位获取的经纬度为WGS-84格式
- 各种坐标系说明以及转换方法参考:http://old.openluat.com/GPS-Offset.html