基于World Wind移动端的地质数据野外采集系统①

2019-04-29 08:58陈根深刘军旗张志庭
计算机系统应用 2019年4期
关键词:线程投影定位

陈根深,刘军旗,何 忆,黄 挺,张志庭,刘 刚

1(中国地质大学(武汉)教育部长江三峡库区地质灾害研究中心,武汉 470074)

2(中国地质大学(武汉)计算机学院,武汉 430074)

3(中国地质大学(武汉)智能地学信息处理湖北省重点实验室,武汉 430074)

1 引言

野外地质数据采集作为地理信息系统中重要的部分,是开展地质研究的基础,其质量直接影响解释结果与客观实际的接近程度[1-6].野外地质数据具有类型繁多、信息量庞大、内容复杂、以描述性信息为主、受人为因素以及其他因素的影响等特点,传统的野外地质数据采集工作是使用野簿记录,地质人员将采集到纸质数据带回去并对其进行数字化成为电子文件或将其存入数据库中,通过纸质数据与原图进行比较来检查.具有记录内容随意、格式不规范以及使用不方便等缺点,数字化过程繁琐也会降低数据采集的质量和准确性,容易存在数据质量问题,难以满足地学定量化和地矿信息化的要求[7,8].传统的掌机具有轻便与省点的优点,但其内存小,一般只有32 M,处理图形能力差,只适合记录文字信息,无法满足记录大量的地层、构造以及矿产等属性信息以及遥感影像、素描与数码照片等数码信息的实际工作需求[9,10].智能化的数据采集系统主要是基于掌上电脑(PDA)的野外采集系统,通过将PDA 集成在某种仪器设备上,用户可以通过设备原装软件进行数据处理,从而将GPS 与GIS 系统结合,实现地质数据采集数字化,但其价格高昂,功能受硬件约束较大,在全面性与易用性上存在不足.

随着移动通信网络的快速发展和移动电子设备的快速升级,移动设备的普及性得到极大提高,尤其是近几年井喷式的发展,基于Android 平台的智能设备因具有用户数量大、应用场景多、开发成本低、携带与充电方便等优势,得到了广泛的应用.

本文基于开源的Android 平台,集成World Wind 地图技术、网络通信技术、多线程技术和数据存储技术,针对野外地质采集工作中存在的步骤繁琐、效率低、工作周期长等问题,研发了一种基于World Wind 移动端的地质数据野外采集系统,充分利用移动互联网的普遍性与便捷性,实现野外地质工作的信息化采集、浏览和展示,为地质研究工作人员提供便捷的数据录入方式,提高野外地质数据采集的工作效率.

2 系统设计

2.1 系统设计分析

地质数据野外采集系统主要针对的用户群体为从事地质勘查数据采集的研究工作人员,考虑到用户群体的特殊性,需要对系统进行性能、可靠性、可扩展性等需求进行分析.Android 系统已经较为完善,但由于国内基于World Wind 移动端开发的例子很少,依据实际业务需求,在系统设计与实现中需要解决以下3 个难点:(1)系统健壮性与可扩展性.考虑到移动智能设备的迅速升级和地质工作信息化的进一步推进,系统需要随着业务的更新与设备的升级进一步优化,不仅要求能够灵活修改已有的功能模块,还要求能够方便添加新的功能模块.(2)基于北斗/GPS 和移动网络的综合定位策略.GPS 定位精度高,但是获取定位的时间较长,同时对所处地形和所在区域的卫星数量有一定要求;移动网络的定位精度较低,但是获取定位的时间较短.(3)基于World Wind 移动GIS 图形编辑、导航及投影研究.

通过分析,针对以上问题分别提出的解决方案如下:(1)系统需要较大的冗余空间,充分采用模块设计模式,为将来的功能扩展和系统升级优化做好铺垫.(2)建立北斗/GPS 与移动网络结合的综合定位策略,在定位过程中,当无法通过GPS 定位时,通过移动网络获取定位,当获取到GPS 定位后,用GPS 定位替换移动网络定位.在此基础上,基于移动GIS 的可视化采集用户接口,实现结构化与非结构化的原始数据在矢量化地质底图的实时定位录入.(3)World Wind 移动端开发包括基于空间库的地质底图数据组织与配置,基于移动端World Wind 控件的开发,以及图层管理、自定义图形、地图标注、属性查询、空间查询及空间量算与空间分析[11].

2.2 系统体系架构

整个系统分为用户界面层、逻辑功能层和数据访问层,如图1所示.用户界面层为用户提供友好的图形交互界面,包括界面显示、地图加载显示和数据对话框展示等;逻辑功能层是针对某种特定的业务需求提供完整的逻辑功能,包括移动设备的触屏基本操作、数据编辑、数据上传和数据更新等[12];数据访问层用于对数据进行访问、管理及标准化.通过响应用户的请求,形成相应的检索语句,对用户所采集的数据进行数据库增删改查等管理操作.

2.3 功能模块设计

地质数据野外采集系统旨在辅助地质研究工作人员在野外便捷、精确地采集各种地质勘查数据,因此在采用模块化设计模式的基础上,系统主要分为GPS/北斗定位模块、地球三维展示模块、可视化数据录入模块、数据导出模块、可视化数据编辑模块、移动GIS 地质实体投影模块和移动GIS 地质实体导航模块,总体功能结构如图2所示.

2.3.1 定位模块

定位模块通过北斗/GPS 卫星导航系统结合移动基站进行目标地的定位与位置信息获取,利用GIS 地图对所在的位置进行实时显示并与用户实时交互.主要分为网络定位和卫星定位.网络定位时通过集成百度底图进行定位,卫星定位是通过北斗或者GPS 芯片进行定位.卫星定位利用北斗卫星导航系统进行目标的定位与位置信息获取,北斗卫星导航系统是由空间段、地面段和用户段三部分组成.其可在全球范围内全天候、全天时为各类用户提供高精度、高可靠性定位、导航和授时服务,并具有短报文通信能力,已经初步具备区域导航、定位和授时能力,定位精度10 米,测速精度02 米/秒,授时精度10 纳秒[13,14].北斗模块的定位原理:首先移动设备发送信号到卫星,接着卫星转发到总控站进行解算,然后总控站把解算结果转发给卫星.最后,卫星将结果传回到客户端.延迟相对较高,但是定位精度相对较高.百度地图定位时通过百度地图得到定位信息,利用GIS 地图所在位置进行实时显示,其中调用GIS 地图服务必须先获取其Map API Key.在野外工作中,网络定位受信号、设备等因素的影响,精度一般在10-20 米左右,GPS 定位也会受到云层、地形等因素的影响导致定位误差;因此,建立北斗/GPS 与移动网络结合的综合定位策略,在定位过程中,当无法通过GPS 定位时,通过移动网络获取定位,当获取到GPS 定位后,用GPS 定位替换移动网络定位.在此基础上,基于移动GIS 的可视化采集用户接口,实现结构化与非结构化的原始数据在矢量化地质底图的实时定位录入.

图1 系统体系架构

图2 系统功能结构图

2.3.2 数据操作模块

对地质数据进行录入和保存,同时基于定位模块实现可视化的数据录入和数据编辑,该模块根据业务需求分为六个子模块:岩体、土体、水体、构造、资源和灾害,如图3所示.岩体数据录入主要记录野外岩体调查点的岩体综合信息,包括地理位置、经纬度坐标、岩体名称、高程、岩性等;土体数据录入主要记录土质类型、颜色、颗粒粗细等;水体数据录入主要记录水体类型、流量、水深、动态变化等;构造数据主要记录构造类型、走向等;资源数据主要记录调查点的矿种类别、资源量、矿体特征等;灾害数据主要记录调查点的灾害类型、灾害范围、灾害程度等.

图3 数据录入模块结构图

2.3.3 实体投影模块

实体投影主要是能够在World Wind 地球仪上对调查路线调查区进行实体投影,方便野外工作人员采集数据;同时也能够对工作人员当前位置进行投影展示,进行导航或通过在底图上投影的调查点查看采集的调查点的详细信息.投影包括调查点投影以及实际勘探路线直线投影,导航指通过点击地图上调查点投影跳转到对应的调查点详情界面.

要在地图上获得实际路线投影,首先要遍历数据库里的所有调查点,使用HashMap 将不同图幅的调查点进行分组,同一图幅调查点放到同一个List 数列中;再依次对同一图幅的调查点List 使用HashMap 分组得到每条路线所对应的调查点List.根据同一路线的每个调查点的经纬度创建一个position 对象,创建path对象并将所有position 加入其中,最后将path 对象加入RenderableLayer 对象中,再将RenderableLayer加入World Wind 图层即可在地图上显示路线投影.

调查点投影遍历数据库下所有调查点,对每个调查点创建Placemark(地标:调查点标志)和Lable(标签:调查点编号)对象,并将其加入RenderableLayer 对象中,再将RenderableLayer 加入World Wind 图层即可在地图上显示调查点投影.调查点导航首先需要添加触摸事件,判断触摸的是否为所添加的调查点投影.若为调查点投影,则根据该点的经纬度与所有调查点的经纬度进行比较,若一致,则使用startActivity 函数并携带Point 对象跳转到相对应的调查点详情界面.

2.3.4 三维展示模块

三维展示模块可以很好地展现地球的各种宏观形态,可以对地球上的一些人类活动进行模拟;通过旋转地球,可以从多角度来观察地球上的地形地貌;通过“日夜循环”模式,清晰地了解地球自转情况,通过模拟飞行器绕地飞行,宏观地展示地面的复杂情况,方便规划飞行路线;该模块还可以在地表进行地标的拖拽、分析地表纹理以及在地球上进行一些简单的模型搭建等等.

2.4 数据库设计

2.4.1 图幅基本信息数据库设计

图幅基本信息数据库用于存储每张图幅切片所对应的基本信息,用户选择图幅后系统可以根据数据库中的入伏基本信息和SD 卡中对应的图幅,将其加载到World Wind 地图上,图幅基本信息表数据结构如表1所示.

表1 图幅基本信息表数据结构

2.4.2 地质数据库设计

系统数据库模型采用图幅-路线-调查点以及调查点的相关地质要素数据,包括岩体、土体、水体、构造、资源、灾害6 大要素.地质数据模型E-R 图如图4所示.

图4 地质数据模型E-R 图

对地质数据进行录入和保存,按照地质要素分类,每个地质要素类别中包含多张数据表,例如调查点要素类别中包含调查点基本信息表、调查点查证表、样品信息表、调查点影像表和应用评价表;水体要素类别中包含水体(泉)调查表、水体(井、钻孔)调查点表、水体(河)调查点表、井/孔水文地质柱状图信息表等;其他地质要素类别中包含的数据表归纳整理后,如表2所示.

表2 地质数据库表清单

其中以调查点基本信息数据表为例的数据结构如表3所示,数据表采用GUID 主键,其中调查点统一编号、图幅编号、路线编号和调查点号为必填字段,当用户在数据录入时,遗漏填写必填字段,系统在交互界面中设计有温馨提示对话框.

表3 调查点数据表的数据结构表

5 调查点性 PointType varchar 10 不必6 调查种类 PointSort varchar 2 不必7 调查手段 PointMethod varchar 10 不必8 地理位置 Location varchar 80 不必9 经度 Longitude double 20 ° 不必10 纬度 Latitude double 20 ° 不必11 高程 Altitude float 2 m 不必12 调查日期 SurveyDate Date 不必13 天气状况 Weather varchar 10 不必14 记录人 Recorder varchar 20 不必15 参加人员 Participant varchar 40 不必

3 系统关键技术

3.1 World Wind 地图技术

在GIS 底图选取时,使用基于World Wind 的三维地球仪作为载体,替换传统的二维平面底图.World Wind 是美国航空宇航局研发的一款开源的地理软件,能够展现NASA、UGCS 等服务商所提供的地球图像,是一个可视化地球仪.World Wind 实质上是为应用程序表达、处理和分析空间数据提供了一个平台,其最大的特性是它是唯一拥有将多种公开和专用地理数据聚合功能,不但可以提供NASA 自身的数据,还可以提供从其他政府部门、行业和普通大众中得到的数据;此外,它还能够自动更新卫星数据,应用程序通过其接口可以获取最新的卫星数据,例如火山喷发、地震等卫星影像.软件开发人员能够使用该软件迅速搭建一个应用程序,实现地图与地理信息的可视化交互,也能够根据特定领域的需求,研发相关的应用程序.

World Wind 在地图显示时通过采用使用多分辨率图层技术,达到快速浏览、缩放遥感影像数据的目的.所谓多分辨率图层技术[15]就是对被显示的数据进行重采样,提取不同分辨率的图层,然后根据World Wind 的视距显示不同分辨率的图层.World Wind 首先对地球进行网格划分,在不同的分辨率层次上划分大小不同的网格,并进行编号[16].在第0 层,World Wind将地球分成50 块瓦片,每一块影像跨度为36°×36°;第1 层在图层0 的基础上提高4 倍的分辨率,也就是说对于同一影像,它被分成18°×18°的片段,因此产生200 块信息的瓦片;在图层2,分辨率提高到含有800 块9°×9°的瓦片;图层3 就是4.5°×4.5°,而且含有3200 块瓦片,以此类推.

World Wind 采用了先进的流传输技术,传统的数据传输方式是直接传输空间数据,而World Wind 客户端和服务器采用了传输图片的方式,也就是说当用户向服务器请求数据时,服务器不用即时生成数据,而是将先前准备好的图片数据拼接成用户需要的范围,并返回给用户,这在一定程度上极大地降低了服务器和网络宽带的负担.

相对于具有较强商业性的GoogleEarth,World Wind 是完全免费的,其本身并不是一个应用程序,而是一个SDK,能够提供完全开源的API 来进行软件开发的工具包,其数据也更全面,结构更开放,支持加载GoogleEarth 的KML 文件.

World Wind 地图的实现主要包含以下几个步骤:

1)使用Gradle 将World Wind 库添加到项目中;

2)在Activity 对应布局文件中添加FragmentLayout;

3)在Activity 中创建一个WorldWindow 的实例并添加到FragmentLayout 中;

4)要使得WorldWind 地球能够下载图像,需要将下面两个网络访问权限添加到AndroidManifest 中.

<uses-permission android:name=”android.permission.INTERNET”/>

<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>

3.2 网络通信技术

Android 提供了两种常用的网络通信方式,分别包括使用TCP/IP 协议的Socket 通信以及另一种基于HTTP 协议的[17].本系统研发采用基于TCP/IP 协议的Socket,主要是因为HTTP 采用了“请求-响应”方式,服务器不能主动向客户端发送消息,而系统的进一步完善,服务器发送、更新以及服务器主动确认客户端实时位置等可能都需要服务器向客户端发送请求;TCP是面向连接的,其三握手原则能确保将连接的不稳定性降到最低.而不采用UDP 套接字是因为UDP 不是面向连接的,不需要在数据传输之前建立连接,并且在接收到数据之后也不会向数据源发送确认信号.发送端没有接收到确认信号,便无法确认是否数据成功发送到对方手上,当然也不需要你重新发送数据,因此它是一种没有连接、缺乏可靠性的一种数据传输协议.而地质数据十分重要,保证数据传输的可靠性、安全性决定了我们应该使用TCP 套接字.系统Android 客户端和服务器端利用Socket 进行数据交互通信的具体流程如图5所示.

3.3 多线程技术

Android 一般会将线程分为两种,其中一种叫做Main Thread,其余的线程则被称为Worker Thread.当用户在运行某个程序的时候,Android 操作系统都会开启一个主要的线程给该程序,这个线程主要被用来加载UI 界面,与用户进行交互并将交互结果根据需要显示到屏幕上,这个线程通常被称为Main Thread,又叫UI Thread.程序要想在Worker Thread 中更新Main Thread 的UI 界面,这就涉及到Worker Thread 和Main Thread 之间的消息通信问题[18].Android 操作系统为开发人员提供了处理多线程之间的消息通信问题的两种方式:Handler 机制和AsyncTask 机制.

(1)通过Handle 机制来实现的通信方式:Android 一般使用Handler 处理线程中的消息队列,每当线程中的Looper 对象获取到消息队列传过来的某个消息时,Handler 就会把该消息发送给对象,每个线程中只能包含唯一的一个Handler 对象,使用该Handler对象便可以向其对应的线程传递消息,即Message 对象;Handler 一般用于实现某一个定时的任务或者用于线程之间的数据传递.

(2)通过AsyncTask 机制来实现的通信方式:Async Task 通过将线程池和Handler 进行封装来处理线程间的通信问题,其优点在于能够比较方便地在主线程中进行用户界面更新,主要是因为AsyncTask 中拥有一个Handler 对象,能够向主线程传递消息并让其更新界面;使用线程池是为了避免不必要的线程创建和销毁.

本文使用多线程机制主要是为了进行网络数据请求,在进行网络请求时,往往耗时较久,需要在子线程中进行,由于Handler 具有结构清晰,函数定义清晰等特点,本文也不需要AsyncTask 所包含的线程池进行管理,因此采用Handler 机制来解决主线程与工作线程之间的通信问题,具体实现流程如图6所示.

3.4 数据存储技术

数据持久化通常指将存储在某个存储器中的临时数据存储到设备中,确保设备关闭时数据不会丢失.本系统采用了两种数据持久化方式:文件存储到SD 卡和SQLite 数据库存储.文件存储到SD 卡中主要用于存储较大的图幅切片,结构性复杂、数据量大的关系型数据存储到SQLite 数据库.文件存储不会对保存的数据做任何格式化的处理,任何数据都是按照其原本的状态存储到对应的文件中,文件存储适合粗出二进制数据或者不是很复杂的文本数据.SQLite 数据库作为一种轻量级的关系型数据库,占用了非常少量的系统资源,读写速度非常快,被广泛应用于移动通信中.SQLite 数据库文件存放在应用程序根目录下的databases 目录里面,不仅支持标准的SQL 语法,还支持数据库的ACID 事务,相对于其他的数据库,其方便之处在于不需要用户名和密码等访问权限.Android 正是通过将其设置为操作系统自带的数据库,进一步促进了数据的本地持久化.

图5 客户端与服务器通信流程图

3.4.1 图幅切片存储到SD 卡实现步骤

1)创建File 类,指向图幅切片保存位置;

2)创建File 类对应的缓存输出流BufferOutput Stream;

3)将字节流数列转换为Bitmap 对象;

4)调用Bitmap 类下的compress 方法将图片以png 文件格式保存到SD 卡对应目录中.

3.4.2 SQLite 存储数据实现步骤

1)完成LitePal 的配置工作;

2)创建数据库并创建需要的数据表;

3)继承DataSupport 类,实现增、删、改、查功能.

4 系统运行效果测试

本系统已在Android 系统的设备上进行安装调试,并通过大量的测试,对系统的功能进行优化和升级,最终版本已经应用到实际工作中,并取得较好的效果.系统安装及运行效果如图7所示.根据实际业务需求,系统实现了高空鸟瞰图与地平线视角两种显示方式,供用户在实际应用中进行选择,运行效果如图8所示.

图6 客户端获取图幅多线程数据通信流程图

图7 系统安装及运行界面

三维展示模块能够很好地展示地球的各种宏观形态,通过旋转,可以从多种角度来观察地球上投影的地形地貌;通过“日夜循环”模式,模拟飞行器绕地飞行,宏观地观察地面的各种复杂地形情况,方便规划野外地质勘查路线;也能够实现地标拖拽、纹理分析及模型搭建等.

图8 高空鸟瞰图、地平线视角

5 总结

本文针对地质数据野外采集与数字化的实际问题,集成World Wind 地图技术、网络通信技术、多线程技术和数据存储技术,设计并实现了一种基于World Wind 移动端的地质数据野外采集系统,替换传统的纸质录入方法和掌上电脑平面文本录入的方法.基于北斗/GPS 与移动网络的综合定位策略研究取得了较好的成果;基于移动GIS 的可视化数据采集用户接口,实现了结构化与非结构化的原始数据矢量化地质底图的实时定位录入;基于WorldWind 移动GIS 图形编辑、导航及投影研究取得了突破性成果;本系统的研发提高了资源勘查工作的效率,减少工作人员数量,降低资源勘查的成本;利用移动互联网的普遍性、便捷性以及安全性实现野外地质工作的信息化采集、浏览和展示,为用户提供了一种全新高效的工作方式.

图9 数据增删改查效果图

猜你喜欢
线程投影定位
5G终端模拟系统随机接入过程的设计与实现
全息? 全息投影? 傻傻分不清楚
投影向量问题
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
银行业对外开放再定位
找投影
找投影
少儿智能定位鞋服成新宠
把握新定位、新要求 推动人大工作创新发展