[发明专利]一种基于Android平台的运动数据统计系统和方法有效
申请号: | 201710407199.3 | 申请日: | 2017-06-02 |
公开(公告)号: | CN108984562B | 公开(公告)日: | 2022-03-08 |
发明(设计)人: | 彭䶮;吴兆强 | 申请(专利权)人: | 四川理工学院 |
主分类号: | G06F16/29 | 分类号: | G06F16/29;G06F16/22;G06F16/248;G06F16/25;G06F9/448;H04W4/02;H04W4/14;H04L67/025;H04L67/52;H04L9/40;G01C22/00 |
代理公司: | 北京立成智业专利代理事务所(普通合伙) 11310 | 代理人: | 张江涵 |
地址: | 643000 四*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 android 平台 运动 数据 统计 系统 方法 | ||
1.一种基于Android平台的运动数据统计系统,其特征在于,包括:
轨迹绘制模块,用于根据计步结果调用高德地图绘制出用户的运动轨迹;所述轨迹绘制模块执行以下步骤:
初始化步骤:
步骤21、利用Android Studio,在Terminal中输入keytool–list–keystorekeystore.jks,以获取sha1值;
步骤22、利用获取的Sha1值在高德地图控制台添加key值以获取高德地图开发的APIkey参数;
步骤23、在系统中添加并加载以下依赖包:
地图jar包:Android_Map_V2.0.4.jar
定位jar包:MapApiLocation.jar
搜索jar包:MapApiSearch.jar;三个jar包,即:地图jar包、定位jar包及搜索jar包;将jar包作为项目的依赖包使用,需要在gradle文件中设置依赖语句:
步骤24、将获取的API key参数配置到系统的AndroidManifest.xml文件中并进行配置;
运动轨迹绘制步骤:
步骤31、初始化高德地图设置,并开启定位;判断定位是否成功,如果否则步骤结束;
步骤32、调用回调函数onLocationChanged()返回AMapLocation对象,使用AMapLocation对象的getXXX()方法获取到定位参数,所述定位参数包括:经纬度、地址信息、错误码;
步骤32、利用连续两次定位的经纬度生成移动轨迹,包括:
mAMap.addPolyline(mPolylineOptions).add(mLatLngList.get(k-1),mLatLngList.get(k)).color(Color.BLACK));
其中,mAMap为高德地图的MapView对象,用来显示地图界面;color()方法用来设置线段颜色;add()方法用来在地图上绘制两点之间的线段,接收参数为LatLng对象;代码中mLatLngList为存储LatLng型数据的集合,mLatLngList.get(k-1)表示起始点,mLatLngList.get(k)表示结束点;addPolyline()方法用来将Polyline对象添加到地图上,接收参数为PolylineOptions对象,PolylineOptions对象可设置线段的宽度、颜色信息;
在每次绘制线段之后调用postInvalidate()方法刷新地图以显示出绘制的运动轨迹;
步骤33、当用户结束运动时,调用stopLocation()方法结束定位,同时停止运动轨迹的绘制;并将绘制的全部运动轨迹进行存储;
所述系统还包括个人中心,所述个人中心连接所述轨迹绘制模块以接收并存储所述轨迹绘制模块的数据,其中所述个人中心包括:注册模块、登录模块、数据交互模块:
所述注册模块执行以下操作:发送验证码操作、注册操作:
其中送验证码操作包括:接收APP发送的验证码获取请求,使用随机数函数生成一个六位数验证码,生成的验证码在反馈给客户端APP做本地保存的同时,调用短信发送程序给用户发送一条验证码短信;
其中注册操作包括:注册操作采用Spring中注解方式完成数据的请求与响应,代码具体包括:
@RequestMapping(value=/api/register/users,method=RequestMethod.POST)
public ResponseEntityRespregisterMember(@RequestBody User user){
ResponseEntityRespresponseEntity=userService.register(user);
return responseEntity;}
其中,Resp为响应体的bean类,User为用于解析请求体json数据的bean类,“value”即接口;Register()函数即为注册流程处理函数,其首先验证手机号;如果传递过来的手机号为空,则返回自定义错误码600,提示内容为“手机号缺失”;如果发现在数据库中存在此手机号,则说明此手机号已注册过不可再注册,返回错误码401,提示内容为“此手机号已注册”;如果手机号不为空也并未被注册过,则将用户信息保存到数据库中,保存成功后设置返回码为200,通知客户端已注册;
其中登录模块的代码如下:
@RequestMapping(value=/api/login,method=RequestMethod.POST)
public@ResponseEntity Resp userLogin(@RequestBody User user){
return userService.userLogin(user);}
其中,userLogin()函数即为登录流程处理函数,传入参数RequestBody携带Json数据;登录程序会将APP传递过来的user name和password依次放到数据库中进行查询;如果username不存在则返回错误码400,提示信息设置为“账号不存在”;如果user name存在而password不正确,同样返回错误码400,而提示信息则设置为“密码错误”;如果两者均正确则设置返回码为200,提示用户登录成功;
其中数据交互模块包括:API接口;
其中API接口用于实现与web server交互的功能以使APP用这些接口访问远端服务器;接口使用的通讯协议为http1.1,数据请求方式为GET与POST,Request host定义为“http://www.freeruning.com:8080”,response数据格式为Json,对应的bean文件为“Resp.java”,基本格式定义如下:
其中API接口包括:个人资料获取接口、个人资料修改接口、个人数据管理接口
其中个人中心接口的个人资料获取流程的代码如下:
@RequestMapping(value=/api/user/{user_id}/get,method=RequestMethod.GET)
public ResponseEntityRespgetUserInfo(@PathVariable String user_id){
return userService.getUserInfo(user_id);}
其中个人资料的获取接口为“/api/user/{user_id}/get”,请求方式为GET;具体数据获取函数为getUserInfo(),该函数传入参数为String型数据user_id;
其中个人资料获取程序首先连接数据库,然后查询user_info table;如果该表中存在传入的user_id,则将该user_id下的所有信息取出,反馈给用户,如果该表中不存在传入的user_id,则返回错误码400,提示信息设置为“该账户信息不存在”;
其中个人资料修改接口的代码如下:
@RequestMapping(value=/api/user/{user_id}/up,method=RequestMethod.POST)
public ResponseEntityRespuserUpInfo(@PathVariable String user_id,
@RequestBody JSONObject upInfo){
return userService.userUpInfo(user_id,upInfo);}
其中,个人资料修改接口为“/api/user/{user_id}/up”,请求方式为POST;RequestBody携带数据为Json数据;实现函数为userUpInfo(),传入参数为user_id和upInfo,user_id数据类型为String,upInfo数据类型为JSONObject;
其中个人资料修改接口在接收到客户端发送来的POST请求后,首先将Request Body中的Json数据使用JSONObject工具类进行解析;解析后的数据传递到userBean类中,然后将userBean作为参数传递到数据库保存函数save(),完成数据保存工作;最后个人资料修改程序返回ResponseEntity类,告诉客户端APP数据修改成功;
其中个人数据管理接口包括:个人数据上传接口、个人数据下载接口:
个人数据上传流程的代码如下:
@RequestMapping(value=/api/user/data/{user_id}/up/{flag},
method=RequestMethod.POST)
public ResponseEntityRespupdata(@RequestBody JSONObject jsonData,
@PathVariable String user_id,
@PathVariable String flag)
{return userService.updata(jsonData,user_id,flag);}
个人数据上传接口为“/api/user/data/{user_id}/up/{flag}”;其中,字段“flag”为数据类型判断字段,数据上传实现函数为updata(),传入参数为“jsonData”,“user_id”及“flag”;
其中个人数据上传程序在接收到客户端URL之后,首先对URL进行分析,从中提取出“user_id”及“flag”参数;“user_id”是唯一标识用户信息的字段,“flag”参数用来确定上传数据的类型;若“flag”为“0”,则代表上传天气信息;若“flag”为“1”,则代表上传生理参数;若“flag”为“2”,则代表上传运动数据;若“flag”为“3”,则代表上传所有数据;若“flag”的值不符合以上四种情况,则返回错误码400,表示请求错误;在确定好上传数据的类型之后,通过相应的bean解析对应Request Body中Json数据,然后调用dbDao类的save()函数,将解析好的数据存入对应table中;最后,返回ResponseEntiy类,通知客户端APP数据已存储成功;
其中个人数据下载接口的代码如下:
@RequestMapping(value=/api/user/data/{user_id}/down/{flag},
method=RequestMethod.GET)
public ResponseEntityRespdownData(@PathVariable String user_id,
@PathVariable String flag)
{return userService.downData(user_id,flag);}
个人数据下载接口为“/api/user/data/{user_id}/down/{flag}”,实现函数为downData(),传入参数为“user_id”及“flag”;
其中个人数据下载接口在获取到客户端GET请求之后,首先使用“flag”参数判断所要查询的数据类型,然后通过“user_id”查找出该用户相关数据,并将数据以map形式传入Resp bean中;最后返回ResponseEntity类,将数据传送到客户端;
其中,该基于Android平台的运动数据统计系统还包括:
计步模块,用于根据三轴加速度计获取的数据进行计步,具体包括:
步骤11、根据当前的海拔、地磁场强度,对接收到的三轴加速度传感器发送来的持续的计步电路输出信号进行数据修正;由于使用者的跑步海拔、所处地方地磁强度的不同,会对加速度的测量造成一定的影响;为消除以上因素引起的误差,需要通过以下步骤进行数据修正:
通过公式(1)对三轴加速度传感器发送来的持续的计步电路输出信号中X、Y、Z三个轴上的加速度值做了修正补偿,修正公式如下:
Aacc=Ccompsation+Vvalues×K (1)
其中,Aacc为修正值,Ccompsation为加速度补偿量,Vvalues为某一方向上的加速度值,K为比例系数;
其中Ccompsation由海拔高度决定,当海拔在2000米以下时设定补偿量为245;当海拔在2000米到4000米范围时设定补偿量为255;当海拔在4000米以上时设定补偿量为265;
其中比例系数K为控制信号缩放比的关键量,可以通过以下的公式(2)计算:
其中Mmax为地球表面最大磁场强度;由公式(2)可以看出比例系数K与加速度补偿量Ccompsation成正比;
步骤12、通过以下的公式(3)计算加速度平均值mAvr
mAvr=(Aaccx+Aaccy+Aaccz)/3 (3)
其中Aaccx为X轴上的加速度分量,Aaccy为Y轴上的加速度分量,Aaccz为Z轴上的加速度分量;
步骤13、将加速度平均值mAvr绘制的波形图记为函数F(t),并将被测点记作F(t0),将被测点的前两个值分别定义为F(t1)、F(t2);然后计算F(t1)与F(t2)差值,记作Δ1;计算F(t1)与F(t0)差值,记作Δ2;
如果Δ1、Δ2异号则认为F(t1)为拐点,否则认为F(t1)不为拐点;若为极值点则将极值点存入数组mExtremums[]中,并进入步骤14;其中,F(t1)也称为F(t前);
其中步骤13中Δ1、Δ2异号则认为F(t1)为拐点是指,如果Δ1、Δ2一个为正、一个为负,则可以说明其中F(t1)为一个极值点;采用该步骤可以找到波形图中的所有极值点;
步骤14、获取当前的极值点Ek以及前一极值点Ek-1,并计算相邻波峰波谷之间的差值绝对值|Δ|
|Δ|=|Ek-Ek-1| (4)
其中,|Δ|为相邻的两个极值点之间的差值的绝对值,也是识别运动步伐的判断依据,Ek为本次测量出的拐点,用数组mExtremums[k]表示,Ek-1为记录的上一个极值点,用数组mExtremums[k-1]表示;
步骤15、根据步骤14获取的极值点之间的差值绝对值|Δ|,判断相邻的两个极值点之间的差值的绝对值|Δ|是否满足计步条件;|Δ|需要满足五个条件才能使计步程序记录一步,且记上次计算值为|Δ|1;五个条件具体包括:
(1)、识别区间的确定条件;当前值|Δ|大于阀值的部分为运动识别区,小于阀值的部分为非识别区;阀值即为可穿戴设备的计步电路的灵敏度,灵敏度过高或高低均会给计步造成较大误差;
(2)、上次计算值|Δ|1是否合理的判断条件;若上次计算值|Δ|1相比当前值|Δ|太小;其中|Δ|1<|Δ|/4,则认为上一次波动为高频干扰,上一步不记为一步;否则认为|Δ|1合理数据;
(3)、当前值|Δ|是否合理的判断条件;在通过第2个条件判定上次计算值|Δ|1有效的情况下,进一步判断当前值|Δ|是否合理;若当前|Δ|大于三分之二倍的|Δ|1时,则认为当前值|Δ|为合理数据,进入下一步判断;若当前值|Δ|过小,则认为本次波动为抖动干扰,不计为一步;
(4)、波谷判断;由人体的运动规律可知,完成迈步的动作不可能出现在波峰阶段;所以如果的满足条件的拐点为波峰数据,则舍弃;如果为波谷数据则进入下一个判断条件;
(5)、时间间隔判断条件;由于人体的最快运动频率为50Hz,即两步之间的时间间隔最小为0.2s,因此当前值|Δ|与上次计算值|Δ|1之间的时间间隔小于0.2s,则该当前值|Δ|为高频噪声干扰,不计为一步;
步骤16、如果当前值|Δ|满足步骤15的五个条件时,当前值|Δ|可以记为一步。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川理工学院,未经四川理工学院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710407199.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:选址方法及设备
- 下一篇:120急救指挥调度地理信息应用系统