刘春林 张翠翠
摘 要:随着移动互联网的快速发展和人们对APP便利性的需求,旅游导航类、物流类、生活服务类APP在应用中标配了地图功能,这些功能越来越受到人们的欢迎,发挥着越来越重要的作用。另一方面,基于iOS系统的便携设备,由于其便携性、稳定性和应用丰富性,拥有着大量的中高端用户群体。因此,对基于iOS系统的地图类应用进行研究,掌握其开发细节显得尤为重要。文章以百度地图为例,研究了基于iOS的地图类APP的开发应用。
关键词:地图;iOS;API;SDK;开发
近年来,基于iOS系统的智能手机用户爆炸式地增长,涉及地图功能需求的旅游导航类、物流类、生活服务类APP使用频率越来越高,要求开发者必须能熟练运用地图公司提供的地图API来快速开发地图功能。目前主流的地图公司均提供地图开发API[1]。本文主要以百度地图API为例,阐述如何在封闭的iOS系统中,进行地图类APP的开发应用。
百度地图提供了非常完善的API,我们可以根据自己项目的需求选择百度地图官方提供的API,其中包含的iOS SDK开发工具与服务,提供了应用软件开发中所需的地图功能的实现、定位、搜索、路线规划等,可应用于大多数终端设备和大多数种操作系统下的地图应用开发[2]。本文阐述如何运用百度iOS SDK创建地图以及添加相关服务功能。
1 在APP中创建地图功能
1.1 引用地图API
在引用地图API文件之前,首先要去注册百度地图开发者,创建百度地图开发应用,得到百度地图API密匙。在cocoaPods导入百度SDK。
Platfor:ios,6.0
Pod ‘BaiduMapKit
然后对项目plist进行配置,并在AppDelegate.m中导入头文件:
#import
运用didFinishLaunchingWithOptions方法创建一个百度地图对象,代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建并初始化一个对象
BMKMapManager *MyManager = [[BMKMapManager alloc] init];
//启动地图
BOOL MySuccess = [MyManager start:@”百度地图AK” generalDelegate:nil];
if (!MySuccess) {
NSLog(@”创建地图失败”);
}
return YES;
}
创建百度地图主对象时,将generalDelegate的参数设置为self,主要是为了在onGetNetworkState和onGetPermissionState两个函数中侦听网络状态和获得密匙(key)的授权认证状态,代码如下:
-(void)onGetNetworkState:(int)MyError
{
if (0 == MyError) {
NSLog(@”地图系统联网成功!”);}
else{
NSLog(@”onGetNetworkState启动失败,编号%d”, MyError); }
}
-(void)onGetPermissionState:(int) MyError
{
if (0 == MyError) {
NSLog(@”地图系统授权成功!”); }
else {
NSLog(@”onGetPermissionState启动失败,编号: %d”, MyError);}
}
创建地图截图如图1所示。
1.2 創建并初始化BMKMapView
在引入BaiduMapAPI_Map/BMKMapComponent.h头文件后,声明BMKMapView并添加到父视图上,进行地图初始化:
BMKLocationViewDisplayParam *LclShow = [[BMKLocationViewDisplayParam alloc] init];
LclShow.isRotateAngleValid = true;
LclShow.isAccuracyCircleShow = true;
LclShow.locationViewOffsetX = 0;
LclShow.locationViewOffsetY = 0;
[_mapView updateLocationViewWithParam: LclShow];
完成以上步骤,运行即可看到生成的百度地图。
2 向地图中添加覆盖物、工具、控件
在主控制器中添加覆盖物、工具和自定义UI控件,可实现外部操作与按钮等控件的响应事件方法。
信息窗口、标注、矢量元素等均为覆盖物,其本身拥有地理坐标,如果我们对地图进行缩放操作、拖动地图操作,它们会发生相对应的变化。如果要增加覆盖物,可使用addOverlay()方法,如果要删除覆盖物,则使用removeOverlay()方法。
另外,百度地圖集成很强交互功能的“工具”,它涵盖有:测距工具DistanceTool、标注工具PushpinTool、区域缩放工具DragAndZoomTool。
应注意的是,初始化“工具”类,必须按照地图所要求的实例参数来提供,才能使“工具”在该地图上生效。可以在地图上同时添加数个“工具”,但同一时刻仅有一个“工具”处于开启状态。
区域缩放工具却可以自行配置是否自动关闭,而标注工具和测距工具在完成一次运行后会自动退出开启状态。
var Lclmap = new BMap.Map(“container”); // 生成新的地图对象
Lclmap.centerAndZoom(new BMap.Point((110.390, 50.870),12);//110.390表示经度,50.870表示纬度,显示地图
var LclGongJu = new BMap.DistanceTool(Lclmap);
LclGongJu.open();
3 侦听事件
百度地图API的事件机制中提供了addEventListener方法,每一个对象都包含该方法,并且运用这个方法来侦听对象的事件。addEventListener方法有2个参数:(1)侦听的事件名;(2)当事件触发时所需调用的函数。例如,Bmap.Map包含着mousemove,rightclick等事件。当这些事件被触发时,侦听函数会获得对应的事件参数[3]。
4 自定义地图图层
因为百度地图对隐私比较注重,通过截屏出来的图片没有地图图层。解决的思路是,百度地图API中有截图的方法,可以通过地图管理对象调截图方法,如果项目中需求图片还有除地图之外的信息,就需要将两个图片进行拼接,才能得到想要的图片。
5 结语
本文重点讨论了在iOS系统中,如何运用百度地图API创建地图功能,向地图中添加覆盖物、工具、控件,以及侦听事件、自定义图层。熟练运用和掌握这些地图API,对于快速在APP中内嵌地图功能,提高开发效率,降低地图类功能的开发成本具有重要意义和实践推广价值。
[参考文献]
[1]梁广荣,黎红.基于百度地图API的虚拟校园实现[J].廊坊师范学院学报(自然科学版),2012(6):47-49.
[2]董杰,马宏琳.百度地图API的安卓开发技术研究[J].电脑知识与技术,2017(23):79-80.
[3]赵鹏程,胡庆武,刘仙雄,等.面向iOS的移动端全景地图构建方法[J].地理与地理信息科学,2016(1):95-99.
Abstract:With the rapid development of mobile Internet and peoples demand for APP convenience, travel navigation, logistics, and life service APPs are equipped with map functions in their applications. These functions are more and more popular and play a role. More and more important role. On the other hand, iOS-based portable devices have a large number of mid-to-high-end users due to their portability, stability and application richness. Therefore, it is especially important to study the map application based on iOS system and master the development details. This psper takes the Baidu map as an example, researches the development and application of maps APP based on iOS.
Key words:map; iOS; API; SDK; development