苹果给我们提供了内置的地图 但是功能不够强大 不能满足我们在项目中的需求
我们用系统的地图库只能实现简单的功能
因此 我们可以使用百度给我们提供的SDK 来开发
百度SDK 中的代码实现是不可见的 因为含有大量的机密
但是这不影响我们使用百度地图 使用百度地图有很多坑的
你要想使用百度地图SDK 首先要成为他的开发者
但是有点坑的是 之前申请的 百度开发者 用的是2.5 版本的SDK
今年六月份 SDK 更新为 2.8.1 版本的 之前的key 就使用不了的 还得重新注册
下面讲一下怎样集成百度地图
我们需要申请一个key 来使用
我们要按照官方文档上面的照做就可以 步骤很详细
由于系统原因,iOS不允许使用第三方定位,因此地图SDK中的定位方法,本质上是对原生定位的二次封装。通过封装,开发者可更便捷的使用。此外,地图SDK中还提供了相应的定位图层(支持定位三态效果),帮助开发者显示当前位置信息。
注:自iOS8起,系统定位功能进行了升级,SDK为了实现最新的适配,自v2.5.0起也做了相应的修改,开发者在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):
NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述
NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
我们可以利用百度地图做下面的事情
地图:提供地图展示和地图操作功能;
POI检索:支持周边检索、区域检索和城市内兴趣点检索;
地理编码:提供经纬度和地址信息相互转化的功能接口;
线路规划:支持公交、驾车、步行三种方式的线路规划;
覆盖物图层:支持在地图上添加覆盖物(标注、几何图形、热力图、地形图图层等),展示更丰富的LBS信息;
定位:获取当前位置信息,并在地图上展示(支持普通、跟随、罗盘三种模式);
离线地图:使用离线地图可节省用户流量,提供更好的地图展示效果;
调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能;
周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能;
LBS云检索:支持查询存储在LBS云内的自有数据;
特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用;
接下来给大家看个小例子 实现了简单的搜索功能
#import "ViewController.h"
#import <BaiduMapAPI/BMapKit.h>
@interface ViewController ()<BMKMapViewDelegate,BMKPoiSearchDelegate>
/**
* 百度地图
*/
@property (nonatomic, strong) BMKMapView *mapView;
/**
* 检索对象
*/
@property (nonatomic, strong) BMKPoiSearch* poisearch;
@end
@implementation ViewController
- (BMKPoiSearch *)poisearch
{
if (!_poisearch) {
_poisearch = [[BMKPoiSearch alloc]init];
_poisearch.delegate = self;
}
return _poisearch;
}
- (void)viewDidLoad {
[super viewDidLoad];
BMKMapView *mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 100, 375, 200)];
[self.view addSubview: mapView];
self.mapView = mapView;
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.frame = CGRectMake(100, 500, 50, 50);
btn.backgroundColor = [UIColor cyanColor];
[btn addTarget: self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
- (void)viewWillDisappear:(BOOL)animated
{
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
}
- (void)btnClick
{
//检索周边的信息
BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init];
//检索当前页码
citySearchOption.pageIndex = 0;
//检索条数
citySearchOption.pageCapacity = 10;
citySearchOption.city= @"北京";
citySearchOption.keyword = @"大学";
BOOL flag = [self.poisearch poiSearchInCity:citySearchOption];
if(flag)
{
NSLog(@"城市内检索发送成功");
}
else
{
NSLog(@"城市内检索发送失败");
}
}
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult*)result errorCode:(BMKSearchErrorCode)error
{
// 清楚屏幕中所有的annotation
NSArray* array = [NSArray arrayWithArray:_mapView.annotations];
[_mapView removeAnnotations:array];
if (error == BMK_SEARCH_NO_ERROR) {
NSMutableArray *annotations = [NSMutableArray array];
for (int i = 0; i < result.poiInfoList.count; i++) {
BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];
BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
item.coordinate = poi.pt;
item.title = poi.name;
[annotations addObject:item];
}
[self.mapView addAnnotations:annotations];
[self.mapView showAnnotations:annotations animated:YES];
} else if (error == BMK_SEARCH_AMBIGUOUS_ROURE_ADDR){
NSLog(@"起始点有歧义");
} else {
// 各种情况的判断。。。
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end