百度地图使用第六讲:检索及大头针的使用

基本步骤:

1、创建地图视图;
2、使用定位的功能获取到当前位置;
3、利用检索功能,在当前位置检索某个关键字(如:酒吧);
4、利用检索到的结果,创建大头针并在地图上展示;

关键的类:

1、BMKMapView:地图
2、BMKLocationService:定位
3、BMKPoiSearch:POI检索(POI即Point Of Interest可以翻译为兴趣点)
4、BMKNearbySearchOption:周边搜索选项,配合POI检索使用,做为POI检索的数据模型
5、BMKPointAnnotation:大头针,可直接添加到地图上做为标注使用

关键方法:

#pragma mark 定位服务的代理方法,如果获取到位置信息则调用
– (void)didUpdateUserLocation:(BMKUserLocation *)userLocation
#pragma mark POI检索代理方法,如果检索到结果则调此方法
-(void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode
代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#import "SAViewController.h"
#import "BMapKit.h"
 
@interface SAViewController () <BMKPoiSearchDelegate, BMKMapViewDelegate, BMKLocationServiceDelegate>
 
@property (nonatomic, strong) BMKMapView         *mapView;   // 地图
@property (nonatomic, strong) BMKPoiSearch       *poiSearch; // POI检索
@property (nonatomic, strong) BMKLocationService *location;  // 定位服务
 
@end
 
@implementation SAViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // 添加地图视图
    self.mapView.frame = self.view.frame;
    [self.view addSubview:self.mapView];
 
    // 开启定位服务
    self.location = [[BMKLocationService alloc] init];
    self.location.delegate = self;
    [self.location startUserLocationService];
 
}
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.mapView viewWillAppear];
}
 
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.mapView viewWillDisappear];
}
 
- (BMKMapView *)mapView
{
    if (!_mapView) {
        _mapView = [[BMKMapView alloc] init];
        _mapView.delegate = self;
    }
    return _mapView;
}
 
- (BMKPoiSearch *)poiSearch
{
    if (!_poiSearch) {
        _poiSearch = [[BMKPoiSearch alloc] init];
        _poiSearch.delegate = self;
    }
    return _poiSearch;
}
 
#pragma mark 定位服务的代理方法,如果获取到位置信息则调用
- (void)didUpdateUserLocation:(BMKUserLocation *)userLocation
{
    // 定位成功后将当前的位置设置为地图的中心点
    self.mapView.centerCoordinate = userLocation.location.coordinate;
    // 地图的缩放比例的17 (3 ~ 19取值)
    self.mapView.zoomLevel = 17;
    // 停止定位服务
    [self.location stopUserLocationService];
 
    // 创建一个搜索选项(检索的数据模型)
    BMKNearbySearchOption *nearOption = [[BMKNearbySearchOption alloc] init];
    // 检索关键字:“酒吧”
    nearOption.keyword = @"酒吧";
    // 检索位置为当前定位到的坐标(即我当前的位置)
    nearOption.location = userLocation.location.coordinate;
    // 开始检索
    [self.poiSearch poiSearchNearBy:nearOption];
}
 
#pragma mark POI检索代理方法,如果检索到结果则调此方法
-(void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode
{
    // 检索到相关信息后,对结果进行遍历(结果为BMKPoiInfo类型的数组)
    for (BMKPoiInfo *info in poiResult.poiInfoList) {
        // 遍历结果中的每一个数据模型并创建一个大头针
        BMKPointAnnotation *annotation = [[BMKPointAnnotation alloc] init];
        // 大头针的位置为结果的坐标(经纬度)
        annotation.coordinate = info.pt;
        // 大头针的标题为结果的名称
        annotation.title = info.name;
        // 大头针的子标题为结果的地址
        annotation.subtitle = info.address;
        // 在大头针添加到地图上展示
        [self.mapView addAnnotation:annotation];
    }
}
 
@end

效果图:

iOS-模拟器屏幕快照“2014年11月20日-上午10.06.26”

Leave a Reply