APP下载

基于移动GIS的油田信息查询系统*

2016-04-20张世彬张余强卿粼波何小海

计算机与数字工程 2016年3期

张世彬 张余强 卿粼波 何小海

(1.四川大学电子信息学院图像信息研究所 成都 610065)(2.成都西图科技有限公司 成都 610065)



基于移动GIS的油田信息查询系统*

张世彬1张余强2卿粼波1何小海1

(1.四川大学电子信息学院图像信息研究所成都610065)(2.成都西图科技有限公司成都610065)

摘要为加快数字化油田的建设和提高油田行业的生产效率,通过分析移动GIS在油田行业的发展现状,同时结合数字化油田建设的现实需求,在Android平台上设计和实现了基于移动端百度地图的油田岩心图文信息查看系统,主要为方便油田工作人员在移动环境下对油井位置信息以及岩心图文信息的查看,并给出系统的设计架构和主要的技术实现,旨在促进移动GIS在数字化油田中的发展。

关键词移动GIS; Android; 百度地图; 岩心图文信息

Field Information Query System Based on Mobile GIS

ZHANG Shibin1ZHANG Yuqiang2QING Linbo1HE Xiaohai1

(1. Image Information Institute, School of Electronics and Information Engineering, Sichuan University, Chengdu610065)

(2. Chengdu Xitu Technology Co. Ltd., Chengdu610065)

AbstractIn order to speed up the construction of digital oilfield, and improve the efficiency of the oil field industry production and work, the analysis of the development of mobile GIS in the oil field industry status quo is conducted. Combined with the realistic requirement of digital oilfield construction at the same time, on the Android platform the oilfield core graphic information check the system is designed and implemented based on the mobile baidu map, mainly for the convenience of oilfield workers on well location information in mobile environment, and the core view of graphic information. And the design of the system architecture and key technology are given, it is aimed to promote the development of mobile GIS in digital oilfield.

Key Wordsmobile GIS, Android, baidu map, core graphic information

Class NumberTP911.73

1引言

随着互联网在移动端的蓬勃发展,移动GIS是继桌面GIS、WEBGIS之后又一新的技术热点,移动定位、移动办公等越来越成为企业或个人的迫切需求,移动GIS就是其中最核心的部分。在数字化油田的建设过程中,以移动终端的GIS系统为平台提供应用,还是一个比较新颖的方式,相关的探讨和应用正在不断发展。如刘挺、蔡永香等提出的数字油田移动信息系统的构建,给出了基于Android的移动GIS的技术架构,对构建该系统的关键技术移动通信、移动定位等进行了分析[1],同时也有不少具体应用产生出来。袁满等结合3G通信、GPS定位以及无线数据同步等技术,借助ArGis Mobile移动平台开发出油田移动GIS,解决了油田日常生产管理中数据不能实时传输的问题[2]。宋伟强和肖光荣等采用移动GIS辅助油田管线巡检,为站库管理人员提供了方便[3]。为此,笔者结合油田行业对岩心图像相关信息以及油井位置信息经常需要移动查询的需求,采用当前主流的移动端平台Android和百度地图的LBS服务,设计和实现了在移动GSI地图中查看油田信息以及对应油井岩心图文信息的查询系统。

2系统总体框架

本系统采用MVC分层体系结构,从逻辑上分别划分为终端显示层、通信和业务处理层、数据层。终端显示层采用Android手机提供显示数据和交互的功能,Android终端主要通过异步通信的方式,一方面通过百度云地图提供的API接口请求百度的商业图层作为底图显示,另一方面使用ASP.NET框架提供的一般处理程序接口来请求油井位置信息以及各油井的岩心图文信息,最后将图层和数据信息进行叠加,呈现在Android终端的屏幕上,数据通信和业务层主要根据移动终端显示层的交互,进行相应的业务逻辑处理,并将处理后的业务数据封装为JSON数组的形式传输给移动终端,数据层主要使用ADO.NET技术对关系型数据库进行增删改查操作,获取数据表的基本数据提供给业务层进行整合处理。系统的总体框架图如图1所示。

图1 系统框架图

3系统主要功能

3.1显示油井位置功能

图2 显示油井位置

通过接入百度商用地图,在百度栅格地图上宏观显示油田数据库中存储的油井地理位置和其他简要信息。首先接入百度地图的SDK和相关API接口,使用Android的异步加载技术,初始化地图显示控件,然后和油田Web服务器进行通信,利用一般处理程序(HttpHandler)提供的数据接入接口,获取油井信息,呈现在Andorid终端的视图控件中,并且为每个油井标注点设置监听处理程序。该功能的大体处理流程如图2所示。

3.2浏览油井的岩心图文信息

通过用户的交互操作,以某一口井为入口进入到该井的信息浏览系统中,然后移动端以该井为标志位与服务器通信,加载该井下的相关岩心图文信息,并且可对具体图文信息进行评价,并将评价信息上传到油田数据库中,方便相关专家的查阅,同时为Android设计了自动更新下载以及自定义图文控件的功能。图文信息查看主要包括白光平扫、白光滚扫、荧光扫描、特殊图像等图文信息查看。

4系统关键技术实现

本系统中,为实现在百度地图上查看油井位置和油井的岩心图文信息,主要涉及的关键技术为接入百度地图作为底图、Android手机和Web服务器通信以获取油井位置和其中的图文信息、优化ListView的信息显示、自定义一个图文显示组件用来显示岩心图文信息和Android软件自动更新下载功能的实现。

4.1Android端接入百度地图

在本系统中,采用商业地图作为初始化的标准地图,为此就必须首先加载和设置相关的商用地图。当前移动端GIS地图的提供厂商主要有百度地图、谷歌地图等,各个地图提供商均采用各自的地图坐标系,为实现移动GIS地图的正确显示,必须要能够实现各个坐标系的相互转换。国际经纬度坐标标准为WGS-84,它是直接通过卫星定位获得的坐标,国内必须至少使用国测局制定的火星坐标系GCJ-02,对WGS-84地理位置进行首次加密后生成的坐标系,百度坐标系在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私,谷歌中国地图采用的是GCJ-02地理坐标系,且谷歌中国地图的服务器在中国不是很稳定,为此采用百度端的商用地图作为底图,这就要实现经纬度坐标系WGS-84到百度坐标系的转换,由于无法实现两者坐标系的直接转换,就必须使用火星坐标系作为中介,实现向百度坐标系的转换,为此必须在接入百度地图的接口中设置坐标系为百度的经纬度坐标系bd09ll。接入百度API的关键代码如下:

//使用SDK各组件之前,初始化context信息,传入ApplicationContext

SDKInitializer.initialize(getApplicationContext());

setContentView(R.layout.activity_main);

//设置经纬度坐标系

LocationClientOption option = new LocationClientOption();

option.setOpenGps(true);// 打开gps

option.setCoorType("bd09ll"); // 设置坐标类型

4.2Android端与Web服务器的通信

由于在本系统中,移动Android端需要经常和油田服务器进行数据双向传输,而在Android端,阻塞一个UI主线程多达5s之后,一般会造成ANR(Application Not Responding)情况的出现,因此执行获取服务数据的耗时操作是无法在主线程中执行的,需要重开一条线程进行处理,在这里采用Handler+MessageQueue+Looper的消息队列机制来解决同一进程中两个线程间的通信问题。子线程被创建时,会对应地与一个消息队列绑定,当在子线程中通过Handler发送消息到消息队列后,Looper会循环不断地从消息队列中取出消息交由主线程中Handler处理。消息机制的处理流如图3所示。

图3 消息处理机制

Android与服务器通信通常采用HTTP通信方式,Android目前提供两种Http通信方式:HttpURLConnection和HttpClient。HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient对Http通信的封装更加全面。因此,在子线程中采用HttpClient的方式与服务端进行通信,以下为使用HttpClient和get方式请求的关键代码:

HttpResponse httpResponse = httpClient.execute(httpGet)

在服务端的Web架构主要使用Asp.NET技术进行构建,接收移动端Http的get或post请求,在业务处理时,根据移动端的Http请求,利用ADO.NET提供的接口直接获取数据库中数据表的相关数据,并且将数据传递到移动端,以往的发送数据的方式主要采用XML文档的方式,这种方式一方面在服务端需要组装XML的数据节点,另一方面在移动端需要解析XML节点,效率低下,这里采用一种轻量级的数据传输格式Json,Json格式主要以键值对的形式存储数据,如{"key":"value"},并可以在大数据量传输时,封装为Json数组的形式传递,以下为获取一条白光平扫信息记录的Json数组格式:

{"ret":0,"data":{"list":[{"title":"1-130-3-6.jpg","commentcount":3,"manage":"扫描人:张三","nid":11,"range":"扫描长度:1005.1-1005.2 (m)","ptime":"2015-06-01 15:12:32"}],"totalnum":1},"msg":"ok"}

通过Json数组的形式,可以获取油井位置以及岩心图文信息,并将其显示在Android手机上。

4.3设计分批显示机制优化显示性能

对Android前端显示控件ListView的数据显示进行优化,该控件采用MVC的设计模式进行数据显示,ListView初始化时,在主线程中将服务器端的传递回来的Json数组作为数据模型,使用Android SDK提供的数据适配器作为控制器,将模型数据填充到视图ListView控件上,当视图控件发起状态查询时,数据模型就会发生改变,这时需要控制器将更新之后的数据模型重新填充到视图控件上,并且通知视图控件刷新显示界面。

在ListView中主要使用数据适配器(Adapter)来填充从服务端获取的井号相关数据,由于一次请求一口井的所有数据会造成ListView加载数据缓慢甚至出现内存溢出情况,为此必须限制每次请求的记录数,在系统设置了一个全局变量用来控制视图控件加载的数据范围,采用分批加载的策略来加载数据,关键在于设置每次Http请求的数据范围,因此每次Http的get请求中都附加了请求参数,如请求白光平扫信息时,设置整型变量startId作为每次请求数据的起始值,设置整型count作为每次请求的记录总数,整型变量cId作为请求信息的类别,以下为请求白光平扫信息的第1条到第5条记录的http请求:

http://192.168.1.56/web/getBgps.ashx?startId=0&count=5&cId=1

为了提高程序良好的交互性,在信息显示处增加了获取下一批记录的操作,在没有加载数据要显示时,会给出良好的提示。

4.4实现自定义图文显示控件

针对系统中需要同时显示和查看油井下的图片和文字描述信息,而Android SDK自身视图控件不能满足在一个控件中图文并显的实际需求,为此采用Android的基本组件TextView和ImageView自定义一个图文同时显示的视图组件,自定义组件的开发必须遵循Android组件开发的准则,在这里选用LinearLayout作为自定义控件的父类,继承LinearLayout的必要布局属性,为了能够自由定义基本属性,必须在资源文件attr.xml中声明该组件的基本属性,以下XML文件为声明设置该组件的图片宽高以及文本的大小、颜色:

〈declare-styleable name="customview"〉

〈attr name="image_width" format="dimension" /〉

〈attr name="image_height" format="dimension" /〉

〈attr name="textSize" format="dimension" /〉

〈attr name="textColor"/〉

〈/declare-styleable〉

为了能够在布局文件中正确显示自定义视图组件,必须要在布局文件中引入自定义组件的命名空间,且由于Android的内部机制,在组件使用时必须完整引入自定义组件的包名,使用组件时的关键设置如下:

〈com.scu.info.view.customview

android:id="@id/news_body_details"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

szy:image_width="200dip"

szy:image_height="52dip"/〉

4.5自动更新下载实现

在本系统中,开发人员需要经常对App的升级维护,而移动端的版本为保持最新,必须要和服务端版本经常进行比对,为此设计自动更新下载功能,提高用户体验和增强交互性。移动端选择检查更新时,会自动请求与服务器通信,获取最新的App版本号,然后通过Android系统提供的PackageManager系统服务,解析出安卓清单文件中版本号和服务端的版本号进行比对,如果不匹配,则自动启动异步线程下载最新App,最后启用Android系统隐式意图执行Android的安装更新,若版本号一致,则给出最新提示。

5功能测试

5.1显示油井位置及简要信息

App初始化时,会自动加载来自百度的商用地图作为地图,同时请求本地数据库中油井数据,将两个图层叠加之后,会显示多个油井的地理位置,当点击某个油井标注点时,会显示该油井的简要信息,该功能显示如图4所示,点击详情查看后,即可进入该油井的图文管理信息主界面,功能测试显示如图5所示。

图4 显示油井位置及简要信息

图5 图文信息管理主界面

5.2油井图文信息查看

进入油井详情查看后,会使用显示Intent启动图文信息系统的主Activity,主界面显示如图5,根据GridView上显示的功能模块,可直接点击进入相关功能模块进行图文信息查看,这里以白光平扫模块的功能查看为例,进入到该油井白光平扫的图文查看中,功能测试正常显示如图6所示。

图6 白光平扫图文信息

图7 评论信息查看

图8 更新检测

当需要查看该白光平扫图片的评论时,点击查看评价,进入该白光平扫图片信息的评论信息查看中,功能测试显示如图7所示,当App版本和服务器端的App版本不一致时,会自动提示下载,该功能的测试如图8所示。经过以上测试,各个功能模块均能正确显示。

6结语

本文针对相关石油地质部门的办公需求,采用便捷的移动端设备加载百度地图为底图和油田油井的标注点图层相叠加,宏观地显示油田油井的位置,同时提供了地图层的相关操作,并以油井标注点为入口,进而可以查询到该油井相关的岩心图文信息,利用Android SDK提供的相关组件,采用了一定的机制优化了安卓端的图文显示性能,方便了油田工作人员在移动环境下对油井岩心图文信息的查看。

参 考 文 献

[1] 刘挺,蔡永香,肖克炎.基于Android的数字油田移动信息系统构建[J].长江大学学报(自科版),2014(10):40-42.

LIU Ting, CAI Yongxiang, XIAO Keyan. Digital Oilfield based on the Android Mobile Information System Construction[J]. Journal of Yangtze University(Science),2014(10):40-42.

[2] 郭玲玲,袁满.基于MobileSVG的油田移动GIS服务[J].微计算机信息,2009,25(22):123-125.

GUO Lingling, YUAN Man. MobileGIS based on MobileSVG Oilfield Services[J]. Microcomputer Information,2009,25(22):123-125.

[3] 宋伟强.基于Android的移动巡检系统开发[J].硅谷,2013(7):49-50.

SONG Weiqiang. The Mobile Inspection System based on Android Development[J]. Journal of Silicon Valley,2013(7):49-50.

[4] 董颖.基于Android平台的移动GIS旅游信息服务应用研究[D].上海:上海师范大学,2014.

DONG Ying. Based on the Android Platform of Mobile GIS Tourism Information Service Application Research[D]. Shanghai: Shanghai Normal University,2014.

[5] 安晓飞.一种基于Android的移动GIS技术实现与应用研究[D].上海:华东师范大学,2013.

AN Xiaofei. Based on the Android Mobile GIS Implementation and Application research[D]. Shanghai: East China Normal University,2013.

[6] 周峤.基于移动GIS技术的管道智能巡检系统开发与研究[D].大庆:东北石油大学,2013.

ZHOU Jiao. Pipeline Intelligent Inspection System based on Mobile GIS Technology Development and Research[D]. Daqing: Northeast Petroleum University,2013.

[7] 张芳芳,禹江.移动GIS应用中的通信技术探讨[J].信息通信,2015(5):188.

ZHANG Fangfang, YU Jiang. Communication Technology of Mobile GIS Application Study[J]. Journal of Information and Communications,2015(5):188.

[8] 朱佳佳,黄斌,姚明,等.基于GIS的电力线路巡检系统的设计与实现[J].电气应用,2015(10):141-144.

ZHU Jiajia, HUANG Bin, YAO Ming, et al. Power Line Inspection System based on GIS ofDesign and Implementation[J]. Electric Applications,2015(10):141-144.

[9] 李文闯.基于Android的移动GIS数据采集系统研究[D].北京:首都师范大学,2013.

Li Wenchuang. Mobile GIS Data Collection System based on Android Research[D]. Beijing: Capital Normal University,2013.

[10] 郭瑾,杨武年,易鹏.基于GoogleAndroid平台手机局域地图的实现[J].地理空间信息,2014(5):158-161.

GUO Jin, YANG Wunian, YI Peng. Based on GoogleAndroid Platform Mobile Local Map[J]. Journal of Geographic Space Information,2014(5):158-161.

[11] 陈飞翔,杨崇俊,申胜利,等.基于LBS的移动GIS研究[J].计算机工程与应用,2006,42(2):200-202.

CHEN Feixiang, YANG Chongjun, SHEN Shengli, et al. Mobile GIS based on LBS study[J]. Computer Engineering and Applications,2006,42(2):200-202.

中图分类号TP911.73

DOI:10.3969/j.issn.1672-9722.2016.03.020

作者简介:张世彬,男,硕士研究生,研究方向:图像处理与网络通信。张余强,男,工程师,研究方向:软件工程。卿粼波,男,博士,副教授,研究方向:信号与信号系统、图像处理、图像通信。何小海,男,博士,教授,研究方向:图像处理与信息系统、机器视觉与智能系统。

收稿日期:2015年9月5日,修回日期:2015年10月23日