手把手教你,百度地图
第一步,创建项目,自己动手。
第二步,拷贝你的 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
2854

被折叠的 条评论
为什么被折叠?



