一、引言
在地质找矿、测量、勘探等工作中需要即时的定位并使用地质数据地图,传统的纸制地图已经不能满足需求。随着智能手机的迅猛发展,智能手机平台将成为 GIS技术和互联网应用新的应用平台。本文提出并实现了一种基于Android 和SQLite数据库利用Google Map Api 的导航应用,能够给用户提供智能化的地质数据地图导航服务。
二、Android平台架构
Android是一种以基于Linux内核的开放源码操作系统,主要使用于便携设备。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,逐渐扩展到到平板电脑及其他领域上,现最新的版本是Android 4.0 Ice Cream Sandwich。Android平台从上层到底层由以下五部分组成架构分成:应用程序、应用程序框架、库、Android Runtime及Linux内核。
(1)应用程序Applications Android的配置搭载它的核心应用,包括email客户端,SMS程序,日历,地图,浏览器,contacts以及其它一些应用。所有的应用都是用java语言编写的。
(2)应用程序框架Application Framework 开发人员具有和核心应用相同的框架API访问权限。应用程序的构建模式被设计成简单的可重用的组件。所有应用能够分享他的能力,所有应用都是如此。这样允许用户在相同的机器上替换组件。
(3)库Libraries Android包含一整套C/C++库,用于构建Android系统的大量不同的组件。这些能力通过Android应用程序框架提供给开发人员。
(4)Android RunTime Android包含了一整套核心库,它为Java语言提供了很多有用的功能。三四两层在其他分层模式中有时被合并为一层。
(5)Linux 内核层 Android 基于 Linux内核开发的 ,它依赖内核提供的核心系统服务,如安全,内存管理,进程管理,网络堆栈和驱动模型。该内核另一个作用是提供一个屏蔽层用于屏蔽硬件和上层软件。
三、SQLite数据库简介
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,目前最新版本为 SQLite 3.6.11。
四、使用Android和SQLite进行Google Map的开发
(1)开始创建 Android Google Map 应用
进行开发前必须先获得Google Map API Key,创建一个工程,在建立工程时将com.google.android.maps的扩展库添加到工程中,这样就可以使用Google地图的所有功能;添加com.google.android.maps扩展库的方式是在创建工程时,在Build Target项中选择Google APIs;修改/res/layout/main.xml文件,在布局中加入一个MapView控件,并设置刚获取的“地图密钥”。仅在布局中添加MapView控件,还不能够直接在程序中调用这个控件,还需要将程序本身设置成MapActivity(com.google.android.maps.MapActivity);由于获取Google地图是需要使用互联网的,所以在运行前还需要在AndroidManifest.xml文件中,添加允许访问互联网的许可。
(2)数据的存储
数据的存储采用SQLite数据库。主要保存三类数据,一类是地质信息名称,一类是每次显示过程中读到的位置信息和地质信息,另一类是应用配置信息,如多久更新一次GPS,地图的默认级别等。前两种信息需要在使用中不断更新数据库,以使地质数据地图不断更新和完善。
(3)自定义地图的图层
通过在MapView上添加覆盖层,可以在指定的位置加添加注解、绘制图像或处理进行鼠标事件等。Google地图上可以加入多个覆盖层,所有覆盖层均都在地图图层之上,每个覆盖层均可以对用户的点击事件做出响应。本研究即通过MapView上添加覆盖层,并调用SQLite数据库信息在指定的位置添加地质图层信息以显示相应的地质数据地图。方法为在创建覆盖层继承Overlay类的子类,并通过重载draw()方法为指定位置添加注解,重载onTap()方法处理用户的点击操作。在覆盖层绘制图形或文字需要使用“画布”(Canvas)来实现,绘制的位置是屏幕坐标,这就需要将地图上的物理坐标与屏幕坐标进行转换。Projection类提供了物理坐标和屏幕坐标的转换功能,可在经度和纬度表示的GeoPoint点和屏幕上Point点进行转换。TextOverlay类是项目的覆盖层,主要重载了draw()方法,在指定的物理坐标上绘制了标记点和提示文字,代码如下:
1.public class TextOverlay extends Overlay
2.{ private final int mRadius = 5;
3.@Override
4.public void draw(Canvas canvas, MapView mapView, boolean shadow)
5. { Projection projection = mapView.getProjection();
6. if (shadow == false){
7. Double lng = 126.676530486 * 1E6;
8. Double lat = 45.7698895661 * 1E6;
9. GeoPoint geoPoint = new GeoPoint(lat.intValue(), lng.intValue());
10. Point point = new Point();
11. projection.toPixels(geoPoint, point);
12. RectF oval = new RectF(point.x - mRadius, point.y - mRadius, point.x + mRadius, point.y + mRadius);
13. Paint paint = new Paint();
14. paint.setARGB(250, 250, 0, 0);
15. paint.setAntiAlias(true);
16. paint.setFakeBoldText(true);
17. canvas.drawOval(oval, paint);
18. canvas.drawText("标记点", point.x+2*mRadius, point.y, paint); }
19. super.draw(canvas, mapView, shadow); }
20. @Override
21. public boolean onTap(GeoPoint p, MapView mapView)
22. {return false; }
23. }
第18行代码绘制了提示文字,可以将关于地图的相关地质信息在此输出显示,第2个和第3个参数是绘制屏幕的x坐标和y坐标。建立了覆盖层后,还需要把覆盖层添加到MapView上。
(4)调用 MapController工具类去控制地图的缩放
利用GeoPoint类的实例指定区域的位置(使用的是 animateTo方法),并用 setZoom()方法指定了放大的级别。运行程序后,可以看到在地图上只显示了指定区域大小的地图,并且看到了标记,当你点击标记时,可以看到弹出的对话框和显示的地质信息文字。
五、总结
通过测试表明,该系统能够能很好的实现相关地质数据地图的信息显示和查询 ,同时如果要增加功能 ,可以在 Java类中添加相应的方法并在应用层调用即可,具有一定的可扩展性 。当然,该技术还需要进一步的完善 ,尤其是基于SQLite的数据库需要在日后的工作中不断地扩充地质数据信息,以形成一套实用的地质数据地图服务系统。
参考文献
(1) 温敏,艾丽蓉,王志国.Android智能手机系统中文件实时监控的研究与实现[J].科学技术与工程,2009,9(1):1717~1719.
(2) 郭宏志.Android应用开发详解 [M].北京 :电子工业出版社,2010,20-37.
(3) 张仕成.基于 Google Android 平台的应用程序开发与研究[J],电脑知识与技术 2009 (28).
(4) 余志龙 陈昱勋 郑明杰 等. Google Android SDK 开发范例大全[M],2010,北京 人民邮电出版社.