当前位置:文档之家› 基于Android的移动终端GPS测量系统的设计与开发(发表)

基于Android的移动终端GPS测量系统的设计与开发(发表)

基于Android的移动终端GPS测量系统的设计与开发秦超,姜良君,蔡永香(长江大学地球科学学院,湖北荆州,434023)摘要:本文针对手机GPS功能进行移动应用开发,设计并实现了基于Android平台的移动终端GPS测量系统。

在分析学生野外测量实习需求的基础上,对系统进行了功能模块划分;在系统的程序模块详细设计中,着重探讨了数据库的设计与地块长度/面积计算方法。

测试结果表明,该系统已能替代GPS手持终端,满足野外测量实习的需要。

关键词:Android;移动终端;GPS测量1 引言第三代移动通讯(3G)技术为移动终端用户带来了更快的数据传输率,也为电信网络与计算机网络的融合提供了支持。

随着3G网络的使用,移动终端不仅是通讯网络的终端,也将成为互联网的终端[1]。

因此,移动终端的应用和需要的服务将会有很大的发展空间。

Google于2007年11月5日推出了基于Linux平台的移动终端系统软件平台——Android,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件[2],并融合了GPS技术,支持GPS的应用开发。

GPS的出现为测量技术带来了一场深刻的技术革命。

利用GPS的定位功能,对于任何点状、线状、面状地物,都可以通过GPS的定位功能获取其地理坐标数据,通过地图投影方法,可计算出线状地物的长度,面状地物的面积等。

以前学生野外测量实习时,常用的是手持GPS,这是一种专用的测量设备,需要专门购置和携带。

而随着智能手机的发展和普及,学生基本上是人手一部,因此在基于Android平台的移动终端上开发GPS测量系统,可使得手机用户随时利用手机进行测量定位,操作方便、便于携带,具有很强的实用性。

因此,本文利用智能手机自带的GPS定位功能,通过获取测量点的地理坐标数据,进行点、线、面地物的空间位置测量,通过地图投影方法,计算出线状地物的长度或面状地物的面积及周长,并能够将结果可视化的显示在屏幕上。

2 系统功能模块划分野外测量实际上包括独立点位测量、线状地物或面状地物的连续测量、测量数据存储、查看、显示与更新、地物面积、长度的计算等。

因此,基于Android的GPS测量系统主要功能模块可以划分为:独立点位测量、地物点的动态定位测量、测量结果显示与更新、地物面积(或长度)测量。

1)独立点位测量:测量时对独立点逐一定位,获取其地理坐标。

其属性信息,如地物名称、所属图层类型、所属图层名称、测量点位置序号等,可事先在室内输入系统。

2)地物点的动态定位测量:在线状边界测量时采用,通过设置定位间距(或者定位时间间隔),随着设备的移动每隔设定的间距(或时间)自动采集一次定位数据;而对于开始点、结束点以及转角点等这些特殊的点位,可通过点击特殊点定位按钮定* 本项目获长江大学楚天学者项目资助位获取;用户单击停止定位按钮后,定位过程结束。

其相关属性信息,如地物名称、所属图层类型、所属图层名称等可手工输入系统。

3)测量结果显示与更新:测量结果存入数据库后,可按一定条件查询查看,结果以列表方式,或图形可视化的方式显示,列表显示顺序与测量数据的创建顺序一致;可以向数据库中添加定位数据记录或者从数据库中删除定位数据记录,并给出更新提示。

4)地物长度(或面积)测量:通过地图投影方法,将地物经纬度坐标投影为平面坐标,从而计算出线状地物的长度或者面状地物的面积及周长,并将结果以对话框的形式反馈给用户。

3 系统详细设计整个系统的功能是通过系统主模块、地物信息输入模块、独立点定位模块、动态定位模块、数据存储、数据查看与更新模块、面积/长度测量模块以及图形显示等程序模块来实现(如图1所示)。

1)系统主模块是整个系统的入口。

它实现的功能包括显示程序主界面、打开/创建数据库、查看所有图层、删除数据库,查看帮助信息,该模块基于类Welcome 来实现。

2)地物信息输入模块负责地物属性信息的输入,同时打开独立点定位模块、动态定位模块和增加测量点模块,该模块基于类InputObject 来实现。

图1 系统程序模块图 3)系统设计了一个数据存储模块来管理定位数据,它负责创建和打开存放定位数据的存储系统,并向其它模块提供数据访问接口。

该模块基于类DataStorage 来实系统主模块(Welcome ) 地物信息输入(InputObject ) 独立点定位 (StLocate )图层列表(ListLayer ) 地物列表(ListObject ) 测量点列表(ListPoint ) 图形显示(ShowMap ) 面积/长度计算 删除动态定位 (DyLocate/ DyShowMap ) 增加测量点 (AddPoint ) 数据存储(DataStorage ) 数据库现。

4)独立点定位模块,获取独立点的GPS绝对定位数据,从中提取经、纬度,并将定位数据保存至数据库。

该模块基于类StLocate来实现。

5)动态定位模块,完成地块边界的连续测量和特殊点位的定点测量。

用户可以选择动态显示测量点经纬度或动态显示地物地理位置来进行动态定位。

定位开始后,当GPS设备每移动用户所设的距离(或时间),该模块就会自动获取所在点的经纬度并将其加入到对应地物;同时,用户可根据需要在特殊点位处点击按钮获取其地理数据;最后将该地物保存至数据库。

动态定位模块基于类DyLocate或DyShowMap来实现。

6)数据查看模块,根据图层名称、地物名称等在数据库中查询记录,并以顺序列表的方式显示给用户。

该模块基于类ListLayer、ListObject和ListPoint来实现。

7)图形显示模块,对查看的地物以可视化的方式显示其地理分布特征。

该模块基于类ShowMap来实现。

8) 面积/长度测量模块,对查看的地物计算长度和面积。

该模块基于类ListObject实现。

9)数据更新模块,对查看地物进行数据添加或者某些数据的删除。

该模块是由类AddPoint及其他部分来实现的。

整个系统程序模块的详细设计中,数据库的设计和长度/面积计算方法设计是最关键的部分,下面对这两个部分进行详细说明。

3.1 数据库设计本系统使用的是Android平台集成的嵌入式关系型数据库——SQLite数据库,这是一款轻型的数据库,其设计目标是嵌入式应用,目前已在很多嵌入式产品中使用。

它占用资源非常的低,在嵌入式设备中,只需要几百K的内存,支持Windows/Linux /Unix等主流的操作系统,同时能够与很多程序语言相结合。

和Mysql、PostgreSQL这两款世界著名的开源数据库管理系统相比,它的处理速度比他们都快[3]。

在本数据库中创建了三个表Layer、Object和Point,分别用来存储图层记录、地物记录和测量点记录。

表Layer与表Object通过字段layer_name连接,一个图层由一个或多个对应类型的地物组成;表Object与表Point通过字段object_name连接,一个地物由一个或多个测量点组成。

他们的结构分别如表1、表2、表3所示(表中粗体标识字段为该表的主键):表1 表Layer的结构字段说明图层ID 图层名图层类型创建时间修改时间字段layer_id layer_name layer_type create_at update_at 数据类型integer text text text text表2 表Object的结构字段说明地物ID 地物名所属图层长度面积字段object_id object_name layer_name length area_ 数据类型integer text text double double表3 表Point的结构字段说明点ID 点名点号经度纬度所属地物字段point_id point_name point_no jd wd object_name 数据类型integer text text double double text如下图2所示,本系统抽象出地物类MyObject,据此派生出点状地物类PntObject、线状地物类LObject 和面状地物类AObject 。

MyPoint 是由经纬度及其它属性组成的类,三种地物均由一个或多个MyPoint 对象组成。

数据库方法只须将抽象地物类对象的引用作为参数,便可对不同地物进行统一操作,这样减少了数据库接口方法中参数的个数,其它模块调用数据库方法就变得非常简单,在一定程度上屏蔽了数据库的复杂性,也便于日后维护。

抽象地物类还可以用于其它模块。

图2 数据操作结构图本数据库的优点在于改进了数据存储方式,数据库不直接操作测量点,只对完整的地物进行操作,避免了对数据的频繁读写,也在一定程度上保证了数据的完整性。

3.2 长度/面积测量实现原理1)利用地图投影,球面坐标向平面坐标转化通过测量,获得的地物地理数据,是球面坐标下的经纬度值,如果要计算其面积或长度,必须在平面坐标下进行。

因此,首先要对测量点的坐标进行投影转换。

地图投影采用高斯-克吕格投影,为了减小误差,将投影的中央经线放置在测量区块的中间位置,即计算出该区块所有测量点经度的平均值,作为投影的纵坐标,赤道投影为横坐标构建高斯平面。

然后重新遍历一次该地物的所有测量点,利用高斯投影公式将它们的经纬度转化为平面上的坐标[4]。

高斯—克吕格正射投影优化公式如下[5]:X=6367452.1328B-(P 0-(0.5+(P 4+P 6L 2)L 2)L 2N)sinB (1)Y=(1+(P 3+P 5L 2)L 2)LN² (2)式中:N=(6399596.652-(21565.045-(108.996-0.603cos2B)cos2B)cos2B)cosB (3) P 0=(32144.5189-(135.3646-0.7034cos2B)cos2B)cosB (4) P 3=(0.3333333+0.0011233cos2B)cos2B-0.1666667 (5) P 4=(0.25+0.00253cos2B)cos2B-0.04167 (6) P 5=0.00878-(0.1702-0.20382cos2B)cos2B (7) P 6=cos2B(0.167cos2B-0.083) (8) 其中,B 为测量点的纬度,L 为测量点的经度距中央经线的经差,单位均为弧度。

2)长度/面积计算在已知折线各拐点坐标的情况下,可用如下公式快速的求出折线的长度 PntObjectLObject AObject MyPoint数据库MyObject数据交换1 **L= ∑=n i 12121)()(---+-i i i i Y Y X X (9)地块面积的计算采用梯形面积累加法。

相关主题