iOS 开发 百度地图
2016-06-21 10:18
561 查看
手把手教你,百度地图
第一步,创建项目,自己动手。
第二步,拷贝你的 Bundle ID ,进百度API。百度地图需要先申请密钥(key) ,才可使用该套SDK接口。
附上网址:http://lbsyun.baidu.com/apiconsole/key/create
这里填上项目名称,勾选iOS SDk ,把复制的 Bundle ID 粘贴过来,就创建应用成功了。
成功以后复制你的AK,先放进项目,等待后续操作吧。
![](https://img-blog.csdn.net/20160620171501197)
第三步,下载百度地图SDK,下载地址也留下:http://lbsyun.baidu.com/index.php?title=iossdk/sdkiosdev-download
接下来,配置开发环境,导入SDK
1、iOS 必须的 配置,这个就不详细说了
![](https://img-blog.csdn.net/20160620173152739)
接着添加Bundle display name,不明所以,但是要求添加
![](https://img-blog.csdn.net/20160620175509080)
2、手动配置 .framework 开发包
注意:BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。
将所需的BaiduMapAPI_**.framework拷贝到工程所在文件夹下。
在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI_**.framework添加到工程中。
此时注意一个问题,资源包在下载的Demo里,拿出来,直接拷贝进工程就可以。
![](https://img-blog.csdn.net/20160620172917566)
3、引入所需的系统库
需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework、libsqlite3.0.tbd、CoreTelephony.framework 、libstdc++.6.0.9.tbd。
![](https://img-blog.csdn.net/20160620172931779)
4、环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
![](https://img-blog.csdn.net/20160620173621946)
5、引入头文件
在使用SDK的类 按需 引入下边的头文件:
建议放在pch文件下。
6、把项目中的一个 .m 改为 .mm
我习惯性改 AppDelegate.m —— AppDelegate.mm
这下,就可以进入代码世界了。
先build一下,确定没有错误,我们继续
第四步,接下来,全是代码
1、AppDelegate 中 ,.h 添加
.m 中呢,也添加一个,在didFinishLaunchingWithOptions中,加入以下代码块:
这个时候跑一下吧,看看是否授权成功。
2、进入地图显示界面了
先声明地图
懒加载地图
接着在viewDidLoad中写一句
这下地图就显示出来了。
地图是比较消耗内存的,BMKMapView用viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:
第四步、其他功能
这个时候,地图的功能,你想要的功能,都可以实现了。
先来一个定位吧。
1、在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述。
2、添加代码
这个时候,就可以定位到自己的位置了。
再来一个 poi 检索
POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以周边检索为例,向大家介绍如何使用检索服务。
这是一个poi检索周围停车场的例子,检索成功后,还会添加大头针,这样才能看得见停车场。
好了,地图其他的功能,自己研究去吧,再附上一个百度地图开发文档地址:
http://lbsyun.baidu.com/index.php?title=iossdk/guide/introduction
这是我的源码github地址:
https://github.com/wangjianchao1990/baidumap.git
第一步,创建项目,自己动手。
第二步,拷贝你的 Bundle ID ,进百度API。百度地图需要先申请密钥(key) ,才可使用该套SDK接口。
附上网址:http://lbsyun.baidu.com/apiconsole/key/create
这里填上项目名称,勾选iOS SDk ,把复制的 Bundle ID 粘贴过来,就创建应用成功了。
成功以后复制你的AK,先放进项目,等待后续操作吧。
第三步,下载百度地图SDK,下载地址也留下:http://lbsyun.baidu.com/index.php?title=iossdk/sdkiosdev-download
接下来,配置开发环境,导入SDK
1、iOS 必须的 配置,这个就不详细说了
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
接着添加Bundle display name,不明所以,但是要求添加
2、手动配置 .framework 开发包
注意:BaiduMapAPI_Base.framework为基础包,使用SDK任何功能都需导入,其他分包可按需导入。
将所需的BaiduMapAPI_**.framework拷贝到工程所在文件夹下。
在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI_**.framework添加到工程中。
此时注意一个问题,资源包在下载的Demo里,拿出来,直接拷贝进工程就可以。
3、引入所需的系统库
需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework、libsqlite3.0.tbd、CoreTelephony.framework 、libstdc++.6.0.9.tbd。
4、环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
5、引入头文件
在使用SDK的类 按需 引入下边的头文件:
建议放在pch文件下。
#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件 #import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件 #import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件 #import <BaiduMapAPI_Cloud/BMKCloudSearchComponent.h>//引入云检索功能所有的头文件 #import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件 #import <BaiduMapAPI_Utils/BMKUtilsComponent.h>//引入计算工具所有的头文件 #import <BaiduMapAPI_Radar/BMKRadarComponent.h>//引入周边雷达功能所有的头文件 #import < BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件
6、把项目中的一个 .m 改为 .mm
我习惯性改 AppDelegate.m —— AppDelegate.mm
这下,就可以进入代码世界了。
先build一下,确定没有错误,我们继续
第四步,接下来,全是代码
1、AppDelegate 中 ,.h 添加
@property (nonatomic, strong) BMKMapManager *mapManager;
.m 中呢,也添加一个,在didFinishLaunchingWithOptions中,加入以下代码块:
// 要使用百度地图,请先启动BaiduMapManager _mapManager = [[BMKMapManager alloc]init]; // 如果要关注网络及授权验证事件,请设定 generalDelegate参数 BOOL ret = [_mapManager start:@"把你之前拷贝的AK拿过来" generalDelegate:nil]; if (!ret) { NSLog(@"manager start failed!"); NSLog(@"_____________________授权失败"); }else{ NSLog(@"_____________________授权成功"); }
这个时候跑一下吧,看看是否授权成功。
2、进入地图显示界面了
先声明地图
@property(nonatomic,strong)BMKMapView *mapView;
懒加载地图
- (BMKMapView *)mapView { if (!_mapView) { BMKMapView *mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds]; _mapView = mapView; } return _mapView; }
接着在viewDidLoad中写一句
[self.view addSubview:self.mapView];
这下地图就显示出来了。
地图是比较消耗内存的,BMKMapView用viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:
// 协议名称 BMKMapViewDelegate -(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放 } -(void)viewWillDisappear:(BOOL)animated { [_mapView viewWillDisappear]; _mapView.delegate = nil; // 不用时,置nil }
第四步、其他功能
这个时候,地图的功能,你想要的功能,都可以实现了。
先来一个定位吧。
1、在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述。
2、添加代码
@implementation ViewController { BMKLocationService* _locService; }
#pragma mark - ___________定位_______ //实现相关delegate 处理位置信息更新 //处理方向变更信息 - (void)userLocation { // _mapView.showsUserLocation = YES; _locService = [[BMKLocationService alloc]init]; _locService.delegate = self; _mapView.userTrackingMode = BMKUserTrackingModeFollow; [self startUserLocationService]; } /// 开始定位 - (void)startUserLocationService { [_locService startUserLocationService]; } //实现相关delegate 处理位置信息更新 //处理方向变更信息 - (void)didUpdateUserHeading:(BMKUserLocation *)userLocation { //NSLog(@"heading is %@",userLocation.heading); } //处理位置坐标更新 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation { NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); // 设置屏幕中心 [_mapView setCenterCoordinate:userLocation.location.coordinate animated:YES]; // 设置显示比例尺 _mapView.zoomLevel = 18; // 更新我的位置数据 [_mapView updateLocationData:userLocation]; // 显示用户中心 _mapView.showsUserLocation = YES; }
这个时候,就可以定位到自己的位置了。
再来一个 poi 检索
POI(Point of Interest),中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
百度地图SDK提供三种类型的POI检索:周边检索、区域检索和城市内检索。下面将以周边检索为例,向大家介绍如何使用检索服务。
这是一个poi检索周围停车场的例子,检索成功后,还会添加大头针,这样才能看得见停车场。
#pragma mark ____________poi检索_______ - (void)initNearbySearchOption { { //初始化检索对象 _searcher =[[BMKPoiSearch alloc]init]; _searcher.delegate = self;//不同时记得置空 //发起检索 BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init]; //检索分页页码 option.pageIndex = 0; //检索分页每页多少个 option.pageCapacity = 16; //检索半径 option.radius = 500; //检索中心 这种直接给坐标的写法,有助于封装 option.location = CLLocationCoordinate2DMake(_myUserLocation.location.coordinate.latitude, _myUserLocation.location.coordinate.longitude); //检索关键字 option.keyword = @"停车场"; //发起检索 BOOL flag = [_searcher poiSearchNearBy:option]; if(flag) { NSLog(@"周边检索发送成功"); } else { NSLog(@"周边检索发送失败"); } } } //实现PoiSearchDeleage处理回调结果 - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error { if (error == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 NSLog(@"%@",poiResultList.poiInfoList); for (BMKPoiDetailResult *result in poiResultList.poiInfoList) { // 创建一个大头针 BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init]; // 大头针坐标 annotation.coordinate = CLLocationCoordinate2DMake(result.pt.latitude,result.pt.longitude); // 添加大头针 [_mapView addAnnotation:annotation]; } } else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){ //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表 // result.cityList; NSLog(@"起始点有歧义"); } else { NSLog(@"抱歉,未找到结果"); } }
好了,地图其他的功能,自己研究去吧,再附上一个百度地图开发文档地址:
http://lbsyun.baidu.com/index.php?title=iossdk/guide/introduction
这是我的源码github地址:
https://github.com/wangjianchao1990/baidumap.git
相关文章推荐
- Android Manifest 用法
- 什么是 GraphQL?
- Spark RDD API详解(一) Map和Reduce
- 房产界已上市和IPO路上的难兄难弟:房天下与房多多
- Spring Boot 开发微服务
- 利用百度地图提供的API做的应用
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- Android ADT 23.0.0无法更新到23.0.2问题解决方案
- 百度20年:搜索帝国的崛起、式微与重生
- 小白观察:Google 开始清除百度旗下公司开发的 46 款应用程序
- lwn拾遗:[sn3218 led drivers]-api解释-1
- 页面元素查找之Selectors API
- SDKMAN:轻松管理多个软件开发套件 (SDK) 的命令行工具
- 百度全面恢复网站权重,流量暴涨中
- 一个小型js框架myJSFrame附API使用帮助
- 详细分析交换机、路由器、集线器的区别和联系
- PowerShell打开或关闭光驱
- 批处理的api WMIC学习体会有感第1/2页
- 批处理 API实现文件下载的代码第1/2页
- Lua教程(十七):C API简介