PHP 解析GPS、JT808协议的WI-FI定位

php学习交流吧

共 1738字,需浏览 4分钟

 · 2021-11-07

最近公司有个需求就是GPS设备在室内的时候,本身的GPS定位会有很大的偏差,所以需要用到Wi-Fi定位,这样地图上显示的位置不会有偏差。


首先设备上报数据是这样的

7e02000067082037603624001400000000000000000000000000000000000000000000211029064947040200630501010602000030011c310100542b060c839a2af139340c839a2af13434e04007e06ad83914d169a991394614d169a9913846fc0c459f6a00465d0b0101cc01770e0786c7013b547e

根据文档扩展协议补充(这里根据自己的扩展协议去进行下一步)

74dd3cdc0d5ac37c65bdbfb9ffbf066f.webp

附加信息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"}


在地图上是这样的

62c52629e5b316cbc330f7edab95f035.webp


浏览 196
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报