浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

iOS 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

什么是LBS云数据

百度地图LBS云是百度地图针对LBS开发者全新推出的平台级服务,不仅适用PC应用开发,同时适用移动设备应用的开发。

LBS云数据包含LBS云存储,云检索等功能。使用LBS云数据,可以实现移动开发者存储海量位置数据的服务器零成本及维护压力,且支持高效检索用户数据,且实现地图展现。 如何检索开发者自己的数据:

第一步,数据存储:首先开发者需要将待检索数据存入LBS云管理后台

第二步,检索:利用SDK为开发者提供的接口检索自己的数据;

第三步,展示:开发者可根据自己的实际需求以多种形式(如结果列表、地图模式等)展现自己的数据。

云检索

开发者在完成数据的LBS云端数据存储之后,便可调用SDK云检索服务,检索自己存储在云端的数据。

百度地图API提供以下几类云检索类型:本地检索,周边检索,矩形检索,详情检索。 此处以本地检索和详情检索为例说明,具体方法如下:

1在ViewController.h中声明BMKCloudSearch对象,并将ViewController实现BMKCloudSearchDelegate协议
     @interface CloudSearchDemoViewController : UIViewController<BMKMapViewDelegate, BMKCloudSearchDelegate>{  
    IBOutlet BMKMapView* _mapView;  
    BMKCloudSearch* _search;  
       }
2在ViewController.m的viewDidLoad中创建BMKCloudSearch对象,设置对应的delegate
     - (void)viewDidLoad {  
    [super viewDidLoad];  
    //初始化云检索服务  
    _search = [[BMKCloudSearch alloc] init];  
    _search.delegate = self;  
}
3发起本地云检索,并实现BMKCloudSearchDelegate协议中获取云检索结果的方法
     //发起本地云检索  
-(IBAction)onClickLocalSearch{  
    BMKCloudLocalSearchInfo *cloudLocalSearch = [[BMKCloudLocalSearchInfo alloc] init];  
    /* 
    * 本示例代码使用了测试ak和测试数据,开发者在检索自己LBS数据之前,需替换 cloudLocalSearch.ak
    * 和cloudLocalSearch.geoTableId的值
    * 
    * 1、替换cloudLocalSearch.ak的值:
    * (1)请访问http://lbsyun.baidu.com/apiconsole/key申请一个“服务端”的ak,其他类型的ak无效;
    * (2)将申请的ak替换cloudLocalSearch.ak的值;
    *
    * 2、替换cloudLocalSearch.geoTableId值:
    * (1)申请完服务端ak后访问http://lbsyun.baidu.com/datamanager/datamanage创建一张表;
    * (2)在“表名称”处自由填写表的名称,如MyData,点击保存;
    * (3)“创建”按钮右方将会出现形如“MyData(34195)”字样,其中的“34195”即为geoTableId的值;
    * (4)添加或修改字段:点击“字段”标签修改和添加字段,然后保存;
    * (5)添加数据:
    *  a、标注模式:“数据” ->“标注模式”,输入要添加的地址然后“百度一下”,点击地图蓝色图标,再点击保存即可;
    *  b、批量模式: “数据” ->“批量模式”,可上传文件导入,具体文件格式要求请参见当页的“批量导入指南”;
    * (6)选择左边“设置”标签,“是否发布到检索”选择“是”,然后"保存";
    * (7)数据发布后,替换cloudLocalSearch.geoTableId的值即可;
 
    * 备注:每创建一张新表后需要选择发布到检索并保存,否则将会出现检索不到数据的情况 
    */  
    cloudLocalSearch.ak = @"B266f735e43ab207ec152deff44fec8b";
    cloudLocalSearch.geoTableId = 31869; 
    cloudLocalSearch.pageIndex = 0;
    cloudLocalSearch.pageSize = 10; 
 
    cloudLocalSearch.region = @"北京市";  
    cloudLocalSearch.keyword = @"天安门";  
    BOOL flag = [_search localSearchWithSearchInfo:cloudLocalSearch];  
    [cloudLocalSearch release];  
    if(flag){  
        NSLog(@"本地云检索发送成功");  
    }else{  
        NSLog(@"本地云检索发送失败");  
    }  
}  
//返回云检索结果回调  
- (void)onGetCloudPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error{  
    // 清楚屏幕中所有的annotation  
    NSArray* array = [NSArray arrayWithArray:_mapView.annotations];  
     [_mapView removeAnnotations:array];  
    if (error == BMKErrorOk) {  
        BMKCloudPOIList* result = [poiResultList objectAtIndex:0];  
        for (int i = 0; i < result.POIs.count; i++) {  
            BMKCloudPOIInfo* poi = [result.POIs objectAtIndex:i];  
            BMKPointAnnotation* item = [[BMKPointAnnotation alloc] init];  
            CLLocationCoordinate2D pt = (CLLocationCoordinate2D){ poi.longitude,poi.latitude};  
            item.coordinate = pt;  
            item.title = poi.title;  
            [_mapView addAnnotation:item];  
            [item release];  
        }  
    } else {  
        NSLog(@"error ==%d",error);  
    }  
}
4发起详情云检索,并实现BMKCloudSearchDelegate协议中获取云检索详情结果的方法,代码如下:
     //发起详情云检索  
-(IBAction)onClickDetailSearch{  
    BMKCloudDetailSearchInfo *cloudDetailSearch = [[BMKCloudDetailSearchInfo alloc] init];  
    cloudDetailSearch.ak = @"B266f735e43ab207ec152deff44fec8b"; 
    cloudDetailSearch.geoTableId = 31869;
    cloudDetailSearch.uid = @"19150264";
    BOOL flag = [_search detailSearchWithSearchInfo:cloudDetailSearch];  
    [cloudDetailSearch release];  
    if(flag){  
        NSLog(@"详情云检索发送成功");  
    }else{  
        NSLog(@"详情云检索发送失败");  
    }  
}  
- (void)onGetCloudPoiDetailResult:(BMKCloudPOIInfo*)poiDetailResult searchType:(int)type errorCode:(int)error{  
    // 清除屏幕中所有的annotation  
    NSArray* array = [NSArray arrayWithArray:_mapView.annotations];  
    [_mapView removeAnnotations:array];  
    if (error == BMKErrorOk) {  
        BMKCloudPOIInfo* poi = [poiDetailResult retain];  
        BMKPointAnnotation* item = [[BMKPointAnnotation alloc] init];  
        CLLocationCoordinate2D pt = (CLLocationCoordinate2D){ poi.longitude,poi.latitude};   
        item.coordinate = pt;  
        item.title = poi.title;  
        [_mapView addAnnotation:item];  
        [poi release];  
        [item release];  
    } else {  
        NSLog(@"error ==%d",error);  
    }  
}

通过以上几步操作,即可完成LBS云检索,运行结果如下图所示:

本地云检索

ios-lbs1.png

详情云检索

ios-lbs2.png

注意事项

LBS云检索服务允许用户检索自有数据,包括本地检索、周边检索、矩形检索、详情检索,该服务对开发者免费开放;

官方SDK的云检索示例代码中,使用了测试ak,从而可以检索相关测试数据,开发者在实际使用过程中需将测试ak更换为自己的ak(此ak必须为服务端ak),还需将测试的geoTableId更换为自己的geoTableId,具体位置请参考云检索示例代码“本地云检索”中的注释;

欲详细了解LBS云检索的使用方法,请访问LBS云检索开发指南;存入待检索数据,请访问LBS云检索管理后台

开发过程中如有任何问题,也可以访问LBS开放平台论坛的“云检索”或“iOS开发”版块进行询问和反馈。