APP下载

基于Android的校园植物园系统的实现

2016-05-14陈昊史守正

数字技术与应用 2016年8期

陈昊 史守正

摘要:针对高等教育缺少对植物方面的人文教育、校园植物园利用率低下等问题,利用ArcGIS Runtime SDK for Android移动开发技术,基于苏州科技大学石湖校区校园地图以及存储于SpatiaLite数据库中的校园植物数据库,开发出基于Android平台的校园植物园系统。该系统可以满足用户在校园内随时随地地学习、观赏植物,使校园植物园得以充分利用。

关键词:校园植物园 ArcGIS Runtime SDK for Android SpatiaLite

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9416(2016)08-0188-02

高校的绿化建设是校园建设中非常重要的一项内容,每所学校都有大面积的绿化植物,这些植物都是增进学校人文教育的重要途径。通过调查发现虽然当代大学生非常喜欢校内植物,但他们对校内很多植物的名称和特性都一无所知。由此可见,很多学校还是缺乏人文教育,而且没有充分利用好校内资源。很多学者都针对这一问题展开了研究,例如兰思仁的福建农林大学教学植物园探析[1]。随着信息时代的发展,很多学校也提出建立虚拟校园植物园,如沈莹的校园虚拟植物园建设实践研究[2],但大多都是以计算机为固定终端设备,因此无法满足师生在校园内随时随地去学习、观赏植物。

移动GIS是以智能手机或平板电脑为终端GIS系统,是继桌面 GIS、WebGIS之后又一新的技术热点[3]。基于Android手机系统,借助ESRI公司提供的ArcGISRuntime SDK for Android插件,即能通过Eclipse平台进行手机APP开发,设计出一款基于校园植物的的移动地理信息系统,可以很方便帮助校内师生随时随地欣赏、学习校园植物。

1 系统开发理论基础

1.1 ArcGIS Runtime SDK for Android简介

ArcGIS Runtime SDK for Android基于Android的GIS软件开发包,它为开发者提供了定位、地理数据采集、空间数据分析等诸多空间数据处理方案[4]。虽然ArcGIS Runtime SDK for Android目前具有很多功能,但是在处理离线矢量数据方面,ArcGIS Runtime SDK for Android的功能比较差,加载大量的离线矢量数据时很慢,无法进行复杂的编辑功能。

目前ArcGIS Runtime SDK for Android已经拥有很多版本,10.2.4及之前的版本,开发者可将封装的ArcGIS Runtime SDK for Android插件在Eclipse中下载后,即可调用该插件进行开发编程。10.2.4之后的版本,支持基于Gradle自动化构建工具的Android Studio集成开发环境[5]。

1.2 SpatiaLite简介

SpatiaLite空间数据库是一个简单、实用的轻量级数据库,它是在SQLite的基础上增加了对空间数据的支持,具有管理空间数据的能力。它遵守OGC标准,支持SQL语言对几何类型字段的操作[6]。SpatiaLite操作简单,易于管理GIS环境下中小型GIS数据库,支持R-tree的数据检索,数据库的访问速度快,很适合在Android设备上进行空间数据管理,正好可以解决ArcGIS for Android对离线矢量数据处理能力差的难题[7]。

2 系统设计

校园植物园系统(BG University)是以掌上电脑或智能手机为硬件开发平台,在Eclipse3.7平台上下载ArcGIS Runtime SDK for Android10.2.4插件进行二次开发,并通过SpatiaLite管理工具SpatiaLite GUI存储、管理校园植物的空间数据和属性数据。

2.1 功能设计

本系统主要功能分为定位,地图浏览与操作,植物查询与编辑,校内导航和辅助功能,具体的功能结构(如图1所示)。

2.1.1 定位

系统可通过Android设备中的GPS、移动通讯网络、WIFI网络来进行定位。

2.1.2 地图浏览与操作

校园地图可加载离线2D平面图与遥感影像,地图除了可以支持放缩、平移、旋转等基本功能,还利用Android提供的方向传感器,使地图随着用户面对的方向进行旋转,方便用户识别地图,查看植物信息。

2.1.3 植物查询、编辑

植物查询不仅包含关键字查询、分类查询,还通过定位功能+缓冲区组成的附近查询功能。植物编辑功能可满足用户对校内植物进行更新,修改等操作, 保证了校园植物数据库的实时性,有效性。

2.1.4 校内导航

校内导航是分为人行导航与车行导航,通过路径分析,为用户提供最优路径,方便用户快速到达目的地。

2.1.5 辅助功能

辅助功能包括拍照、微博分享、意见反馈,植物好搜百科链接,学校简介,关于我们,一键退出等功能。

2.2 数据库设计

系统数据库设计是校园植物园系统建设的关键。校园植物数据库的所有数据都储存在SpatiaLite数据库中。数据库主要包括为两个部分,即校园植物信息和植物最佳观测点信息,(如图2所示)。对于校园植物的属性信息需要注意的是:校园植物的属性信息包含两张表,attributes表存储目前校园内所有植物的属性信息,当校园种植新植物时,新植物的属性信息将存储在attributes1里。

3 系统主要功能实现

3.1 底图数据的制作

系统使用的校园底图有2D平面图和遥感影像图,它们都是切片包tpk格式。tpk主要是用于将紧凑型切片文件打包形成离线地图包,它相当于一张图片,没有属性信息。Tpk的制作步骤:(1)在ArcMap选择Customize > ArcMap Options > sharing,确保“Enable ArcGIS Runtime Tools”被勾选上;(2)在ArcMap中选择File > Share As > Tile Package;(3)在Tile Package选项卡下设置文件存储路径;(4)在Tile Format中设置相关参数;(5)在Item Description中设置描述信息;(6)生成tpk文件。

3.2 两种地图旋转方式的灵活切换

其一是通过监听用户的手势操作对地图进行任意旋转。其二是通过使用Android方向传感器,监听手机对应的方位,校园地图随即旋转到该方位。系统中通过一个按钮来切换两种地图旋转方法。为了保证系统的运行效率,第二种旋转方法的编码是利用Runnable接口实现多线程,核心代码如下:

//首先创建一个传感器管理器和一个传感器监听器

private SensorManager sensorManager;

//这个监听器由自己定义,在方向感应器感应到手机方向有变化的时候,可以采取相应的操作

private MySensorEventListener mySensorEventListener= new MySensor EventListener();

private final class MySensorEventListener implements SensorEventListener{

@Override

//可以得到传感器实时测量出来的变化值

public void onSensorChanged(SensorEvent event) {

//方向传感器

if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){

// direction表示手机指向的方位

float direction = event.values[0];

}

//当监听到手机方位时,便可将地图旋转到对应的方位

mMapView.setRotationAngle(-direction)。

3.3 WKT字符串与Geometry的转换

系统在进行植物查询与编辑时,需要进行点、线、面状植物的WKT字符串与几何对象的互转,即实现SpatiaLite中POINT、LINESTRING、POLYGON的WKT字符串与ArcGIS Runtime SDK for Android 中Geometry的Point、Polyline、Polygon的互转。

在Geometry生成WKT字符串时,很多资料把Polyline、Polygon放在一个情况下讨论,由于WKT中线是用LINESTRING表示,因此系统是把这两个类型分开讨论。

//Polygon情况下的生成代码

if(“POLYGON”.equals(type.name())){

MultiPath pg = (MultiPath)geometry;

geoStr = type.name()+”(“+””;

int pathSize = pg.getPathCount();

for(int j=0;j

String temp = “(“;

int size = pg.getPathSize(j);

Point pt = pg.getPoint(i);

temp+=pt.getX()+””+pt.getY()+”,”;}

Point pt = pg.getPoint(0);

temp+=pt.getX()+””+pt.getY()+”,”;

temp=temp.substring(0,temp.length()-1)+”)”;

geoStr +=temp+”,”;}

geoStr = geoStr.substring(0, geoStr.length()-1)+”)”;}else

//Polyline情况下的生成代码

if(“POLYLINE”.equals(type.name())){

MultiPath pg = (MultiPath)geometry;

geoStr = “LINESTRING”+””;

int pathSize = pg.getPathCount();

for(int j=0;j

Point pt = pg.getPoint(i);

temp+=pt.getX()+””+pt.getY()+”,”;}

temp=temp.substring(0,temp.length()-1)+”)”;

geoStr +=temp+”,”;}

geoStr=geoStr.substring(0,geoStr.length()-1);}

4 结语

校园植物园系统可以满足用户在校园里随时随地学习、观赏植物,有助于提高学校人文科学教育。系统中包含了学校内所有植物,植物信息全完善,并且可以在完全离线的情况下使用该系统。同时系统也提供了每个植物的好搜百科链接,以及微博分享等功能,方便用户进一步全面学习植物知识。

参考文献

[1]兰思仁,朱里莹,董建文,等.福建农林大学教学植物园探析[J].福建林业科技,2014,44(2):127-131.

[2]沈莹.校园虚拟植物园在教学中的应用[J].现代园艺,2016(2):219-220.

[3]王世举,杨斌,高桂胜,等.移动GIS在数字校园服务中的应用与研究[J].理信息世界,2015,22(3):38-44.

[4]李越.基于Android的地质灾害野外调查信息采集系统的设计及实现[D].云南:云南大学,2015.

[5]聂上森.基于ArcGIS Runtime SDK的外业数据采集系统设计与实现[D].成都:西南交通大学,2015.

[6]李玲,王庆,王慧青.基于Spatialite轻量级空间数据库的GIS数据管理[J].地理信息世界,2010(4):71-75.

[7]张海瑞,吴学饶,兰小机.基于ArcGIS for Android野外实习数据采集与导航系统的实现[J].测绘工程,2015,24(3):36-39.