iOS百度地图SDK2.4.1版本的使用(一)

  由于客户需求和我们的代码方便,把软件里的全部地图都使用百度地图;

  随着百度SDK的升级,无论是地图的精确性还是信息的详细度几乎都能达到我们需求;

 准备工作:需要申请密匙;百度地图iOS SDK开发密钥的申请地址为:http://lbsyun.baidu.com/apiconsole/key

                   加载百度地图SDK;下载地址为:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download

   下面开始使用地图:在appdelegate类里添加

- (BOOL)application:(UIApplication *)application   

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 要使用百度地图,请先启动BaiduMapManager  

    _mapManager = [[BMKMapManager alloc]init];   

// 如果要关注网络及授权验证事件,请设定     generalDelegate参数  

    BOOL ret = [_mapManager start:@"在此处输入您的授权Key"  generalDelegate:nil];  

    if (!ret) {  

        NSLog(@"manager start failed!");  

    }  

// Add the navigation controller's view to the window and display.  

    [self.window addSubview:navigationController.view];  

    [self.window makeKeyAndVisible];  

   return YES;  

}

1.定位:

定位功能可以和地图功能分离使用,单独的定位功能使用方式如下:

-(void)viewDidLoad  

{    

    //初始化BMKLocationService  

    _locService = [[BMKLocationService alloc]init];  

    _locService.delegate = self;  

    //启动LocationService  

    [_locService startUserLocationService];  

}  

//实现相关delegate 处理位置信息更新  

//处理方向变更信息  

- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation  

{  

//    NSLog(@"heading is %@",userLocation.heading);  

}  

//处理位置坐标更新  

- (void)didUpdateUserLocation:(BMKUserLocation *)userLocation  

{  

//    NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);  

}

展示定位信息

展示定位信息的功能位于“地图和覆盖物”这个功能模块,开发者在使用时要注意选择。核心代码如下:(完整信息请参考Demo)

//普通态  

//以下_mapView为BMKMapView对象  

_mapView.showsUserLocation = YES;//显示定位图层  

[_mapView updateLocationData:userLocation];

2.地理编码

-(void)viewDidLoad    

{      

    //初始化检索对象    

    _searcher =[[BMKGeoCodeSearch alloc]init];    

    _searcher.delegate = self;      

    BMKGeoCodeSearchOption *geoCodeSearchOption = [[BMKGeoCodeSearchOption alloc]init];    

    geoCodeSearchOption.city= @"北京市";    

    geocodeSearchOption.address = @"海淀区上地10街10号";    

    BOOL flag = [_searcher geoCode:geoCodeSearchOption];    

    [geoCodeSearchOption release];    

    if(flag)    

    {    

        NSLog(@"geo检索发送成功");    

    }    

    else    

    {    

        NSLog(@"geo检索发送失败");    

    }    

 

    //发起反向地理编码检索    

    //CLLocationCoordinate2D pt = (CLLocationCoordinate2D){39.915, 116.404};    

    //BMKReverseGeoCodeOption *reverseGeoCodeSearchOption = [[  

    //BMKReverseGeoCodeOption alloc]init];  

    //reverseGeoCodeSearchOption.reverseGeoPoint = pt;    

    //BOOL flag = [_searcher reverseGeoCode:reverseGeoCodeSearchOption];    

    //[reverseGeoCodeSearchOption release];    

    //if(flag)    

    //{    

    //  NSLog(@"反geo检索发送成功");    

    //}    

    //else    

    //{    

    //  NSLog(@"反geo检索发送失败");    

    //}    

 }    

 

//实现Deleage处理回调结果    

//接收正向编码结果   

 

- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{    

    if (error == BMK_SEARCH_NO_ERROR) {    

         //在此处理正常结果    

    }    

    else {    

        NSLog(@"抱歉,未找到结果");    

    }    

}    

 

//接收反向地理编码结果    

//-(void) onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:  

//(BMKReverseGeoCodeResult *)result   

//errorCode:(BMKSearchErrorCode)error{    

//  if (error == BMK_SEARCH_NO_ERROR) {    

//      在此处理正常结果    

//  }    

//  else {    

//      NSLog(@"抱歉,未找到结果");    

//  }    

//}    

 

//不使用时将delegate设置为 nil      

-(void)viewWillDisappear:(BOOL)animated      

{      

    _searcher.delegate = nil;      

}

3.POI检索 (兴趣点查询)

百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以周边检索为例,向大家介绍如何使用检索服务。

-(void)viewDidLoad  

  {    

    //初始化检索对象  

    _searcher =[[BMKPoiSearch alloc]init];  

    _searcher.delegate = self;    

    //发起检索  

    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];  

    option.pageIndex = curPage;  

    option.pageCapacity = 10;

    option.location = CLLocationCoordinate2D{39.915116.404};

    option.keyword = @"小吃";  

    BOOL flag = [_searcher poiSearchNearBy:option];  

    [option release];  

    if(flag)  

    {  

        NSLog(@"周边检索发送成功");  

    }  

    else  

    {  

        NSLog(@"周边检索发送失败");  

    }  

 

 }  

 //实现PoiSearchDeleage处理回调结果  

 - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error  

 {  

    if (error == BMK_SEARCH_NO_ERROR) {  

        //在此处理正常结果   

    }  

    else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){  

         //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表  

         // result.cityList;  

         NSLog(@"起始点有歧义");  

    } else {  

         NSLog(@"抱歉,未找到结果");  

    }  

}  

//不使用时将delegate设置为 nil    

-(void)viewWillDisappear:(BOOL)animated    

{    

     _searcher.delegate = nil;    

}

以上向大家介绍了POI检索功能的使用方法,百度地图SDK,还向广大开发者开放了POI详情信息的检索,为开发者提供更多的LBS数据支持。

POI详情检索的实现方式如下:

第一步,发起检索:

//初始化检索服务

_poisearch = [[BMKPoiSearch alloc] init];

_poisearch.delegate = self;

//POI详情检索

BMKPoiDetailSearchOption* option = [[BMKPoiDetailSearchOption alloc] init];

option.poiUid = @”此处为POI的uid”;//POI搜索结果中获取的uid

BOOL flag = [_poisearch poiDetailSearch:option];

[option release];

if(flag)

{

    //详情检索发起成功

}

else

{

    //详情检索发送失败

}

第二步,设置结果监听:

-(void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode

{

if(errorCode == BMK_SEARCH_NO_ERROR){

//在此处理正常结果   

}

}

4.路径规划

百度地图iOS SDK为开发者提供了公交换乘、驾车和步行三种类型的线路规划方案,同时根据不同的方案还可以选择“时间最短”、“距离最短”等策略来完成最终的线路规划。开发者可根据自己实际的业务需求来自由使用。

公交换乘的线路规范实现方式如下:

-(void)viewDidLoad                   

{                                    

    //初始化检索对象                        

    _searcher = [[BMKRouteSearch alloc]init];

    _searcher.delegate = self;

    //发起检索

    BMKPlanNode* start = [[[BMKPlanNode alloc]init] autorelease];

    start.name = @"龙泽";

    BMKPlanNode* end = [[[BMKPlanNode alloc]init] autorelease];

    end.name = "西单";

    BMKTransitRoutePlanOption *transitRouteSearchOption =         [[BMKTransitRoutePlanOption alloc]init];

    transitRouteSearchOption.city= @"北京市";

    transitRouteSearchOption.startNode = start;

    transitRouteSearchOption.endNode = end;

    BOOL flag = [_searcher transitSearch:transitRouteSearchOption];

    [transitRouteSearchOption release];

 

        if(flag)                     

        {                            

            NSLog(@"bus检索发送成功");     

        }                            

        else                         

        {                            

            NSLog(@"bus检索发送失败");     

        }                            

    }                                

    //实现Deleage处理回调结果

    -(void)onGetTransitRouteResult:(BMKRouteSearch*)searcher result:    (BMKTransitRouteResult*)result

    errorCode:(BMKSearchErrorCode)error

    {

        if (error == BMK_SEARCH_NO_ERROR) {

            //在此处理正常结果

        }

        else if (error == BMK_SEARCH_AMBIGUOUS_ROURE_ADDR){

            //当路线起终点有歧义时通,获取建议检索起终点

            //result.routeAddrResult

        }

    else {

        NSLog(@"抱歉,未找到结果");

    }

}

    //不使用时将delegate设置为 nil

    -(void)viewWillDisappear:(BOOL)animated

    {

        _searcher.delegate = nil; 

    }

5.调启导航:

百度地图iOS SDK自v2.1.1版本起,为用户提供调启百度导航的能力。调启导航,分为两种:调启百度地图客户端导航和调启百度地图Web导航,用户只需很小的工作量,就可实现驾车路线导航的全套功能。

导航的核心代码如下,详细使用方法请参考Demo:

    //调启百度地图客户端导航    

- (IBAction)nativeNavi    

{    

  //初始化调启导航时的参数管理类    

  BMKNaviPara* para = [[BMKNaviPara alloc]init];    

  //指定导航类型    

  para.naviType = BMK_NAVI_TYPE_NATIVE;    

 

  //初始化终点节点    

   BMKPlanNode* end = [[[BMKPlanNode alloc]init] autorelease];    

   //指定终点经纬度    

   CLLocationCoordinate2D coor2;    

   coor2.latitude = _nativeEndLatitude.text.floatValue;    

   coor2.longitude = _nativeEndLongitude.text.floatValue;    

   end.pt = coor2;    

   //指定终点名称    

   end.name = _nativeEndName.text;    

   //指定终点    

   para.endPoint = end;    

 

   //指定返回自定义scheme,具体定义方法请参考常见问题    

   para.appScheme = @"baidumapsdk://mapsdk.baidu.com";    

   //调启百度地图客户端导航    

   [BMKNavigation openBaiduMapNavigation:para];    

   [para release];    

   }    

   //调启web导航    

   - (IBAction)webNavi    

   {    

   //初始化调启导航时的参数管理类    

   BMKNaviPara* para = [[BMKNaviPara alloc]init];    

   //指定导航类型    

   para.naviType = BMK_NAVI_TYPE_WEB;    

 

   //初始化起点节点    

   BMKPlanNode* start = [[[BMKPlanNode alloc]init] autorelease];    

   //指定起点经纬度    

   CLLocationCoordinate2D coor1;    

   coor1.latitude = _webStartLatitude.text.floatValue;    

   coor1.longitude = _webStartLongitude.text.floatValue;    

   start.pt = coor1;    

   //指定起点名称    

   start.name = _webStartName.text;    

   //指定起点    

   para.startPoint = start;    

 

 

   //初始化终点节点    

   BMKPlanNode* end = [[[BMKPlanNode alloc]init] autorelease];    

   CLLocationCoordinate2D coor2;    

   coor2.latitude = _webEndLatitude.text.floatValue;    

   coor2.longitude = _webEndLongitude.text.floatValue;;    

   end.pt = coor2;    

   para.endPoint = end;    

   //指定终点名称    

   end.name = _webEndName.text;    

   //指定调启导航的app名称    

   para.appName = [NSString stringWithFormat:@"%@", @"testAppName"];    

   //调启web导航    

   [BMKNavigation openBaiduMapNavigation:para];    

   [para release];    

}

效果图如下:




   





这些是我们常用的一些功能,大家可以参考百度地图demo;相关下载:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值