1.背景

  本工程实践项目是一个基于蓝牙的定位APP,总共分为两个阶段。第一阶段以收集数据为主,通过手机收集当前位置蓝牙信标的RSSI和GPS数据,上传给服务器以训练模型;第二阶段,通过当前位置所接收到的蓝牙信标数据输入机器学习模型获得当前的位置信息。最后可以通过APP绘制用户路径或提供一定范围内的导航服务。

2.软件设计方案

2.1系统架构

  本项目主要采用MVC架构。MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。MVC是一种模式,确切的说它不是一种设计模式,它是多种设计模式的组合,并不仅仅只是一个单独的一个模式。

    View层,单独实现了组合模式

    Model层和View层,实现了观察者模式

    View层和Controller层,实现了策咯模式

Android 蓝牙需要开位置信息 安卓蓝牙定位系统_数据

2.2接口API

接口说明

添加蓝牙信标设备

接口地址

/device/add

请求方式

post

请求参数

GPS,设备MAC地址,设备名称

响应数据

200成功 400失败

备注

 

 

 

 

 

接口说明

登录

接口地址

/user/login

请求方式

post

请求参数

用户名,密码

响应数据

200成功 400失败

备注

 

 

 

 

 

 

 

 

接口说明

上传蓝牙信标数据

接口地址

/data/update

请求方式

post

请求参数

GPS,设备MAC地址,时间戳,用户Id,RSSI

响应数据

200成功 400失败

备注

 

 

 

 

 

 

 

接口说明

请求定位

接口地址

/location

请求方式

post

请求参数

蓝牙信标RSSI

响应数据

200成功 当前GPS信息 400失败

备注

 

 

 

 

 

 

 

2.3系统视图

2.3.1分解视图

Android 蓝牙需要开位置信息 安卓蓝牙定位系统_请求参数_02

 

 

 

2.3.2依赖视图

  依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。依赖视图在项目计划中有比较典型的应用。比如它能帮助我们找到没有依赖关系的软件模块或子系统,以便独立开发和测试,同时进一步根据依赖关系确定开发和测试软件模块的先后次序。依赖视图在项目的变更和维护中也很有价值,比如它能有效帮助我们理清一个软件模块的变更对其他软件模块带来影响范围。

  依赖是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。在代码上主要表现为局部变量、方法的参数或者对静态方法的调用。

  

Android 蓝牙需要开位置信息 安卓蓝牙定位系统_数据_03

 

2.3.3执行视图

   执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。

                 

Android 蓝牙需要开位置信息 安卓蓝牙定位系统_数据_04

2.3.4部署视图

  部署图描述了一个系统运行时的硬件节点,在这些节点上运行的软件构件将在何处物理运行以及它们将如何彼此通信的静态视图。部署图包括两种基本模型元素:节点和节点间的连接。每个模型中,仅包含一个部署图。

下面是本项目的大致的部署视图:

 

Android 蓝牙需要开位置信息 安卓蓝牙定位系统_请求参数_05

2.3.5实现视图

Android 蓝牙需要开位置信息 安卓蓝牙定位系统_数据_06

3.数据库设计

用户表

字段名

类型

注释

user_id

int

唯一标识

user_name

string 

用户名称

user_passwd

string

用户密码

user_nickname

string

用户昵称

 

 

  

  

 

 

 

信标设备表

字段名

类型

注释

uuid

string

设备标识

mac

string

信标设备mac地址

name

string

设备名称

pt_power

int

设备发射功率

flags

int

设备模式

device_type

int

设备类型

adevrtising_type

int

广播类型

rssi

int 

信号强度

time_interval

int

广播发送间隔

 

 

 

 

 

 

 

 

 

 

 

 

 

定位数据表

字段名

类型

注释

provider

string

数据提供者

timestramp

timestramp

获取定位的时间

accuracy

int

获得的数据精度

longitude

double

当前位置经度

latitude

double

当前位置纬度

altitude

double

当前位置海拔

speed

double

速度

 

 

 

 

 

 

 

 

 

 

 

信号强度数据表

字段名

类型

注释

mac

string

数据发送者mac地址

timestramp

timestramp

收集数据的时间

rssi

int

信号强度

rssi_1m

int

rssi@1md的信号强度

uuid

string

数据发送者的uuid

group

int

数据所在组别

 

 

 

 

 

 

 

 

 

 

4.运行环境与技术选型

  开发语言:Java、Python

  客户端:Android

  后端框架:SpringBoot

  第三方库:OkHttpUtils、EventBus

  开发工具:Intellij IDEA+Android Studio

  数据库:MySQL

  数据库缓存:Redis

  运行环境:Linux平台+Docker容器

5.概念原型的核心工作机制  

  概念是人对能代表某种事物或发展过程的特点及意义所形成的思维结论,是一种虚拟的、理想化的软件产品形式,其大致等于用例 + 数据模型。

本系统的概念原型工作机制大致如下:

  用户打开软件,可以通过采集数据的选项,打开蓝牙,网络,与位置信息,通过在一定范围内活动,来收集空间中所获得的信标设备所发出来的信号强度和mac地址,接着将数据保存到数据库中,并且上传到服务器,供机器学习模型训练。用户可以通过请求gps信息返回当前所在经度和纬度。当收集数据到达一定量后,即模型被建立后,用户可以直接使用软件的定位模型,将收集到的信号强度数据送入模型,得到在当前一片范围内自身所在的位置,并返回地图信息。