浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

iOS 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

HelloBaiduMap

引入头文件

#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件

初始化BMKMapManager
在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权AK(请确保此处AK与当前工程Bundle identifier匹配,否则会出现地图数据无法加载,只有方格的情况),示例如下:

- (BOOL)application:(UIApplication *)application   
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       
    // 要使用百度地图,请先启动BaiduMapManager  
    BMKMapManager *mapManager = [[BMKMapManager alloc] init];   
    // 如果要关注网络及授权验证事件,请设定generalDelegate参数
    BOOL ret = [_mapManager start:@"在此处输入您的授权AK"  generalDelegate:nil];  
    if (!ret) {  
        NSLog(@"manager start failed!");  
    }  
    /**
     全局设置地图SDK与开发者交互时的坐标类型。不调用此方法时,
 
     设置此坐标类型意味着2个方面的约定:
     1. 地图SDK认为开发者传入的所有坐标均为此类型;
     2. 所有地图SDK返回给开发者的坐标均为此类型;

     地图SDK默认使用BD09LL(BMK_COORDTYPE_BD09LL)坐标。
     如需使用GCJ02坐标,传入参数值为BMK_COORDTYPE_COMMON即可。ß
     本方法不支持传入WGS84(BMK_COORDTYPE_GPS)坐标。
 
     @param coorType 地图SDK全局使用的坐标类型
     @return 设置成功返回YES,设置失败返回False
     */ 
    [self.window addSubview:navigationController.view];  
    [self.window makeKeyAndVisible];  
    return YES;  
}

设置全局坐标系

全局设置地图SDK与开发者交互时的坐标类型。地图SDK默认使用BD09LL(BMK_COORDTYPE_BD09LL)坐标。如需使用GCJ02坐标,传入参数值为BMK_COORDTYPE_COMMON即可。本方法不支持传入WGS84(BMK_COORDTYPE_GPS)坐标。

开发者通过调用设置全局坐标方法(setCoordinateTypeUsedInBaiduMapSDK)设置的全局坐标类型后,意味着开发者和地图SDK约定传入和返回的坐标类型均为设置的类型;比如:定位传入的坐标,检索返回的坐标。

设置方法如下:

//设置为GCJ02坐标
[BMKMapManager setCoordinateTypeUsedInBaiduMapSDK: BMK_COORDTYPE_COMMON];

注意:设置后请严格遵守约定,否则会出现经纬度与地图上展示的不一致的问题。为设置此项请确保传入坐标均为BD09LL(百度经纬度坐标)

创建BMKMapView

在您的ViewController.m文件中添加BMKMapView的创建代码,示例如下:

#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
#import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件

@interface ViewController ()<BMKMapViewDelegate>
@property (nonatomic, strong) BMKMapView *mapView;
@end

@implementation ViewController
- (void)viewDidLoad {  
    [super viewDidLoad];  
    _mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds]; 
    _mapView.delegate = self;
    [self.view addSubView:_mapView];      
}
@end

注意:BMKMapView使用viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中必须需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法。

示例代码如下:

-(void)viewWillAppear:(BOOL)animated    
{    
    [super viewWillAppear:animated];
    [_mapView viewWillAppear];        
}    
-(void)viewWillDisappear:(BOOL)animated    
{
    [super viewWillDisappear:animated];
    [_mapView viewWillDisappear];
}

编译运行

效果如下图所示:

xianshi001.jpg

地图类型

地图类型及显示层级

百度地图SDK支持21级的地图显示,卫星图、热力图只支持显示到20级,放大至21级时将不再显示;交通路况图只支持显示到21级,放大至22级时将不再显示。各地图类型和图层支持层级说明如下表:

地图类型或图层类型
显示层级
2D地图 4-21级
3D地图 19-21级
卫星图 4-20级
路况交通图 7-21级
百度城市热力图 11-20级
室内图 17-22级

注:地图SDK自v4.0.0版本起,地图缩放等级由3-21变更为4-21,优化南北极地区展示效果。

1.设置缩放级别 BMKMapView设置级别示例代码如下:

[_mapView setZoomLevel:17];//将当前地图显示缩放等级设置为17级

地图显示比例尺

百度地图SDK显示层级与比例尺对照表如下:

显示层级
比例尺/米
4 1000000
5 500000
6 200000
7 100000
8 50000
9 25000
10 20000
11 10000
12 5000
13 2000
14 1000
15 500
16 200
17 100
18 50
19 20
20 10
21 5

1.设置比例尺显示 设置比例尺是否显示,默人为不显示,代码如下:

//显示比例尺
_mapView.showMapScaleBar = YES;
//隐藏比例尺
_mapView.showMapScaleBar = NO;
多实例地图显示

支持多实例显示地图,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。

创建两个BMKMapView

在当前控制器中展示两个BMKMapView,示例代码如下:

#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
#import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件

@property (nonatomic, strong) BMKMapView *upsideMapView; //当前界面上方的mapView
@property (nonatomic, strong) BMKMapView *undersideMapView; //当前界面下方的mapView

_upsideMapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, (self.view.frame.size.height) / 2.0)];
_undersideMapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height) / 2.0 + 10, self.view.frame.size.width, (self.view.frame.size.height) / 2.0 - 10)];

添加到当前的view上

//将upsideMapView添加到当前视图中
[self.view addSubview:_upsideMapView];
//将undersideMapView添加到当前视图中
[self.view addSubview:_undersideMapView];

分别设置delegate

//设置upsideMapView的代理
_upsideMapView.delegate = self;
//设置undersideMapView的代理
_undersideMapView.delegate = self;

分别管理mapView的生命周期

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    //当upsideMapView即将被显示的时候调用,恢复之前存储的upsideMapView状态
    [_upsideMapView viewWillAppear];
    //当undersideMapView即将被显示的时候调用,恢复之前存储的undersideMapView状态
    [_undersideMapView viewWillAppear];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    //当upsideMapView即将被隐藏的时候调用,存储当前upsideMapView的状态
    [_upsideMapView viewWillDisappear];
    //当undersideMapView即将被隐藏的时候调用,存储当前undersideMapView的状态
    [_undersideMapView viewWillDisappear];
}

分别设置显示缩放级别

//设置upsideMapView的缩放等级
 [_upsideMapView setZoomLevel:17];
//设置undersideMapView的缩放等级
 [_undersideMapView setZoomLevel:20];

编译运行

效果如下图所示:

xianshi002.jpg
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消