ios 百度地图指定区域_iOS - 百度地图一(配置、定位和三种地图切换)

本文介绍了如何在iOS应用中集成百度地图SDK,包括下载SDK、申请API密钥、配置工程、手动添加依赖库、初始化地图及定位服务。详细步骤涵盖从启动地图管理器到实现定位功能,以及切换地图显示模式,如普通、跟随、罗盘和混合模式。同时,还涉及到地理反编码以获取具体地址信息。

一:到百度地图官网 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值