块、独立点定位模块、动态定位模块、数据存储、数据查看与更新模块、面积/长度测量模块以及图形显示等程序模块来实现(如图1所示)。
1)系统主模块是整个系统的入口。它实现的功能包括显示程序主界面、打开/创建数据库、查看所有图层、删除数据库,查看帮助信息,该模块基于类Welcome来实现。
2)地物信息输入模块负责地物属性信息的输入,同时打开独立点定位模块、动态定位模块和增加测量点模块,该模块基于类InputObject来实现。
图1 系统程序模块图
3)系统设计了一个数据存储模块来管理定位数据,它负责创建和打开存放定位数据的存储系统,并向其它模块提供数据访问接口。该模块基于类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等主流的操作系统,同时能够与很多程序语言相结合。和My
sql、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、线状地物类LObj