首页> 中国专利> 一种提取Android系统百度地图基站数据的方法

一种提取Android系统百度地图基站数据的方法

摘要

本发明公开了一种提取Android系统百度地图基站数据的方法,包括以下步骤:S1:访问百度地图保存基站文件;S2:解析文件,获取其中保存基站的数据;S3:逆解析基站信息;S4:地图展示基站数据;S5:地图展示完成,结束解析。本发明的有益效果如下:补充了百度地图基站数据的提取方案,使得数据的完整性得到补充;归纳百度地图访问基站的次数,直观展示用户到达地点的频率;提取的基站是基于百度地图导航定位产生,因此准确性得到保证。

著录项

  • 公开/公告号CN106503197A

    专利类型发明专利

  • 公开/公告日2017-03-15

    原文格式PDF

  • 申请/专利号CN201610944114.0

  • 发明设计人 黄旭;聂学良;

    申请日2016-11-02

  • 分类号G06F17/30;

  • 代理机构

  • 代理人

  • 地址 641000 四川省内江市松山南路253号

  • 入库时间 2023-06-19 01:48:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-08-06

    授权

    授权

  • 2019-06-04

    著录事项变更 IPC(主分类):G06F17/30 变更前: 变更后: 申请日:20161102

    著录事项变更

  • 2017-04-12

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20161102

    实质审查的生效

  • 2017-03-15

    公开

    公开

说明书

技术领域

本发明涉及信息安全技术领域,特别涉及一种提取Android系统百度地图基站数据的方法。

背景技术

随着信息化技术的不断发展与进步,众所周知,Android设备已经成为人们生活中不可替代:不可或缺的一个工具。Android设备也因此得到飞速发展,现已不仅仅是通话工具那么简单,他依然成为生活的一部分,Android设备的各种各样的功能也层出不穷,覆盖了生活中的方方面面。但Android设备在获取丰富资源:处理大量数据的同时面临着被破坏的风险也越来越大,例如恢复出厂设置,误刷机:中病毒等情况均会造成手机数据丢失,因此还原Android设备的数据显得尤为重要。

百度地图是在中国地区使用非常广泛的地图导航类应用,基于庞大的用户量,针对百度地图数据的恢复就更加具有普遍性的意义;目前比较成熟的是提取百度地图中包含的经纬度定位痕迹,但是针对百度地图中包含基站数据的提取却属于空白状态。

发明内容

本发明针对现有技术的缺陷,提供了一种提取Android系统百度地图基站数据的方法,能有效的解决上述现有技术存在的问题。

一种提取Android系统百度地图基站数据的方法,包括以下步骤:

S1:访问百度地图保存基站文件,步骤如下:

S1.1:判断提取数据手机是否Root,记录布尔值类型标志F1;

S1.1.1:判定系统中是否包含su文件,当不包含su文件时,直接判定F1为False,执行S5,当包含su文件时执行S1.1.2;

S1.1.2:调用原生接口,开启PROCESS进程;

S1.1.3:执行SHELL指令su,保存执行指令后的结果,当返回结果为0时,记录标志F1为True,否则记录为False;

S1.1.4:判断F1的标志,当F1为True时执行操作S1.2,当F1为false时,代表操作系统没有root无法获取到数据区域的内容,结束解析,执行S5;

S1.2:判定系统中是否存在百度地图应用,记录布尔值类型标志F2;

S1.2.1:调用原生接口,开启PROCESS进程;

S1.2.2:执行指令“ls/data/data/com.baidu.BaiduMap”,保存执行指令后的结果,当返回结果为包含“No such file or directory”时代表百度地图应用不存在,记录F2为false,否则记录F2为true;

S1.2.3:当F2为true时执行S1.3,当F2为false时,代表百度地图应用不存在,结束解析,执行S5;

S1.3:访问保存基站数据的数据库文件;

S1.3.1:调用原生接口,开启PROCESS进程;

S1.3.2:对百度地图的files目录执行chmod命令,获取该目录的最高权限;

S1.3.3:使用各自系统下面的文件获取api,获取该目录下面的所有的具体文件,记录为集合L1;

S1.3.4:遍历L1,当遍历未结束时,记录遍历结果为R1,执行S1.3.5,当遍历结束,代表目标文件夹没有找到,结束解析,执行S5;

S1.3.5:判断R1是文件夹还是文件,当是文件夹时执行S1.3.6,当是文件时执行S1.3.4;

S1.3.6:获取R1的名称,记录为DirName1,将DirName1与字符串“ofld”做等值比较,当结果相等时执行S1.3.7,否者执行S1.3.4;

S1.3.7:使用各自系统下面的文件获取api和DirName1文件夹下面的所有文件,记录为集合L2;

S1.3.8:遍历L2,当遍历未结束时,记录遍历结果为R2并执行S1.3.9,当遍历结束时,代表目标文件没有找到,结束解析,执行S5;

S1.3.9:判断R2是文件夹还是文件,当是文件时执行S1.3.10,当不是文件时执行S1.3.8;

S1.3.10:获取R2的名称,记录为fileName1,将fileName1和字符串“ofl_statistics”做等值比较。当相等时执行S1.4,当不相等时执行S1.3.8;

S1.4:对文件R2使用chmod指令,获取到文件的最高权限。

S2:解析文件,获取其中保存基站的数据,步骤如下:

S2.1:创建基站实体BS,包含MCC、MNC、LAC、CELLID、FREQ字段,同时创建保存基站的集合L2;

S2.2:判定R2文件类型;

S2.2.1:使用各自平台的api,判断R2文件的大小,当长度小于16字节时,代表该文件不为数据库文件,结束解析,执行S5,当大于16字节执行S2.2.2;

S2.2.2:将R2文件使用流的方式读取R2的最开始的16个字节记录为filehead,将filehead依次与0X53,0X51,0X4C,0X69,0X74,0X65,0X20,0X66,0X6F,0X72,0X6D,0X61,0X74,0X20,0X33,0X00这16个字节做等值比较;当完全相同时执行S2.3,当不完全相同时,代表该文件不为数据库文件,结束解析,执行S5;

S2.3:读取数据库文件;

S2.3.1:使用各自平台的api,加载数据库文件R2,当加载成功时,执行S2.3.2,当加载失败时,代表数据库无法加载,结束解析,执行S5;

S2.3.2:使用sql语句“SELECT name FROM sqlite_master WHERE type='table'ORDER BY name”获取该数据库的所有表名的游标,记录为C1;

S2.3.3:循环解析C1,当遍历未结束时,记录结果为R3,执行S2.3.4,当遍历结束时,保存基站数据的表不存在,结束解析,执行S5;

S2.3.4:R3为游标的一行完整的数据,获取该行的第一列数据,记录为字符串tbName;

S2.3.5:将tbName与字符串“CL”做等值比较,当相等时执行S2.4,当不相等时执行S2.3.3;

S2.4:使用各自平台的api,解析表tbName,同时至少必须获取指定列名为“originid”,“frequency”;这两个列表分别代表基站数据和该基站访问的次数,记录结果为C2,C2是一个关于表tbName的游标;

S2.4.1:循环遍历C2,当存在数据时记录结果为R3,执行S2.4.2,不存在数据时,代表解析结束,执行S3;

S2.4.2:以字符串的形式获取R3的列名为“originid”的数据,记为data1,data1保存有基站信息,获取frequency数据,记为data2,data2是访问该基站的次数;

S2.4.3:解析data1,获取基站数据;

S2.4.3.1:使用“|”分割data1,结果记录为split_array数组;

S2.4.3.2:判断split_array数组中含有多少个数据,记为len,当len的长度是4时执行S2.4.3.3,当长度不为4时执行S2.4.1;

S2.4.3.3:split_array的第一个值记为mcc,split_array的第二个值记为mnc,split_array的第三个值记为lac,split_array的第四个值记为cid;

S2.4.4:创建基站实体BS;

S2.4.5:将BS的MCC设置为mcc,MNC设置为mnc,LAC设置lac,CELLID设置为cid,FREQ设置为data2;

S2.4.6:将BS加入L2,并执行S2.4.1。

S3:逆解析基站信息,步骤如下:

S3.1:构建经纬度实体,实体应当包含经度、维度、坐标系、访问次数,分别是Lat,Lon,Coord,Freq,创建经纬度集合L3;判断集合L2中的大小,记录为size。若size不为0,代表数据存在,执行S3.2,若size为0,代表基站数据不存在,执行S5;

S3.2:遍历L2,当存在数据时,记录数据为BS2,执行S3.3,当不存在数据时,代表数据遍历结束,执行S4;

S3.3:根据相应平台自定义的规则,传入BS2的MCC,MNC,LAC,CELLID选项,得到解析结果为result2;

S3.4:根据相应平台返回结果规则,获取基站BS2逆解析的经度、纬度,记录为lat、lon,逆解析BS2时选择的坐标系,记录为coord;

S3.5:当lat和lon同时不为空字符串时,执行S3.6,否则执行S3.2;

S3.6:创建经纬度实体P,将P的Lat,Lon,Coord设置从result2中获取的lat,lon,coord,P的Freq设置为基站实体BS2中记录的FREQ;

S3.7:将P加入经纬度集合L3,并执行S3.2。

S4:地图展示基站数据,步骤如下:

S4.1:选择展示经纬度数据的地图类型;

S4.2:判断集合L3的大小,记录为size2,当size2为0时代表数据不存在,执行S5,当size2不为0时,执行4.3;

S4.3:遍历L3,当遍历结果存在时记录为p1,执行S4.4,当遍历结果不存在时,代表遍历结束,执行S4.7;

S4.4:根据p1中记录的coord进行坐标系准确度修正。修正的方式有两种,一是使用所选地图平台的api进行修正,二是直接根据坐标系之间的转换算法进行强制性的修正;

S4.5:传入p1的Lat,Lon,Coord,进行修正得到该平台的修正经纬度,lat1,lon1,同时根据各自地图平台确认其固定的坐标系,记为coord1;

S4.6:将p1的Lat,Lon,Coord重新赋值为lat1,lon1,coord1,执行S4.3;

S4.7:遍历L3,当遍历结果存在时记录为p2,执行S4.8,当遍历结果不存在时,代表遍历结束,执行S5;

S4.8:根据p2中的经度:纬度在地图中进行标注;

S4.9:根据p2中的Freq,标注出该智能手机所访问的地点的频率,从而标注出该智能手机经常访问地点,执行S4.7。

S5:地图展示完成,结束解析。

与现有技术相比本发明的优点在于:

1、补充了百度地图基站数据的提取方案,使得数据的完整性得到补充;

2、归纳百度地图访问基站的次数,直观展示用户到达地点的频率;

3、提取的基站是基于百度地图导航定位产生,因此准确性得到保证。

具体实施方式

为使本发明的目的:技术方案及优点更加清楚明白,以下举实施例,对本发明做进一步详细说明。

S1:访问百度地图保存基站文件。

该步骤主要是在数据提取之前进行一些先决性条件判定,只有完整执行该步骤,获取到具体的文件,才可以执行数据提取,由于是针对数据分区(Data分区)进行数据提取,详细步骤如下:

S1.1:判断提取数据手机是否Root,记录布尔值类型标志F1;

S1.1.1:判定系统中是否包含su文件,当不包含su文件时,直接判定F1为False,执行S5,当包含su文件时执行S1.1.2;

S1.1.2:调用原生接口,开启PROCESS进程;

S1.1.3:执行SHELL指令su,保存执行指令后的结果,当返回结果为0时,记录标志F1为True,否则记录为False;

S1.1.4:判断F1的标志,当F1为True时执行操作S1.2,当F1为false时,代表操作系统没有root无法获取到数据区域的内容,结束解析,执行S5;

S1.2:判定系统中是否存在百度地图应用,记录布尔值类型标志F2;

S1.2.1:调用原生接口,开启PROCESS进程;

S1.2.2:执行指令“ls/data/data/com.baidu.BaiduMap”,保存执行指令后的结果,当返回结果为包含“No such file or directory”时代表百度地图应用不存在,记录F2为false,否则记录F2为true;

S1.2.3:当F2为true时执行S1.3,当F2为false时,代表百度地图应用不存在,结束解析,执行S5;

S1.3:访问保存基站数据的数据库文件;

S1.3.1:调用原生接口,开启PROCESS进程;

S1.3.2:对百度地图的files目录执行chmod命令,获取该目录的最高权限;

S1.3.3:使用各自系统下面的文件获取api,获取该目录下面的所有的具体文件,记录为集合L1;

S1.3.4:遍历L1,当遍历未结束时,记录遍历结果为R1,执行S1.3.5,当遍历结束,代表目标文件夹没有找到,结束解析,执行S5;

S1.3.5:判断R1是文件夹还是文件,当是文件夹时执行S1.3.6,当是文件时执行S1.3.4;

S1.3.6:获取R1的名称,记录为DirName1,将DirName1与字符串“ofld”做等值比较,当结果相等时执行S1.3.7,否者执行S1.3.4;

S1.3.7:使用各自系统下面的文件获取api和DirName1文件夹下面的所有文件,记录为集合L2;

S1.3.8:遍历L2,当遍历未结束时,记录遍历结果为R2并执行S1.3.9,当遍历结束时,代表目标文件没有找到,结束解析,执行S5;

S1.3.9:判断R2是文件夹还是文件,当是文件时执行S1.3.10,当不是文件时执行S1.3.8;

S1.3.10:获取R2的名称,记录为fileName1,将fileName1和字符串“ofl_statistics”做等值比较。当相等时执行S1.4,当不相等时执行S1.3.8;

S1.4:对文件R2使用chmod指令,获取到文件的最高权限。

S2:解析文件,获取其中保存基站的数据。

根据S1获取到了目标文件R2,该文件是一个数据库文件,保存用户通过百度地图访问过的所有基站。百度地图的基站均是以移动:联通基站的形式存储,而对电信的基站仍旧以移动:联通基站的形式保存,对应存储的方式是,MNC(SID):LAC(NID):CELLID(BID)。括号前为移动联通标志,括号后为电信标志,具体标志意思见基站类型描述。首先需要创建基站实体BS,至少应当包含MCC,MNC,LAC,CELLID:FREQ字段,FREQ是访问该基站的频率。同时创建保存基站的集合L2。

基站类型描述:

由于运营商的不同,基站数据存储格式会有一定的变化,这里以国内的基站为列,国内基站分为三种,移动,联通,电信。其中移动:联通格式一致,而电信则不同。

电信基站,包含属性BID:SID:NID;

BID基站编号;

SID系统识别码,每个地级市只有唯一一个码;

NID网络识别码,由各本地网管理,可以有多个;

移动、联通基站,包含属性MNC:LAC:CID;

MNC网络类型识别码其中00:02:04:07代表移动,01:06代表联通,03:05代表是电信;

LAC位置区域码;

CID基站编号;

S2的具体步骤如下:

S2.1:创建基站实体BS,包含MCC、MNC、LAC、CELLID、FREQ字段,同时创建保存基站的集合L2;

S2.2:判定R2文件类型;

S2.2.1:使用各自平台的api,判断R2文件的大小,当长度小于16字节时,代表该文件不为数据库文件,结束解析,执行S5,当大于16字节执行S2.2.2;

S2.2.2:将R2文件使用流的方式读取R2的最开始的16个字节记录为filehead,将filehead依次与0X53,0X51,0X4C,0X69,0X74,0X65,0X20,0X66,0X6F,0X72,0X6D,0X61,0X74,0X20,0X33,0X00这16个字节做等值比较;当完全相同时执行S2.3,当不完全相同时,代表该文件不为数据库文件,结束解析,执行S5;

S2.3:读取数据库文件;

S2.3.1:使用各自平台的api,加载数据库文件R2,当加载成功时,执行S2.3.2,当加载失败时,代表数据库无法加载,结束解析,执行S5;

S2.3.2:使用sql语句“SELECT name FROM sqlite_master WHERE type='table'ORDER BY name”获取该数据库的所有表名的游标,记录为C1;

S2.3.3:循环解析C1,当遍历未结束时,记录结果为R3,执行S2.3.4,当遍历结束时,保存基站数据的表不存在,结束解析,执行S5;

S2.3.4:R3为游标的一行完整的数据,获取该行的第一列数据,记录为字符串tbName;

S2.3.5:将tbName与字符串“CL”做等值比较,当相等时执行S2.4,当不相等时执行S2.3.3;

S2.4:使用各自平台的api,解析表tbName,同时至少必须获取指定列名为“originid”,“frequency”;这两个列表分别代表基站数据和该基站访问的次数,记录结果为C2,C2是一个关于表tbName的游标;

S2.4.1:循环遍历C2,当存在数据时记录结果为R3,执行S2.4.2,不存在数据时,代表解析结束,执行S3;

S2.4.2:以字符串的形式获取R3的列名为“originid”的数据,记为data1,data1保存有基站信息,获取frequency数据,记为data2,data2是访问该基站的次数;

S2.4.3:解析data1,获取基站数据;

S2.4.3.1:使用“|”分割data1,结果记录为split_array数组;

S2.4.3.2:判断split_array数组中含有多少个数据,记为len,当len的长度是4时执行S2.4.3.3,当长度不为4时执行S2.4.1;

S2.4.3.3:split_array的第一个值记为mcc,split_array的第二个值记为mnc,split_array的第三个值记为lac,split_array的第四个值记为cid;

S2.4.4:创建基站实体BS;

S2.4.5:将BS的MCC设置为mcc,MNC设置为mnc,LAC设置lac,CELLID设置为cid,FREQ设置为data2;

S2.4.6:将BS加入L2,并执行S2.4.1。

S3:逆解析基站信息;

逆向解析基站数据是将基站数据转化为常见的经纬度格式,便于数据展示,目前市面上并没有官方的解析平台,一般民用的都是第三方平台提供的解析方案,若想要使用官方的数据库,请自行想办法。构建经纬度实体,实体至少应当包含经度:维度:坐标系:访问次数,分别是Lat,Lon,Coord,Freq。创建经纬度集合L3;

详细步骤如下:

S3.1:构建经纬度实体,实体应当包含经度、维度、坐标系、访问次数,分别是Lat,Lon,Coord,Freq,创建经纬度集合L3;判断集合L2中的大小,记录为size。若size不为0,代表数据存在,执行S3.2,若size为0,代表基站数据不存在,执行S5;

S3.2:遍历L2,当存在数据时,记录数据为BS2,执行S3.3,当不存在数据时,代表数据遍历结束,执行S4;

S3.3:根据相应平台自定义的规则,传入BS2的MCC,MNC,LAC,CELLID选项,得到解析结果为result2;

S3.4:根据相应平台返回结果规则,获取基站BS2逆解析的经度、纬度,记录为lat、lon,逆解析BS2时选择的坐标系,记录为coord;

S3.5:当lat和lon同时不为空字符串时,执行S3.6,否则执行S3.2;

S3.6:创建经纬度实体P,将P的Lat,Lon,Coord设置从result2中获取的lat,lon,coord,P的Freq设置为基站实体BS2中记录的FREQ;

S3.7:将P加入经纬度集合L3,并执行S3.2。

S4:地图展示基站数据;

基站数据的地图展示的目的是为了直观的向用户展示所提取的基站数据代表的实际地址信息。

目前常见的地图有谷歌地图:百度地图等。基于地图类型的不同,所以不同平台的坐标系对经纬度的封装也有所不同,但是坐标系均是固定的,比如谷歌地球使用WGS84,谷歌使用的是GCJ02,百度地图使用的是它自己封装的坐标系BD09。

详细步骤如下:

S4.1:选择展示经纬度数据的地图类型;

S4.2:判断集合L3的大小,记录为size2,当size2为0时代表数据不存在,执行S5,当size2不为0时,执行4.3;

S4.3:遍历L3,当遍历结果存在时记录为p1,执行S4.4,当遍历结果不存在时,代表遍历结束,执行S4.7;

S4.4:根据p1中记录的coord进行坐标系准确度修正。修正的方式有两种,一是使用所选地图平台的api进行修正,二是直接根据坐标系之间的转换算法进行强制性的修正;

S4.5:传入p1的Lat,Lon,Coord,进行修正得到该平台的修正经纬度,lat1,lon1,同时根据各自地图平台确认其固定的坐标系,记为coord1;

S4.6:将p1的Lat,Lon,Coord重新赋值为lat1,lon1,coord1,执行S4.3;

S4.7:遍历L3,当遍历结果存在时记录为p2,执行S4.8,当遍历结果不存在时,代表遍历结束,执行S5;

S4.8:根据p2中的经度:纬度在地图中进行标注;

S4.9:根据p2中的Freq,标注出该智能手机所访问的地点的频率,从而标注出该智能手机经常访问地点,执行S4.7。

S5:地图展示完成,解析结束。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号