Location(基站/WIFI定位)

# 简介 手机在插入sim卡开机以后,需要搜索周围的基站信息(就是找信号),通常在有信号的地方,手机能搜索到的基站不止一个,就像你的笔记本在小区里能搜到不止一个开着的路由器一样。然后手机会自动从这些基站中选择信号最好的(假如是基站A)连接注册。其余的基站就不用了吗?不不,手机仍然搜索着它们,一旦你离开基站A一段距离,基站A的信号不如基站B了,手机会自动切换成基站B。这也就是为什么同样是待机一天,你在火车上比在家里耗电要多的原因,手机需要不停的搜索、连接基站。 当手机的网络覆盖到一定程度的时候,基站定位也就应运而生了。 其原理如下: 众所周知,距离基站越远,信号越差,所以用信号的强度可以大致估计距离基站的远近。好了,由于基站都是中国移动中国联通等运营商建立的,所以他们可以确定每个基站准确的位置,当手机同时搜索到至少三个基站的信号时(现在的网络覆盖这是很轻松的一件事情),手机除了连接信号最好的一个外,同时根据基站信号的强弱,大致估计出距离基站的远近。由于基站位置是确定的,所以确定位置是很容易的,只需要以基站为圆心,距离为半径多次画圆即可,需要三个基站的信号可以准确的定位。 相对于三个基站的信号来说,如果只搜索到一个基站或者两个基站,也可以定位,只不过,相对来说不准确 WIFI定位的原理和基站定位原理类似 # API说明 LuatOS-Air的文件操作来自标准lua库直接按照标准语法使用即可 |API接口| 描述| | --- | --- | |lbsLoc.request(cbFnc, reqAddr, timeout, productKey, host, port, reqTime, reqWifi)|发送根据基站查询经纬度请求(仅支持中国区域的位置查询)| |lbsLoc.request(getLocCb)|获取基站对应的经纬度后的回调函数| |wifiScan.request(cbFnc,timeout)|wifi扫描热点请求 > 详细的API介绍见[lbsLoc API说明](https://doc.openluat.com/wiki/21?wiki_page_id=2275 "lbsLoc API说明") [wifiScan API说明](https://doc.openluat.com/wiki/21?wiki_page_id=2299 "wifiScan API说明") # 实现流程 - 基站定位 定义回调函数getLocCb,调用lbsLoc.request(getLocCb),在getLocCb里就会有查询到的经纬度。 - WI-FI定位 先扫描WI-FI,把扫描的数据传入lbsLoc.request(),查询成功就会返回经纬度。 # 示例 基站定位相关实例程序在脚本库的demo\lbsLoc文件夹下。 [demo讲解](http://doc.openluat.com/wiki/21?wiki_page_id=2180 "demo讲解") Wi-Fi定位相关实例程序在脚本库的demo\wifi文件夹下。 [demo讲解](http://doc.openluat.com/wiki/21?wiki_page_id=2205"demo讲解") # 常见问题 ## 1. 如何在网站上查询小区对应的位置信息? 例如:通过AT+CEREG?查询到的小区信息如下: +CEREG: 2,1,"812f","0ba1d982",7 这里的812f和0ba1d982都是16进制格式 合宙官方提供了一个在线查询位置的位置服务:[在线根据小区查询位置](http://bs.openluat.com/ "在线根据小区查询位置") [![undefined](https://cdn.openluat-luatcommunity.openluat.com/images/20201111102719621_无标题.png "undefined")](undefined "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 ## 4. 当同时使用基站定位和wifi定位怎么判断是基站定位成功了还是wifi定位成功了? * 服务器返回的第一个字节为0x00表示基站定位成功返回0xFF表示WIFI定位成功,相关lib和demo已更新 ## 5. 请问,基站定位时日志打印“远程主机强迫关闭了一个现有连接“时,定位失败的概率会增大,如何解决? * 免费的服务器承受不了高并发压力,可以加大lbsLoc.request接口的tiemout参数来提高成功率 ## 6. wifi定位和基站定位的区别 * wifi定位和基站定位都是通过调通lbsLoc.request接口来实现定位 * 主要区别是,wifi定位要先通过wifiScan.request接口先搜索WIFI热点信息(MAC地址和信号强度),然后把搜索到的WIFI热点信息传入lbsLoc.request接口的最后一个参数,后台会查询WIFI热点对应的经纬度。 ## 7. wifi定位精度 * 根据设备获取的WiFi的信息进行定位,WIFI定位精度一般不受使用环境影响,主要和单一WIFI辐射半径、WIFI覆盖密度有关。一般来说,WIFI精度在3米-200米左右。 ## 8. lbsLoc.request()使用这个的时候,返回值是4,表示接收服务器应答超时,这个怎么解决? 免费的服务器承受不了高并发压力,可以加大lbsLoc.request接口的tiemout参数来提高成功率 ## 9. 使用锂电池供电时,wifi定位会卡死可能是什么原因,插着USB就没事,或者说电池供电时,WiFi就经常失败 这个是供电问题引起的,不够或者不稳都会导致 ## 10. 基站定位精度 * 搜索到的小区越多,定位的精度越高;一般来说,城市中心定位精度比郊区和农村定位精度高,城市中心的定位精度在几十米到几百米不等,郊区和农村的定位精度更低,可能会有几千米甚至更多的误差 * 基站定位的误差都比较大,如果需要准确定位,请使用支持GPS的模块,例如Air820、Air724+Air530 ## 11. WIFI定位支持国外定位吗? 不支持,只支持国内定位