BaiduMap SDK

集成百度地图

1.下载SDK
2.配置开放环境
  • 2.1 根据需要导入 .framework包,将需要的BaiduMapAPI_**.framework功能包拖进项目,选择拷贝,xcode自动加进,不需要再到 Link Binary With Libaries 添加
  • 2.2 静态库中采用Objective-C++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm)
  • 2.3 添加依赖库
      • 添加方式: 在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。
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)。
  • 2.4 引入所需的第三方openssl库: 添加支持HTTPS所需的penssl静态库:libssl.a和libcrypto.a(SDK打好的包存放于thirdlib目录下),将这个目录拖进项目中
    • 2.5 环境配置
  • 在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
  • 2.6 引入mapapi.bundle资源文件

    • 如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。 方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
  • 2.7 根据需求引入头文件

    #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>//只引入所需的单个头文件
    
    3. 使用
    • 3.1 首先,在appdelegate.h中添加BMKMapManager的定义
    UINavigationController *navigationController;
    BMKMapManager* _mapManager;
    
    • 3.2 在didFinishLaunchingWithOptions方法中添加对BMKMapManager的初始化,并填入您申请的授权Key
    - (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 要使用百度地图,请先启动BaiduMapManager
      _mapManager = [[BMKMapManager alloc]init];
    // 如果要关注网络及授权验证事件,请设定     generalDelegate参数
      BOOL ret = [_mapManager start:@"在此处输入您的授权Key"  generalDelegate:nil];
      if (!ret) {
          NSLog(@"manager start failed!");
      }
    // Add the navigation controller's view to the window and display.
      [self.window addSubview:navigationController.view];
      [self.window makeKeyAndVisible];
     return YES;
    }
    
    • 3.3 在需要使用地图的控制器添加代码,编译,运行
- (void)viewDidLoad {
    [super viewDidLoad];
    BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.view = mapView;
}
///
(void)viewWillAppear:(BOOL)animated
{
    [_mapView viewWillAppear];
    _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
///
-(void)viewWillDisappear:(BOOL)animated
{
    [_mapView viewWillDisappear];
      _mapView.delegate = nil; // 不用时,置nil
}
4. 定位功能
  • 引入头文件,BaiduMapAPI_Location/BMKLocationService.h
  • 获取当前位置信息
-(void)viewDidLoad
{
    //初始化BMKLocationService
    _locService = [[BMKLocationService alloc]init];
    _locService.delegate = self;
    //启动LocationService
    [_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为BMKMapView对象
_mapView.showsUserLocation = YES;//显示定位图层
[_mapView updateLocationData:userLocation];
// 定位显示位置的模式
mapView.userTrackingMode = BMKUserTrackingModeFollow;
mapView.zoomLevel = 17;// 显示的比例尺
5. 检索功能
  • POI(Point of Interest),中文可以翻译为“兴趣点”
  • 百度SDK提供周边检索、区域检索和城市内检索
  • 下面演示周边检索,根据定位功能传入当前地址的经纬度(userLocation),然后提供关键词(keyWord)进行检索
  • 引入头文件, BaiduMapAPI_Search/BMKPoiSearch.h
 static int curPage = 0;
 -(void)viewDidLoad
  {
    //初始化检索对象
    _searcher =[[BMKPoiSearch alloc]init];
    _searcher.delegate = self;
    //发起检索
    BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
    option.pageIndex = curPage;
    option.pageCapacity = 10;
    option.location = CLLocationCoordinate2D{39.915, 116.404};
    option.keyword = @"小吃";
    BOOL flag = [_searcher poiSearchNearBy:option];
    [option release];
    if(flag)
    {
        NSLog(@"周边检索发送成功");
    }
    else
    {
        NSLog(@"周边检索发送失败");
    }

 }
 //实现PoiSearchDeleage处理回调结果
 - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error
 {
    if (error == BMK_SEARCH_NO_ERROR) {
        //在此处理正常结果
    }
    else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){
         //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表
         // result.cityList;
         NSLog(@"起始点有歧义");
    } else {
         NSLog(@"抱歉,未找到结果");
    }
}
//不使用时将delegate设置为 nil
-(void)viewWillDisappear:(BOOL)animated
{
     _searcher.delegate = nil;
}

results matching ""

    No results matching ""