一:到百度地图官网 http://lbsyun.baidu.com 下载BaiduMap_IOSSDK_v3,再集成百度地图到应用中,目前下载的是最新版的SDK3.3.2版
72C65630-16DB-42F5-BA55-02F79EB1FEFE.png
二:下载好之后,将其导入到项目中,再根据文档进行以下操作
FDAA40AF-646C-4EC7-B284-83621E23479B.png
首先获取密钥 http://lbsyun.baidu.com/apiconsole/key ,得到的AK就是我们所需要的密钥
D51A5227-7BD4-43B7-8B3D-4B520F8A4DB6.png
需求注意以下事项:
静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,编译器在链接时不会链接对应符号,需要在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build Setting -> Other Linker Flags中添加-ObjC
授权Key的申请:新、旧Key之间不可通用
自v3.2.0起,百度地图iOS SDK全面支持HTTPS,需要广大开发者导入第三方openssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下)
添加方法:在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择libssl.a和libcrypto.a添加到工程中 。
如果在iOS9中使用了调起百度地图客户端功能,必须在"Info.plist"中进行如下配置,否则不能调起百度地图客户端。
LSApplicationQueriesSchemes
baidumap
自iOS SDK v2.5.0起,为了对iOS8的定位能力做兼容,做了相应的修改,开发者在使用过程中注意事项如下:
需要在info.plist里添加(以下二选一,两个都添加默认使用使用第一个):
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed)
三:手动配置.framework形式开发包
导入下载好的SDK
添加额外需要的framework
CoreLocation.framework和QuartzCore.framework、 OpenGLES.framework、 SystemConfiguration.framework 、
CoreGraphics.framework、Security.framework、 libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib)、
CoreTelephony.framework 、libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib)。
(注:后面三个系统库为v2.9.0新增的系统库,使用v2.9.0及以上版本的地图SDK,务必增加导入这3个系统库。)
添加方式: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。
引入头文件(按需引入即可)
#import //引入base相关所有的头文件
#import //引入地图功能所有的头文件
#import //引入检索功能所有的头文件
#import //引入云检索功能所有的头文件
#import //引入定位功能所有的头文件
#import //引入计算工具所有的头文件
#import //引入周边雷达功能所有的头文件
#import //只引入所需的单个头文件
四:可以开始开发了。。。
1 > 在AppDelegate里面初始化BMKMapManager
mapManager = [[BMKMapManager alloc] init];
BOOL ret = [mapManager start:@"在此处输入您的授权Key" generalDelegate:nil];
if (!ret) {
NSLog(@"manager start failed");
}
2 > 创建BMKMapView
在viewDidLoad里面
//初始化地图
_mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, mapScreenW, mapScreenH)];
[self.view addSubview:_mapView];
地图View的Delegate,此处记得不用的时候需要置nil,否则影响内存的释放
-(void)viewWillAppear:(BOOL)animated{
[_mapView viewWillAppear];
_mapView.delegate = self;
}
-(void)viewDidDisappear:(BOOL)animated{
[_mapView viewWillDisappear];
_mapView.delegate = nil;
}
运行程序可以看到如下界面,地图雏形已经有了
Simulator Screen Shot 2017年6月23日 下午4.26.19.png
五 :接下来实现地图的定位功能
1 > 定位显示类型
目前为止,BMKMapView的定位模式(userTrackingMode)有4种分别是:
BMKUserTrackingModeNone :普通定位模式,显示我的位置,我的位置图标和地图都不会旋转
BMKUserTrackingModeFollow : 定位跟随模式,我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转
BMKUserTrackingModeFollowWithHeading : 定位罗盘模式,我的位置始终在地图中心,我的位置图标和地图都会跟着旋转
BMKUserTrackingModeHeading:普通定位+定位罗盘模式,显示我的位置,我的位置始终在地图中心,我的位置图标会旋转,地图不会旋转。即在普通定位模式的基础上显示方向。
2 > 获取位置信息
初始化定位
_locationService = [[BMKLocationService alloc] init];
//定位服务Delegate,调用startUserLocationService定位成功后,用此Delegate来获取定位数据
//(在视图将要消失的方法里置nil)
_locationService.delegate = self;
_mapView.showsUserLocation = NO;//先关闭显示的定位图层
_mapView.userTrackingMode = BMKUserTrackingModeNone;//设置定位的状态
_mapView.showsUserLocation = YES;//显示定位图层
[_locationService startUserLocationService];
实现定位的代理方法,获取定位数据
#pragma mark -- BMKLocationServiceDelegate
//用户方向更新后,调用此函数
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation{
NSLog(@"heading is %@",userLocation.heading);
[_mapView updateLocationData:userLocation];
}
//用户位置更新后,调用此函数
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{
[_mapView updateLocationData:userLocation];
打印的是这样的经纬度数据,我们难以明白是具体的哪个地方,所以需要进行地理反编码
C8E85017-FA34-45A8-B552-61531C4B0E80.png
3 > 获取坐标进行地理反编码
初始化地理编码主类
//初始化地理编码主类,用来查询、返回结果信息
_geocodesearch = [[BMKGeoCodeSearch alloc] init];
_geocodesearch.delegate = self;
在获取地理坐标位置的代理函数里面更新
//用户位置更新后,调用此函数
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{
[_mapView updateLocationData:userLocation];
NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
//更新当前位置到地图中间
_mapView.centerCoordinate = userLocation.location.coordinate;
//地理反编码
BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
reverseGeocodeSearchOption.reverseGeoPoint = userLocation.location.coordinate;
BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
if(flag){
NSLog(@"反geo检索发送成功");
[_locationService stopUserLocationService];
}else{
NSLog(@"反geo检索发送失败");
}
}
地址反编码
#pragma mark 地理反编码的 -- BMKGeoCodeSearchDelegate
-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{
NSLog(@"address:%@----%@",result.addressDetail,result.address);
//addressDetail: 层次化地址信息
//address: 地址名称
//businessCircle: 商圈名称
// location: 地址坐标
// poiList: 地址周边POI信息,成员类型为BMKPoiInfo
}
//定位失败
- (void)didFailToLocateUserWithError:(NSError *)error{
NSLog(@"error:%@",error);
}
定位成功,截图如下
Uploading 2084C3F7-706D-4E73-9E79-7DA7315BD838_075531.png
D52A96B8-C8AF-4BD5-A3AF-E0CEA17E715D.png
六 :接下来实现地图的三种形式的转换
1 > 切换为卫星地图
//切换为卫星图
[_mapView setMapType:BMKMapTypeSatellite];
IMG_7857.PNG
2 > 空白地图
//设置地图为空白类型
_mapView.mapType = BMKMapTypeNone;
3 > 标准地图
_mapView.mapType = BMKMapTypeStandard;
本文介绍了如何在iOS应用中集成百度地图SDK,包括下载SDK、申请API密钥、配置工程、手动添加依赖库、初始化地图及定位服务。详细步骤涵盖从启动地图管理器到实现定位功能,以及切换地图显示模式,如普通、跟随、罗盘和混合模式。同时,还涉及到地理反编码以获取具体地址信息。
&spm=1001.2101.3001.5002&articleId=112886280&d=1&t=3&u=edba24bda3bd44bd90cb1f58d61fe12d)
1575

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



