您好,欢迎来到度日教育。
搜索
您的当前位置:首页iOS 百度地图3-检索

iOS 百度地图3-检索

来源:度日教育

百度地图SDK提供的检索服务包括以下功能模块:
POI检索,
公交方案检索,
驾车路线检索,
步行路线检索,
行政区边界数据检索,
地理编码,
反地理编码,
公交详情检索,
在线建议查询,
短串分享(包括POI搜索结果分享、驾车/公交/骑行/步行路线规划分享、反向地理编码结果分享)。

1 POI周边检索

POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以周边检索为例,向大家介绍如何使用检索服务。

1.1 在页面上定义一个输入框,内容改变时发起检索

注意检查 nearBySearchOption.location 内容是否正确,否则总是检索不到结果

UITextField *poiTextField = [[UITextField alloc] initWithFrame:CGRectMake(30, 30, 100, 20)];
poiTextField.backgroundColor = [UIColor lightGrayColor];
[poiTextField addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventEditingChanged];
[self.view addSubview:poiTextField];
- (void)valueChange:(UITextField *)textField {
    
    _poiSearch = [[BMKPoiSearch alloc]init];
    _poiSearch.delegate = self;
    
    // 附近云检索
    BMKNearbySearchOption *nearBySearchOption = [[BMKNearbySearchOption alloc]init];
    // 检索关键字
    nearBySearchOption.keyword = textField.text;
    // 检索中心点及半径
    nearBySearchOption.location = _locService.userLocation.location.coordinate;
    nearBySearchOption.radius = 10000;
    // 搜索结果排序,距离由近到远
    nearBySearchOption.sortType = BMK_POI_SORT_BY_DISTANCE;
    // 分页索引及数量
    nearBySearchOption.pageIndex = 0;
    nearBySearchOption.pageCapacity = 10;
    
    // 开始检索,结果在代理方法 onGetPoiResult 中返回
    BOOL flag = [_poiSearch poiSearchNearBy:nearBySearchOption];
    if (flag) {
        NSLog(@"搜索成功--%@", textField.text);
    }else {
        NSLog(@"搜索失败");
    }
}

1.2 结果监听

调用 poiSearchNearBy 方法后,检索结果 在代理方法 onGetPoiResult 中返回,poiResult.poiInfoList 就是检索到的结果,是一个 BMKPoiInfo 的集合,每个BMKPoiInfo包含该检索点的名称,地址,uid等详细信息。

- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
    if (errorCode == BMK_SEARCH_NO_ERROR) {
        for (int i = 0; i < poiResult.poiInfoList.count; i++) {
            BMKPoiInfo *info = [poiResult.poiInfoList objectAtIndex:i];
            NSLog(@"地址:%@---%@---%@", info.city ,info.name, info.address);
        }
    }else {
        NSLog(@"检索异常-%d", errorCode);
    }
}
检索.PNG 检索结果.jpeg

1.3 展示

1.3.1 把这些数据显示到tableview上,就是我们常见的搜索框搜索得到对应的结果。

检索结果.PNG

1.3.2 或者将搜索出来的结果通过大头针展示在地图上:

- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
    
    // 清楚屏幕中所有的annotation
    NSArray* array = [NSArray arrayWithArray:_mapView.annotations];
    [_mapView removeAnnotations:array];
    
    if (errorCode == BMK_SEARCH_NO_ERROR) {
        NSMutableArray *arrM = [NSMutableArray array];
        for (int i = 0; i < poiResult.poiInfoList.count; i++) {
            BMKPoiInfo *info = [poiResult.poiInfoList objectAtIndex:i];
            NSLog(@"地址:%@---%@---%@", info.city ,info.name, info.address);
            
            BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
            item.coordinate = info.pt;
            item.title = info.name;
            [arrM addObject:item];
        }
        [_mapView addAnnotations:arrM];
        [_mapView showAnnotations:arrM animated:YES];
        
        self.poiResultArr = poiResult.poiInfoList;
        [self.tableView reloadData];
        
    }else {
        NSLog(@"检索异常-%d", errorCode);
    }
}
大头针展示.PNG

2 公交详情信息检索-基于POI

基于上面POI检索返回的POI结果中,BMKPoiInfo有一属性epoitype,表示POI类型,epoitype字段值为2标示公交路线,4表示地铁路线,把这两种类型的POI的 uid 传给公交信息检索接口,可以得到该POI所代表的路线的详细信息(如:该公交线有多少个站点,每个站点的名称,位置、参考票价和上下线行信息)。

点击tableView调用 公交详情信息检索,代码如下:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.poiResultArr.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ID"];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"];
    }
    
    BMKPoiInfo *info = self.poiResultArr[indexPath.row];
    cell.textLabel.text = info.name;
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    BMKPoiInfo *info = self.poiResultArr[indexPath.row];
    if (info.epoitype == 2 || info.epoitype == 4) {
        // 发起公交检索
        [self startBusLineSearchWithCity:info.city uid:info.uid];

    }else {
        NSLog(@"这不是一条公交线路");
    }
    
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
#pragma mark
#pragma mark -- 公交方案检索

- (void)startBusLineSearchWithCity:(NSString *)city uid:(NSString *)uid{
    _busLineSearch = [[BMKBusLineSearch alloc]init];
    _busLineSearch.delegate = self;
    
    BMKBusLineSearchOption *option = [[BMKBusLineSearchOption alloc]init];
    option.city = city;
    option.busLineUid = uid;
    
    BOOL flag = [_busLineSearch busLineSearch:option];
    if(flag)
    {
        NSLog(@"busline检索发送成功    %@---%@", city, uid);
    }
    else
    {
        NSLog(@"busline检索失败");
    }
}

- (void)onGetBusDetailResult:(BMKBusLineSearch *)searcher result:(BMKBusLineResult *)busLineResult errorCode:(BMKSearchErrorCode)error {
    if (error == BMK_SEARCH_NO_ERROR) {
        //在此处理正常结果
        NSLog(@"%@,共有%zd站",busLineResult.busLineName, busLineResult.busStations.count);
    }
    else {
        NSLog(@"抱歉,未找到Bus结果%d",error);
    }
}

注意代理控制:

-(void)viewWillDisappear:(BOOL)animated
{
    [_mapView viewWillDisappear];
    _mapView.delegate = nil; // 不用时,置nil,否则影响内存的释放
    _locService.delegate = nil;
    _poiSearch.delegate = nil;
    _busLineSearch.delegate = nil;
}

分别点击下面第1条,第3条,第4条,打印结果:

检索结果.PNG 公交检索结果.jpeg

度日教育还为您提供以下相关内容希望对您有帮助:

百度地图搜索能不能设置从近到远

百度地图搜索可以设置从近到远,操作方法如下。设备:iPhone 7 PLUS 系统:iOS 14.2 软件:百度地图APP 15.4 1、首先打开手机,点击【百度地图APP】。2、进入百度地图,点击底部的【周边】。3、进入周边菜单,点击左上角的【位置】切换到自己要查看的周边位置,之后点击【景点】。4、进入景点

怎样看导航地图认路

1. 确保手机中安装了最新的iOS系统,例如iOS 16.1,并在应用商店中下载并安装了百度地图应用。2. 打开百度地图应用。你会注意到屏幕中间和左下角各有一个蓝色小箭头。点击左下角的小箭头,右上角会出现指北针图标,同时屏幕中间的小箭头指示北方,红色箭头指向南方。3. 在搜索框中输入你想要去的目的...

百度地图历史导航记录在哪里看

1、打开百度地图,在首页中点击左上角的个人头像。2、在个人中心页面点击足迹。3、在我的足迹页面点击三条短横线。4、进入后即可查看到历史导航记录了。

百度地图怎么导航

手机:iPhone 14Pro 系统:iOS16 软件:百度地图v8.0.1 1、首先我们打开手机,点击进入【百度地图】app。 2、接着我们点击顶上的【搜索框】进入。 3、然后我们点击右下角的【到这去】。 4、最后我们点击右下角【开始导航】即可。 希望对您有所帮助,如有疑问记得留言哦,谢谢。 15 评论 分享 举报 零...

百度地图怎么看实时街景

1. 打开您的iPhone 13,确保操作系统为iOS 15.0,并打开最新版本的百度地图,版本号为15.12.0。2. 进入百度地图后,点击右上角的图层按钮,以展开地图操作菜单。3. 在菜单中选择“地图类型”,然后选择“全景地图”选项。4. 返回地图主页面,您将看到地图上的摄像头标志和相应的图片。5. 将摄像...

LBS·云百度地图LBS云概念

百度地图LBS云是百度为LBS开发者打造的一款全方位服务平台。以下是关于百度地图LBS云概念的详细解答:服务目的:解决挑战:旨在解决移动应用开发中关于位置数据管理的挑战,特别是存储和检索性能问题。核心功能:地图API:通过地图API,开发人员能够有效缓解服务器端对海量位置数据存储和维护的压力,同时解决高...

百度地图离线地图怎么用

1、首先我们打开手机,点击进入【百度地图】app。2、接着点击右下角【我的】,选择【离线地图】进入。3、接着我们点击【离线地图】进入下载。4、这里点击顶上右边的【城市列表】。5、选择一个城市,例如【南宁市】。6、等待下载完成,点击顶上的【下载管理】。7、然后我们点击选择【南宁市】,接着...

怎样看导航地图认路

1、首先需要在手机应用软件中下载安装好手机百度地图,点开百度地图。2、可以看到页面中间和左下角分别有一个蓝色的小箭头,点击页面左下角的蓝色的小箭头后,可以看到页面右上角出现了一个指北针,画面中间的蓝色小箭头也标示出了北边,红色箭头那边是北方。3、在页面上面的搜索框内输入你要去的地方,...

百度地图离线地图怎么用

1. 打开您的iPhone 14 Pro,进入系统iOS 16。2. 打开【百度地图】app,版本为15.14.5。3. 点击屏幕右下角的【我的】选项,然后选择【离线地图】。4. 点击【离线地图】进入下载页面。5. 向上滑动屏幕,点击右上角的【城市列表】选项。6. 从列表中选择一个城市,例如选择【南宁市】。7. 等待...

ios开发 怎么利用百度地图进行测距

1)首先打开百度地图,点击工具 2)在工具中找到测距,点击,出现你当时所在的地图,同时你也可以进行缩放选择点击你想查找的起始地点 3)再点击另外一个你想去的地点,点击后就出现路程。测距就已经结束了。

Copyright © 2019- drivesoft.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务