iOS百度地图简单使用
2016-06-04 14:25
549 查看
本文介绍三种接口:
1.基础地图2.POI检索
3.定位
首先是配置环境,有两种方法,方法在官方教程里都有,不再多说
1.使用CocoaPods自动配置【这个方法特别好,因为当你使用CocoaPods配置完之后就可以直接使用了,简单到你都不敢相信,我他妈用手动配置,每次都有各种问题,解决起来烦死人,使用CocoaPods配置,可能会报一个错(linker command failed with exit code 1 (use -v to see invocation)),但是,很好解决,只需要找到Build settings->Linking->Other Linker Flags,添加一个-all_load就可以了 】2.手动配置【这个方法就是狗屎 bull shit】
特别注意:
1、如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。 <key>LSApplicationQueriesSchemes</key> <array> <string>baidumap</string> </array> 2、自iOS SDK v2.5.0起,为了对iOS8的定位能力做兼容,需要在info.plist里添加(以下二选一,两个都添加默认使用 NSLocationWhenInUseUsageDescription): NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述 NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述 3、在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start fail
配置完成后
在AppDelegate.m文件中添加对BMKMapManager的初始化,并填入申请的授权Key#import "AppDelegate.h" #import <BaiduMapAPI_Base/BMKMapManager.h> @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //创建并初始化一个引擎对象 BMKMapManager *manager = [[BMKMapManager alloc] init]; //启动地图引擎 BOOL success = [manager start:@"zBWLNgRUrTp9CVb5Ez6gZpNebljmYylO" generalDelegate:nil]; if (!success) { NSLog(@"失败"); } // Override point for customization after application launch. return YES; }
1.基础地图
#import "ViewController.h" #import <BaiduMapAPI_Map/BMKMapView.h> @interface ViewController ()<BMKMapViewDelegate> @property (nonatomic,strong) BMKMapView *mapView;//地图视图 @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化地图 self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame]; self.mapView.delegate =self; //设置地图的显示样式 self.mapView.mapType = BMKMapTypeSatellite;//卫星地图 //设定地图是否打开路况图层 self.mapView.trafficEnabled = YES; //底图poi标注 self.mapView.showMapPoi = NO; //在手机上当前可使用的级别为3-21级 self.mapView.zoomLevel = 21; //设定地图View能否支持旋转 self.mapView.rotateEnabled = NO; //设定地图View能否支持用户移动地图 self.mapView.scrollEnabled = NO; //添加到view上 [self.view addSubview:self.mapView]; //还有很多属性,根据需求查看API }
因为我们选的样式是卫星地图,所有效果如下
2.定位
#import "ViewController.h" #import <BaiduMapAPI_Map/BMKMapView.h> #import <BaiduMapAPI_Location/BMKLocationService.h> @interface ViewController ()<BMKLocationServiceDelegate,BMKMapViewDelegate> @property (nonatomic,strong) BMKMapView *mapView;//地图视图 @property (nonatomic,strong) BMKLocationService *service;//定位服务 @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //初始化地图 self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame]; self.mapView.delegate =self; //添加到view上 [self.view addSubview:self.mapView]; //初始化定位 self.service = [[BMKLocationService alloc] init]; //设置代理 self.service.delegate = self; //开启定位 [self.service startUserLocationService]; // Do any additional setup after loading the view, typically from a nib. } #pragma mark -------BMKLocationServiceDelegate /** *用户位置更新后,会调用此函数 *@param userLocation 新的用户位置 */ - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation { //展示定位 self.mapView.showsUserLocation = YES; //更新位置数据 [self.mapView updateLocationData:userLocation]; //获取用户的坐标 self.mapView.centerCoordinate = userLocation.location.coordinate; self.mapView.zoomLevel =18; }
效果如下
3.POI检索
#import "ViewController.h" #import <BaiduMapAPI_Map/BMKMapView.h> #import <BaiduMapAPI_Location/BMKLocationService.h> #import <BaiduMapAPI_Search/BMKPoiSearch.h> #import <BaiduMapAPI_Map/BMKAnnotation.h> #import <BaiduMapAPI_Map/BMKPointAnnotation.h> #import <BaiduMapAPI_Map/BMKPinAnnotationView.h> #define kWidth [UIScreen mainScreen].bounds.size.width @interface ViewController ()<BMKLocationServiceDelegate,BMKPoiSearchDelegate,BMKMapViewDelegate> @property (nonatomic,strong) BMKMapView *mapView;//地图视图 @property (nonatomic,strong) BMKLocationService *service;//定位服务 @property (nonatomic,strong) BMKPoiSearch *poiSearch;//搜索服务 @property (nonatomic,strong) NSMutableArray *dataArray; @end @implementation ViewController - (NSMutableArray *)dataArray { if (!_dataArray) { _dataArray = [NSMutableArray array]; } return _dataArray; } - (void)viewDidLoad { [super viewDidLoad]; //初始化地图 self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame]; self.mapView.delegate =self; // //设置地图的显示样式 // self.mapView.mapType = BMKMapTypeSatellite;//卫星地图 // // //设置路况 // self.mapView.trafficEnabled = YES; // // //底图poi标注 // self.mapView.showMapPoi = NO; // // //在手机上当前可使用的级别为3-21级 // self.mapView.zoomLevel = 21; // // //旋转 // self.mapView.rotateEnabled = NO; // // //拖拽 // self.mapView.scrollEnabled = NO; // [self.view addSubview:self.mapView]; //初始化定位 self.service = [[BMKLocationService alloc] init]; //设置代理 self.service.delegate = self; //开启定位 [self.service startUserLocationService]; // Do any additional setup after loading the view, typically from a nib. } #pragma mark -------BMKLocationServiceDelegate /** *用户位置更新后,会调用此函数 *@param userLocation 新的用户位置 */ - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation { //展示定位 self.mapView.showsUserLocation = YES; //更新位置数据 [self.mapView updateLocationData:userLocation]; //获取用户的坐标 self.mapView.centerCoordinate = userLocation.location.coordinate; self.mapView.zoomLevel =18; //初始化搜索 self.poiSearch =[[BMKPoiSearch alloc] init]; self.poiSearch.delegate = self; //初始化一个周边云检索对象 BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init]; //索引 默认为0 option.pageIndex = 0; //页数默认为10 option.pageCapacity = 50; //搜索半径 option.radius = 200; //检索的中心点,经纬度 option.location = userLocation.location.coordinate; //搜索的关键字 option.keyword = @"小吃"; //根据中心点、半径和检索词发起周边检索 BOOL flag = [self.poiSearch poiSearchNearBy:option]; if (flag) { NSLog(@"搜索成功"); //关闭定位 [self.service stopUserLocationService]; } else { NSLog(@"搜索失败"); } } #pragma mark -------BMKPoiSearchDelegate /** *返回POI搜索结果 *@param searcher 搜索对象 *@param poiResult 搜索结果列表 *@param errorCode 错误号,@see BMKSearchErrorCode */ - (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode { //若搜索成功 if (errorCode ==BMK_SEARCH_NO_ERROR) { //POI信息类 //poi列表 for (BMKPoiInfo *info in poiResult.poiInfoList) { [self.dataArray addObject:info]; //初始化一个点的注释 //只有三个属性 BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init]; //坐标 annotoation.coordinate = info.pt; //title annotoation.title = info.name; //子标题 annotoation.subtitle = info.address; //将标注添加到地图上 [self.mapView addAnnotation:annotoation]; } } } /** *返回POI详情搜索结果 *@param searcher 搜索对象 *@param poiDetailResult 详情搜索结果 *@param errorCode 错误号,@see BMKSearchErrorCode */ - (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode { NSLog(@"%@",poiDetailResult.name); } #pragma mark -------------BMKMapViewDelegate /** *根据anntation生成对应的View *@param mapView 地图View *@param annotation 指定的标注 *@return 生成的标注View */ - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation { //如果是注释点 if ([annotation isKindOfClass:[BMKPointAnnotation class]]) { //根据注释点,创建并初始化注释点视图 BMKPinAnnotationView *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"an"]; //设置大头针的颜色 newAnnotation.pinColor = BMKPinAnnotationColorRed; //设置动画 newAnnotation.animatesDrop = YES; return newAnnotation; } return nil; } /** *当选中一个annotation views时,调用此接口 *@param mapView 地图View *@param views 选中的annotation views */ - (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view { //poi详情检索信息类 BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init]; BMKPoiInfo *info = self.dataArray.firstObject; //poi的uid,从poi检索返回的BMKPoiResult结构中获取 option.poiUid = info.uid; /** *根据poi uid 发起poi详情检索 *异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiDetailResult通知 *@param option poi详情检索参数类(BMKPoiDetailSearchOption) *@return 成功返回YES,否则返回NO */ BOOL flag = [self.poiSearch poiDetailSearch:option]; if (flag) { NSLog(@"检索成功"); } else { NSLog(@"检索失败"); } }
运行效果如下
注意:模拟器是有很多问题的,如果定位不了什么的,都是正常的
相关文章推荐
- iOS开发~CocoaPods使用详细说明
- iOS -pch配置
- iOS中通知的使用NSNotificationCenter
- 第三方插件
- iOS手势识别(双击、捏、旋转、拖动、划动、长按)详解
- 解决虚拟机中安装的mac os系统无法识别ios设备的问题
- 2016年最新苹果开发者账号注册申请流程最强详解!
- iOS 【.pch文件的路径方便设置】
- iOS开发 GET、POST请求方法:NSURLSession篇
- nagios监控进程
- iOS 本地通知的实现
- iOS 9 NetworkExtension使用
- iOS中的音频服务和音频AVAudioPlayer音频播放器使用指南
- iOS socket
- 单例模式
- iOS-NSURLCache
- ios之地理编码常用知识整理
- ios 之MKAnnotationView与MKPinAnnotationView 的区别
- iOS开发实现支付宝双击Home键进入后台后的毛玻璃效果
- iOS解档与归档