Android系统中基于Baidu Map的应用技术研究
2014-10-27徐丽仙
徐丽仙
摘 要:智能手机和无线通信技术高速发展,为大量应用提供了技术支撑,以地图服务为基础的应用给我们提供了很多便利。其中Baidu Map由于有着丰富的功能,提供多样的应用接口,更加方便开发人员调用,越来越受到他们的欢迎。Baidu Map现在使用的是SDK3.0版本,在以前版本上做了修改。本文研究了在Android平台上如何实现新的地图加载过程和地址編码的转换,为使用Baidu Map SDK3.0进行相关Android应用开发的技术人员提供一定的参考。
关键词:Android;BaiduMap;SDK3.0;地图加载;地址编码
随着智能手机处理器、存储器等相关硬件技术的快速发展,以及软件技术的突飞猛进,智能手机改变了我们的生活。它除了通信、聊天和游戏功能外在手机购物、电子支付、其他信息交互等方面发挥了更多的作用,为我们的生活提供了快捷方便的信息通道。当前手机大部分采用iOS、Windows Phone和Android操作系统,而由于Android系统拥有市场份额大、平台开放性、丰富的硬件选择、软件开发不受限制等很多优点,国内手机厂商基本都采用Android系统,因而基于Android平台的应用程序如雨后春笋,不但数量多,应用也越加广泛。同时推动了Android Market的发展,这正提供了良性发展循环。
在众多应用中,基于用户位置的服务给人们提供更多方便[1],也是市场迅猛的增长点。除了汽车导航这种大型的应用外,公交服务[2]、导游地理信息服务、虚拟校园、停车诱导服务等针对具体、适用的特定应用定制也越来越多,而这些应用都要基于地图信息来完成开发。目前主要采用google地图、天地图和百度地图,但是google退出中国大陆,需要通过香港、台湾等地方取得服务信息,造成信息慢或者不畅通,加之实现过程也很麻烦,给开发者和用户带来了很多不便。百度地图采用Mapbar提供数据,Mapbar在包含基础数据的同时,还有几千家联盟成员在整理和丰富各行业的最新信息。因此百度地图提供了大量的地理信息,更新很快,节省流量,公交查询较准确等特点在大陆应用较为广泛。
本论文以Android平台为基础,研究在一些需要提供用户位置服务的应用程序中如何利用百度地图提供的相关信息与服务,实现基于地图应用的相关技术,并为相关开发人员提供成熟的技术支持。
1 搭建Baidu Map开发环境
本文采用Eclipse作为IDE,并在Android平台环境下实现。必须搭建相关开发平台[3]才能实现Baidu Map应用开发,首先需要注册百度用户并申请百度地图的开发密钥(key),下载API开发包。
1.1 申请开发密钥(key)
为保证能够使用百度地图SDK提供相关开发服务,用户必须要申请与百度账号相关联的开发密钥。同时为了保证安全性,百度对v2.13以后版本的key验证体系进行了更新。在新的机制中,一个key和一个应用程序是唯一对应的,而且只有在与此包名匹配的应用程序才有效。但在同一个程序中多次使用地图功能可以使用同一个密钥。在地址http://developer.baidu.com/map中选择Android开发,申请过程如图1所示。
在配置应用时应用类型为for mobile,安全码由数字签名和包名合成之间用分号隔开,其中数字签名可在开发工具Eclipse的winows → preferance → android→ build下SHA1 fingerprint一串由冒号分割的十六进制数据。包名是发开时在配置文件中的包,如项目中AndroidMainifest.xml文件里代码package="com.android.mybaidu"指定的包名。
1.2 Android SDK[4]
百度地图Android SDK是基于安卓系统设备的一套API,目前版本是v3.0.0,并提供全新的界面用于key申请。此API提供了很多实用功能。
⑴地图功能,包括地图的展示和操作。如2D、3D地图、卫星图及实时交通图等,并可实现缩放、旋转和改变视角等控制操作。
⑵POI检索,包括周边指定半径检索、给定区域检索和在一个城市内检索。
⑶地理编码,将地球的经纬度转换为详细中文地址或地址描述,以及中文地址或描述转换为经纬度信息。
⑷线路规划,如公交信息查询及换乘规划,驾车步行线路检索规划等。
⑸定位功能,可通过GPS、WiFi、Base Station、IP混合定位模式等来实现定位功能。
除了上面的功能外还提供支持多种地图覆盖物,离线地图导入,地理导航,实现海量数据数据存储和高效检索用户数据的LBS云服务。还有短串分享、Place详情页展示等特色服务。
下载对应SDK后,将文件baidumapapi_v3_0_0.jar和libBaiduMapSDK_3_0_0.so拷贝到项目的对应文件夹下,如图2所示。最后在Project→Properties→Java Build Path→Libraries选项下,通过Add External JARs按钮添加baidumapapi_v3_0_0.jar文件完成配置如图3所示。
2 地图加载
新建项目后,在程序中加载显示地图是整个Map应用的基础,是完成其他地图操作的前提。这需要对配置文、布局文件和java文件进行修改。
2.1 AndroidManifest.xml配置文件
为了获得地图服务,在该文件application下添加从baidu开放平台上申请到的密钥,并根据实际需要添加相应的用户权限许可,添加屏幕支持。
添加key代码如下
android:value="这里为用户申请的key"/>
添加权限[5]方法如下
android:name="android.permission.权限代码">
其中主要相关权限配置代码与说明如表1所示。
2.2 布局文件
布局文件是顯示地图信息容器,用户展示特定要求的地图并根据需要通过覆盖层进行位置图标、路线标记。MapView控件用于显示地图信息,通过加载com.baidu.mapapi.map包调用MapView类,属性设置代码如下所示。
android:layout_height="fill_parent" android:layout_width="fill_parent" android:id="@+id/bmapView" android:clickable="true"/> 2.3 应用程序实现 为了能够使用SDK所提供的地图服务,首先要调用SDKInitializer类的initialize方法来初始化由getApplicationContext()得到的context信息,而且该方法要求在setContentView()方法前调用。方法如下代码所示。 SDKInitializer.initialize(getApplicationContext()); 调用MapView类[6]对象mapView的方法实现对地图生命周期进行管理它是和Activity同步的。相关说明如表2所示,加载完成后在模拟器运行如图4所示。 此外还有getMap()方法取得地图控制器给BaiduMap类的对象,只有该对象才能实现缩放、定位等功能。代码为mBaiduMap = mMapView.getMap(); Baidu Map提供了卫星地图和普通地图两种类型地图,通过调用前面mBaiduMap对象的setMapType()方法实现,参数BaiduMap.MAP_TYPE_NORMAL和BaiduMap.MAP_TYPE_SATELLITE分别为普通地图和卫星地图,显示效果如图 和 所示。在百度地图服务中还提供了主要城市交通路况实时查询功功能,随着发展将会有更多城市加入到此项服务。 3 geocode技术 即地理编码技术,地图上的地理位置是通过经度和纬度的交叉点来确定的,确定位置信息是实现其它功能服务的基础,智能终端可通过GPS、WiFi、3G或4G所提供的数据确定自己的位置。但在实际操作中用户所关心的是省市区道路等信息,这就有时需要开发人根据具体使用目的进行处理。Baidu SDK V3.0专门提供了com.baidu.mapapi.search.geocode程序包提供相关服务,其中包含多个功能类。 3.1 GeoCodeOption类和ReverseGeoCodeOption类 GeoCodeOption类用来设置保存地址位置信息,提供两个方法,city()设置城市名称,address()设置道路位置等具体信息。 ReverseGeoCodeOption类用于设置保存经纬度位置坐标信息,由方法location(LatLng location)实现。 3.2 GeoCodeResult类和ReverseGeoCodeResult类 GeoCodeResult类,其中getAddress()和getLocation()方法分别取得地址信息和位置信息。 ReverseGeoCodeResult类,共有五种方法getAddress()、getAddressDetail()、getBusinessCircle()、getLocation()和getPoiList(),分别取得简要地址、层次化地址、所在商圈名称、位置坐标和所在位置PIO信息。 3.3 GeoCoder类 GeoCoder类提供一些接口,用于实现查询地理编码操作。其方法主要有新建查询newInstance()、执行地址信息编码到经纬度请求geocode()、执行经纬度到地址信息请求reverseGeoCode()、设置查询结果监听者setOnGetGeoCodeResultListener()和释放查询的地理编码对象destroy()。 3.4 ReverseGeoCodeResult.AddressComponent类 该类按层次化的方式返回城市、区县、街道名称及门牌号信息。 4 小结 目前百度提供给开发者的是Andoid SDK3.0版本,与早期版本有不少区别。他对很多方法进行了简化,有的也修改了,也增加了一些新的方法。特别在地图初始化方面作了较大调整,取消了bMapManager对象的管理功能,改动的主要目的一方面是方便开发者的使用,另一方面也是为了增加前面列举的适用功能。由于各种原因,本论文仅在题图加载和地址编码方面进行了研究,以后还将在导航、LBS云检索、计算工具以及全景地图功能等方面继续学习研究,为开发提供一些技术总结。 [参考文献] [1]张倩怡.移动地图“逐利”生活服务[N].北京日报,2014-01-02(第008版). [2]刘龙,胡静,宋铁成.基于Android系统的公共交通客户端的设计[J].电气电子教学学报:2013(6):37-41 [3]焦健.Eclipse下Android环境的搭建[J].信息与电脑:2012(6):33-34. [4]Android SDK v3.0.0概述[EB/OL].[2014-07-20]http://developer.baidu.com/map/sdk-android.htm [5]吴大勇,郑紫微.基于Android平台的访问权限机制优化方案[J].计算机工程:2013(5):144-147. [6]Android SDK v3.0.0参考类[EB/OL].[2014-07-20]http://developer.baidu.com/map/android_refer/index.html.