上一篇讲的是地图的基本使用,和注意事项,这一篇主要讲POI检索。百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以周边检索为例,向大家介绍如何使用检索服务。

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. self.mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, kwidth, kheigth)];
[self.mapView setZoomLevel:16];
[self.view addSubview:self.mapView];
// BMKPoiResult //1. 初始化检索对象
_searcher =[[BMKPoiSearch alloc]init];
_searcher.delegate = self; //2. 发起检索 --> 拼接参数
BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
//分页索引,可选,默认为0
option.pageIndex = 0;
//分页数量,可选,默认为10,最多为50
option.pageCapacity = 10; option.location = CLLocationCoordinate2DMake(39.915, 116.404);
option.keyword = @"停车场"; BOOL flag = [_searcher poiSearchNearBy:option];
if(flag)
{
NSLog(@"周边检索发送成功");
}
else
{
NSLog(@"周边检索发送失败");
}
}

  检索结果在代理中

//实现PoiSearchDeleage处理回调结果
- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error

  然后就是基于基本检索的详情检索要在上面一个方法的代理中实现详情检索,

- (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
//在此处理正常结果 //初始化检索服务
_poisearch = [[BMKPoiSearch alloc] init];
_poisearch.delegate = self;
//POI详情检索
BMKPoiDetailSearchOption* option = [[BMKPoiDetailSearchOption alloc] init]; for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) { NSString *uids = poiInfo.uid;
option.poiUid = uids; } BOOL flag = [_poisearch poiDetailSearch:option];
if(flag)
{
//详情检索发起成功
NSLog(@"%@",@"详情检索发起成功");
}
else
{
//详情检索发送失败
NSLog(@"%@",@"详情检索发送失败");
} // 添加大头针 / 显示一个列表给用户
for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) {
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
annotation.coordinate = poiInfo.pt;
annotation.title = poiInfo.name;
[self.mapView addAnnotation:annotation];
} } else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
//当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
// result.cityList;
NSLog(@"起始点有歧义");
} else {
NSLog(@"error: %zd",error);
NSLog(@"抱歉,未找到结果");
} }

  然后在代理方法中得到详情检索结果。

-(void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode
{
if(errorCode == BMK_SEARCH_NO_ERROR){
//在此处理正常结果
NSLog(@"%@",@"在此处理正常结果"); NSLog(@"%@--%@--%@--%@--%f--%d",poiDetailResult.address,poiDetailResult.name,poiDetailResult.tag,poiDetailResult.phone,poiDetailResult.price,poiDetailResult.favoriteNum); }
}

  还有公交检索和路线检索,没有实际用过在demo中有写,但是没有把路线画出来,只是打印了一些信息在控制台,然后就是正向地理编码和反向地理编码示例如下:

-(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;
}

  

本文GitHub地址https://github.com/zhangkiwi/iOS_SN_BDMap-Test

iOS_SN_地图的使用(2)的更多相关文章

  1. iOS_SN_地图的使用(3)

    地图的定位,记得不用定位的时候要关掉定位不然会一直定位,使电量使用过快. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional ...

  2. iOS_SN_百度地图基本使用(1)

    上次用了一次百度地图,一直没有记笔记,今天记一笔. 以前没有用过百度地图的时候,听做这方面的朋友说百度地图有不少的坑,但是我做的时候没有遇到太大的坑,主要是要注意官方文档的注意事项,还有配置环境开发中 ...

  3. Java 征途:行者的地图

    前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走进或正在 Java 世界跋涉的程序员们. 第一张,基础图 大约在 2003 年我开始知道 Java 的(当时还在用 Delph ...

  4. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...

  5. C# 程序中嵌入百度地图

    本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...

  6. 高德地图api实现地址和经纬度的转换(python)

    利用高德地图web服务api实现地理/逆地址编码 api使用具体方法请查看官方文档 文档网址:http://lbs.amap.com/api/webservice/guide/api/georegeo ...

  7. Highcharts中国地图热力图

    最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...

  8. arcgis api for js入门开发系列六地图分屏对比(含源代码)

    上一篇实现了demo的地图标绘模块,本篇新增地图地图分屏对比模块,截图如下(源代码见文章底部): 对效果图的简单介绍一下,在demo只采用了两分屏对比,感兴趣的话,可以在两分屏的基础上拓展,修改css ...

  9. arcgis api for js入门开发系列五地图态势标绘(含源代码)

    上一篇实现了demo的地图查询功能,本篇新增地图态势标绘模块,截图如下: 本篇核心的在于调用API的Draw工具:https://developers.arcgis.com/javascript/3/ ...

随机推荐

  1. Box model小心得

    最近在研究css~当设置一个元素width后~有时候也会对他设定padding,margin,border值, 每次这样我就心里琢磨,那这个元素的width会变吗,js获取元素的宽度width()指的 ...

  2. smarty 练习: 分页查询

    对查出的数据进行分页,并添加查询 在main.php和main.html两个页面操作: 后台:main.php <?php include("../init.inc.php" ...

  3. 按钮点击效果jquery

    <html><head> <meta charset="UTF-8"> <title>QQ</title> <me ...

  4. 基于jquery的页面预载入效果(loading)

    css代码: <style> #loading{ position:absolute; width:300px; top:0px; left:50%; margin-left:-150px ...

  5. TableView_图片异步加载 KVO

    TableView 异步下载图片 ImageDownloader.h #pragma mark - 声明block //1,声明block typedef void(^Result) (UIImage ...

  6. android使用apktool反编译出现Input file (d:\t) was not found or was not readable

    Input file (d:\t) was not found or was not readable 出现这个错误是因为apktool压缩包下载错误,我是下成首页的那个压缩包了 正确下载地址:htt ...

  7. Cracking the coding interview--Q1.3

    原文 Given two strings, write a method to decide if one is a permutation of the other. 译文 给你两个字符串,写一个方 ...

  8. OpenRTSP的使用

    由于需要研究OpenRTSP的源码,所以先学习下使用. -d [time]--------这个是录制时间,就是单位秒,超时后,程序自动结束. -i   -----------以.avi文件格式生成. ...

  9. 最全的TV视频应用合集,包含50多款客户端,有丰富直播点播

    这是我目前找到的 最好的视频应用合集,与坛友分享下.有50多款视频客户端,基本覆盖目前市面上口碑比较好的视频应用了. 里面有丰富的直播客户端,像 龙龙直播.泰捷直播.果子 Tv.More Tv等,还有 ...

  10. led驱动程序设计

    LED的驱动程序很简单,按照张字符型设备驱动设计方法顺下来即可实现,这里主要讲几个注意事项. 一.在linux系统中,操作硬件不能够使用物理地址,一定要用虚拟地址.将物理地址转化为虚拟地址的函数如下: ...