基本步骤:
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 |
效果图: