PHP 解析GPS、JT808协议的WI-FI定位
最近公司有个需求就是GPS设备在室内的时候,本身的GPS定位会有很大的偏差,所以需要用到Wi-Fi定位,这样地图上显示的位置不会有偏差。
首先设备上报数据是这样的
7e02000067082037603624001400000000000000000000000000000000000000000000211029064947040200630501010602000030011c310100542b060c839a2af139340c839a2af13434e04007e06ad83914d169a991394614d169a9913846fc0c459f6a00465d0b0101cc01770e0786c7013b547e根据文档扩展协议补充(这里根据自己的扩展协议去进行下一步)

附加信息ID:0x54、0x5D就是Wi-Fi和基站的数据信息
通过以下代码得到下面的数据
$num =hexdec($data[$k + 1])-1;$total = $num / 7;$numArray = array_slice($data, $k + 3, $num);$array = implode($numArray);
0c839a2af139340c839a2af13434e04007e06ad83914d169a991394614d169a9913846fc0c459f6a0046再进一步解析出mac地址数据
$newarray = str_split($array,14);foreach($newarray as $k=>$vo){$str = substr($vo,0,12);$str = implode(':', str_split($str, 2));$result.=$str.',-'.hexdec(substr($vo,12,14)).'|';}return substr($result,0,strlen($result)-1);
最终得出结果
0c:83:9a:2a:f1:39,-52|0c:83:9a:2a:f1:34,-52|e0:40:07:e0:6a:d8,-57|14:d1:69:a9:91:39,-70|14:d1:69:a9:91:38,-70|fc:0c:45:9f:6a:00,-70这里要注意,信号强度需要转一下,比如信号强度是0x46,要转成十进制70,然后在70前面加个-号,最终算出来的信号强度就是-70dBm,单位是dBm
拿着这个Mac地址呢,去第三方平台(比如:高德地图)申请Wi-Fi转换经纬度接口
$url = "https://apilocate.amap.com/position?accesstype=1&imei=这里是手机号的IMEI卡号&macs=这里填mac地址&output=json&key=这里填自己申请的key";$result = $this->curl($url);$result = json_decode($result,true);
得出经纬度等位置信息
{"infocode":"10000","result":{"city":"深圳市","province":"广东省","poi":"新能源创新产业园","adcode":"440305","street":"创盛路","desc":"广东省 深圳市 南山区 S301南坪快速 靠近新能源创新产业园","country":"中国","type":"3","location":"113.9524951,22.5628781","road":"S301南坪快速","radius":"29","citycode":"0755"},"info":"OK","status":"1"}
在地图上是这样的

评论
