基于物联网卡实现的GPS定位

in 大杂烩 with 0 comment

本次主要记录利用某宝所售的定位器,查看其原理并实现二次开发。


某宝产品缺点优点

某宝所售的定位器有续航时间久、定位准确、上传位置模式选择等功能。但是经过实验,续航是其描述的三分之一,最主要的是定位误差比较大(比如明明没动,结果使用APP查看却是在一直移动)。这个是比较严重更多问题,但是对于一些移动的轨迹,还是相对比较准确,但是还有一个缺点就是不能实时定位,基本都是定时上传位置。因此购买定位器还是只对一些一些场景有用而已。

物联网卡定位原理

GPS的定位原理其实就是通过四颗已知位置的卫星来确定GPS接收器的位置
卫星的位置可以根据星载时钟所记录的时间在卫星星历中查出。而用户到卫星的距离则通过纪录卫星信号传播到用户所经历的时间,再将其乘以光速得到(由于大气层电离层的干扰,这一距离并不是用户与卫星之间的真实距离,而是伪距)。
当GPS卫星正常工作时,会不断地用1和0二进制码元组成的伪随机码(简称伪码)发射导航电文。导航电文包括卫星星历、工作状况、时钟改正、电离层时延修正、大气折射修正等信息。然而,由于用户接受机使用的时钟与卫星星载时钟不可能总是同步,所以除了用户的三维坐标x、y、z外,还要引进一个变量 t 即卫星与接收机之间的时间差作为未知数,然后用4个方程将这4个未知数解出来。所以如果想知道接收机所处的位置,至少要能接收到4个卫星的信号。如下图所示:
定位原理.png
以上参照http://xinwen.eastday.com/a/180607222241130-2.html

基于某宝产品的二次开发

售卖的定位器基本都是需要下载APP查看、操作等。因此这次主要是采用抓包的方式进行接口的查看,从而是实现二次开发。

  1. 手机设置wifi代理,在电脑打开Fiddler
    设置参照之前的博文:https://richule.com/index.php/archives/42/
  2. 分析抓包数据
    通过Fillder可以发现,其实该APP就是定时发送请求到某宝自己搭建的服务器,从而返回一些数据。其中定时发送三个请求:

1、获取设备主要信息;2、获取APP首页的通知(如低电量等);3、其他数据信息。
通过分析返回的数据,可以知道,其实三个请求主要是第一个请求有效,返回的信息主要有:
1.是否在移动(CarNowStatus=Move)
2.查看的设备ID(购买的定位器ID)
3.设备的经纬度Latitude、Longitude;
4.当前自己的经纬度OLat、OLng;
5.剩余电量、是否处于睡眠等信息。
贴上这次请求的参数以及相应数据:

请求的参数:loginName=设备ID&deviceId=430247&password=123456&language=zh_CN&loginType=1&mapType=Baidu&key=9DJ273HF123F34

响应的数据:{"Code":"1","DeviceID":"设备ID","DeviceName":"N1免卡-04751","icon":"1","battery":"-1","batdj":"5","DeviceUtcDate":"2019/03/17 08:23:01","ServerUtcDate":"2019/03/17 08:23:01","OLat":"23.11678000000000000000","OLng":"109.60631000000000000000","Latitude":"23.11960","Longitude":"109.61706","Course":"due north","Speed":"0.00","Status":"WIFI 电量100%","CarNowStatus":"Move","CarStopTime":""}

通过多次实验发现,请求参数的deviceId、key是不会改变的,因此实现二次开发也是比较容易的。当然请求的URL也直接可以在Fiddler得到了。

总结

某宝不同的产品,接口、请求、响应自然不一样,但是原理基本都一样的,就是定时请求、解析响应。
至于想解决定位准确等(自行制作定位器及搭建后台服务器),这个....还是逃~~~
c罗.jpg
2018-2019欧冠1/8决赛尤文3:0马竞扭转

Responses