基于Android的GIS县域遥感监测系统
2020-04-08朱行辉王玉静
朱行辉,刘 剋,王玉静,郭 畅
(1.河北工业大学 电子信息工程学院,天津 300400;2.河北省航天遥感信息处理与应用协同创新中心,河北 廊坊 065000)
0 引 言
近年来,在“互联网+”的新形态下,智能移动终端和移动GIS的飞速发展,为地理信息的移动应用提供了新的机遇。移动地理信息系统(mobile geographic information system, mobile GIS),以移动互联网为支撑,依赖于具有移动数据处理能力的移动终端,具有移动空间定位、空间位置信息的可视化、数据加载与输出等特点[1-4],同时随着智能终端的性能优化,为移动GIS的程序应用提供了多样化的终端设备,使之逐步成为继桌面GIS和WebGIS之后一个新的信息技术热点[5]。为满足移动GIS各个领域的需求,北京超图公司推出了SurperMap iMobile for Android,Esri推出了ArcGIS Runtime SDK for Android等开发包,使Android成为具有地图浏览、空间分析、离线编辑、要素编辑、地理编码、定位导航等功能的应用程序,目前已广泛应用于园区管理、信息采集、管线管理等各个领域。如牛颖超等人基于Android智能终端结合ArcGIS for Android技术研发了具有地图浏览、空间分析等功能的现代农业产业园区管理系统[6];张海瑞等人基于ArcGIS for Android和移动GIS技术开发了具有离线编辑、定位导航等功能的野外实习数据采集与导航系统[7];钟广锐等人利用ArcGIS For Android,结合智能手机技术构建具有地理编码、要素编辑等功能的城市地下管线的移动巡查系统[8]。
传统的县域遥感监测,需要借助多源、多分辨率、多波段的遥感影像,采用纸笔方式记录专题信息数据,使用大量的人力物力对数据整理分析,不仅处理流程繁琐,数据获取的时效性和精准性均无法保证。随着技术的发展,县域遥感监测开始趋于智能化、信息化。采用基于Android开发的便携式移动终端,能够精准、快捷地获取和统计分析资源数据[9]。因此本系统将Android移动终端技术、移动GIS技术及卫星定位技术融合在一起,设计一套完整的县域遥感监测技术流程,以河北省廊坊市为研究区域,旨在实现农业、林业和环保等行业领域便利的资源监测和统计分析,基于Android开发了移动端的县域监测系统,集地图服务、专题信息查询以及数据统计分析等功能于一体,辅助相关工作人员对县域的资源管理提供更为科学的决策依据,同时提高相关部门工作效率和质量。
1 系统架构及功能
1.1 系统开发环境
县域遥感监测系统的开发环境是由Android Studio3.1、Java Development Kit1.8.0(JDK)、Software Development Kit 28.0.2(Android SDK)以及ArcGIS Runtime SDK for Android100.2构建。Android Studio基于IntelliJ IDEA,提供了集成的Android开发工具用于应用程序的开发和调试[10-11]。JDK是Java 语言的软件开发工具包,为Java提供了运行环境(JVM+Java系统类库),是Java软件开发的核心;Android SDK是Android软件开发工具包,Android 具有完全开放性,为开发者提供了一个更大的自由平台[12-14];ArcGIS Runtime SDK for Android开发工具包主要用于地图应用的开发,便于开发者使用Java开发地图应用并部署于Android移动终端之上[15]。
1.2 系统架构
以县域遥感监测为目标设计移动应用系统集成架构,依照Android开发的设计思想,主要由展示层、业务层、数据层与应用层构成。展示层提供人机交互界面,显示和接收输入的遥感信息,并为操作人员提供信息展示平台;业务层是县域遥感监测系统的核心层,主要负责业务逻辑的处理以及展示层与数据层的数据的传递和逻辑处理;数据层主要是对数据库的操作层,负责空间数据、属性数据的读写和数据的存储逻辑规则,所读取的数据库包括用户信息数据库、县域遥感专题影像库、县域遥感属性信息库;应用层主要包括用户管理系统、专题信息查询系统和统计分析系统等。系统架构如图1所示。
图1 基于Android的GIS县域遥感监测系统架构
1.3 系统功能设计
系统包括用户管理、地图服务、统计分析、专题信息查询统计等四大功能模块。用户管理模块主要实现用户的注册登录和用户权限的管理等功能,并将用户信息存储于Android内置的SQLite数据库;地图服务模块运用ArcGIS Runtime SDK for Android开发工具包,最终实现地图展示和一系列地图实用操作等功能,地图操作包括地图的放大缩小、坐标转换、实时定位、地图截图、空间量测等功能;在统计分析模块中,通过绘制统计图、统计表对廊坊市县域中的玉米、小麦、林地等历年感兴趣的县域专题资源数据进行可视化分析。专题信息查询通过ArcGIS Server发布的服务获取数据并添加业务图层,最终得到资源信息空间分布状况。系统功能图如2所示。
图2 系统功能
2 主要技术
2.1 ArcGIS Runtime SDK for Android
ArcGIS Runtime Sdks是一个轻量级并且可以跨平台开发的工具包,它不仅包含WPF、QT等能开发桌面程序(C/S程序)的SDK,还包含Android、Windows Phone、IOS等可开发移动终端的SDK[16];ArcGIS Runtime SDK for Android是一种适用于Android系统的开发工具,可以使用户通过Java语言开发移动GIS应用程序,完成系统中地图服务模块。以下为ArcGIS for Android地图显示的关键代码:
Basemap basemap=Basemap.createStreets();
ArcGISMap map=new ArcGISMap(basemap);
mMapView.setMap(map);
2.2 Android位置服务
定位模块采用ArcGIS Runtime SDK for Android提供的接口调用移动终端内置的定位系统,通过LocationDisplay类实现当前位置所在显示地图中的展示。使用LocationDisplay定位之前必须在Android平台为应用程序分别授予INTERNET、ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION权限,实例化一个LocationDisplay对象,采用setAutoPanMode方法设置定位模式,并调用startAsync函数开始接收位置信息并在地图界面显示。下面为定位模块的核心代码:
locationDisplay=mMapView.getLocationDisplay();
locationDisplay .setAutoPanMode(LocationDisplay.AutoPan Mode.RECENTER);
locationDisplay .startAsync();
2.3 Android端与服务器的通信
Android移动端和服务器数据交互主要采用Http通信方式,目前Android提供的通信方式有两种:HttpURLConnection和HttpClient。其中HttpURL Connection一般用于收发流式数据,而HttpClient对Http通信的封装更为全面,因此本系统在子线程中使用HttpClient的通信方式与服务端进行通信。服务器端的Web架构采用ASP.NET技术搭建,用于接收移动端get或post请求。在业务逻辑处理模块,根据移动端的请求,利用ADO.NET提供的接口获取数据库中所需求的数据,数据传输格式采用轻量级Json格式,相对于传统的XML文档的数据传输方式更加高效、便捷,最终将数据传递至移动端并显示在Android终端上。以下为get方式请求的关键代码:
HttpResponse httpResponse = httpClient .Execute(httpGet);
3 系统功能实现
3.1 地图服务
地图服务主要包括地图展示和地图操作两部分。地图展示模块利用ArcGIS Runtime SDK for Android开发工具包及其所提供的地图对象(MapView)作为展示地图的容器,实例化ArcGISMap,加载Basemap底图,添加OperationLayers图层,最终完成地图展示功能。地图操作模块主要包括地图的平移、放大缩小、空间量测、地图截图、定位服务、坐标变换等功能。管理人员可以手动选择地图上的目标区域进行操作,平移挪动至目标位置,通过放大缩小功能将地图改变为用户最佳视角。为使管理人员能够在查阅的同时保存用户操作记录,添加了地图截图功能,将截图记录保存至手机本地目录。空间量测功能通过创建Polygon对象记录所需测量区域的边缘坐标并画出多边形区域显示在地图界面,调用calculateLength2D()和calculateArea2D()分别计算周长和面积,实时定位模块利用Android移动设备的GPS模块获取当前位置经纬度信息,采用LocationDisplay.getLocation()函数得到位置的坐标系为WGS84,然后使用坐标转换将WGS84坐标系转变为当前底图的坐标系,最终实现定位。底图管理根据用户需求选取不同类型底图,主要有卫星影像图、交通图等。功能实现如图3所示。
图3 功能实现(1)
3.2 专题信息查询
在专题信息查阅模块,用户通过区位(空间)、年份(时间)作为筛选条件,可实现目标县域资源信息空间分布查询、数据统计等功能。此模块主要通过借助ArcGIS Runtime SDK for Android工具包,获取ArcGIS Server发布的服务数据,添加OperationLayers业务图层,最终将所请求的专题产品空间分布状况显示于移动终端。以2018年廊坊市安次区林地为示例,功能实现如图4所示。
图4 功能实现(2)
以下为专题信息分布查询模块功能实现的关键代码:
ArcGISMapImageLayer map=new ArcGISMapImageLayer(url1);
bs_map.getOperationalLayers().add(map);
MapView.setMap(bs_map);
3.3 统计分析
统计分析模块主要实现了数据查询、数理统计、数据分析、统计排名四部分功能。数据查询分析模块通过使用多种类型统计表,直观且形象地将县域的农业、林业、环保等监测数据展示于界面,统计图的实现技术为MPAndroidChart开源图表库,统计表类型有:柱状图、折线图、饼状图、年际变化分析、区域变化分析等;统计排名采用绘制统计表的方式,有条理性地展示地理空间对象和县域专题产品数据之间的关联,统计表的实现采用ListView控件;数理统计分析主要计算选定县域的专题产品数据的总和、均值及其变化分析并绘制其统计图,使变化趋势更为数字化、可视化。以2018年廊坊市小麦为示例,功能实现如图5所示。
图5 功能实现(3)
4 结束语
本系统基于Android智能终端,以Android Studio为研究平台,通过ArcGIS Runtime for Android、Http通信、GPS等技术的结合开发。针对县域遥感监测需求,具有地图服务、县域专题空间信息查询、数据统计分析、定位服务、空间量测等功能。系统能够将遥感监测信息进行有效的统计分析,在河北省廊坊市的农业、林业和环保等部门得到了很好的应用,能为县域遥感监测管理人员提供便利的、及时的时空资源监测信息,为相关管理人员提供可靠的参考依据和技术支持。
目前主要立足于资源信息数据的查询展示以及统计分析等基础功能,后续将加大对专题信息的数据分析和深度挖掘,并对系统功能进行移植和拓展,从当前研究的廊坊市县域向其他省市或者向更低一级的乡镇级别推进示范。