近年来,基于iOS系统的智能手机用户爆炸式地增长,涉及地图功能需求的旅游导航类、物流类、生活服务类APP使用频率越来越高,要求开发者必须能熟练运用地图公司提供的地图API来开发地图功能。目前主流的地图公司均提供地图开发API。本文主要以百度地图API为例,阐述如何在封闭的iOS系统中,进行地图类APP的开发应用。
百度地图提供了非常完善的API,我们可以根据自己项目的需求选择百度地图提供的API,其中包含的iOS SDK开发工具与服务,提供了应用软件开发中所需的地图功能的实现、定位、搜索、路线规划等,可应用于大多数终端设备和大多数种操作系统下的地图应用开发。本文阐述如何运用百度iOS SDK创建地图以及添加相关服务功能。
在引用地图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);}
}
在引入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];
完成以上步骤,运行即可看到生成的百度地图。
在主控制器中添加覆盖物、工具和自定义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();
百度地图API的事件机制中提供了addEventListener方法,每一个对象都包含该方法,并且运用这个方法来侦听对象的事件。addEventListener方法有2个参数:(1)侦听的事件名;(2)当事件触发时所需调用的函数。例如,Bmap.Map包含着mousemove,rightclick等事件。当这些事件被触发时,侦听函数会获得对应的事件参数[3]。
因为百度地图对隐私比较注重,通过截屏出来的图片没有地图图层。解决的思路是,百度地图API中有截图的方法,可以通过地图管理对象调截图方法,如果项目中需求图片还有除地图之外的信息,就需要将两个图片进行拼接,才能得到想要的图片。
本文重点讨论了在iOS系统中,如何运用百度地图API创建地图功能,向地图中添加覆盖物、工具、控件,以及侦听事件、自定义图层。熟练运用和掌握这些地图API,对于在APP中内嵌地图功能,提高开发效率,降低地图类功能的开发成本具有重要意义和实践推广价值。
免费提供问答解答,帮您轻松解决难题
申请免费试听
只要一个电话
我们为您免费回电