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"
}
在地图上是这样的
评论