iOS 开发 百度地图

手把手教你,百度地图

第一步,创建项目,自己动手。

第二步,拷贝你的 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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值