最近自己写了几个小项目,项目中用的到一些大家平时开发会常用的一些功能,在此做下记录,以便后续能快速开发。
《集成百度地图》
第一步
登录百度地图开发平台 进入API控制后台 创建应用 。 应用名称 你的应用名称 安全码 你的App Bundle Identifier 提交即可;
这下你得到了 最关键的Key了
第二步
使用CocoaPods导入地图SDK
在Podfile文件里添加
pod'BaiduMapKit'#百度地图SDK
终端CD 到 项目文件夹下 执行 pod install 耐心等待一下
Analyzing dependencies
Downloading dependencies
Installing BaiduMapKit(2.9.1)
Generating Pods project
Integrating client project
[!]Pleasecloseany current Xcode sessions anduse`***.xcworkspace`forthisproject from now on.Sendingstats
看到这些,表示已经加入完成。
第三步
打开项目头文件 添加百度头文件
比较多,可以根据自己的业务需要 ,按需添加
第四步
终于可以看到地图了
@interface AppDelegate:NSObject {
UIWindow*window;
UINavigationController*navigationController;
BMKMapManager*_mapManager;
}
-(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.windowaddSubview:navigationController.view];
[self.windowmakeKeyAndVisible];returnYES;}
-(void)viewDidLoad{
[superviewDidLoad];
BMKMapView*mapView=[[BMKMapView alloc]initWithFrame:self.view.bounds];
self.view=mapView;
}
-(void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate=self;
// 此处记得不用的时候需要置nil,否则影响内存的释放}
-(void)viewWillDisappear:(BOOL)animated
{[_mapView viewWillDisappear]
;_mapView.delegate=nil;// 不用时,置nil
}
运行~
呦呦呦切克闹 地图出来了
第五步
定位获取自己的地理坐标 ,分地理编码获取自己的位置
@interface ZRBMapVC ()<BMKLocationServiceDelegate,BMKMapViewDelegate, BMKGeoCodeSearchDelegate>{
BMKMapView *_mapView;
BMKLocationService *_locService;
BMKGeoCodeSearch *_geoSearch;
}
/** 用户当前位置*/
@property(nonatomic , strong) BMKUserLocation *userLocation;
/** 当前城市*/
@property (nonatomic, copy) NSString *city;
@end
// 此处记得不用的时候需要置nil,否则影响内存的释放
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
_locService.delegate = nil;
_geoSearch.delegate = nil;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
_locService.delegate = self;
_geoSearch.delegate = self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"获取地位";
[self setupMapViewWithParam];
}
-(void)setupMapViewWithParam
{
self.userLocation = [[BMKUserLocation alloc] init];
//初始化BMKMapView
_mapView = [[BMKMapView alloc] initWithFrame:self.view.bounds];
_mapView.buildingsEnabled = YES;//设定地图是否现显示3D楼块效果
_mapView.overlookEnabled = YES; //设定地图View能否支持俯仰角
_mapView.showMapScaleBar = YES; // 设定是否显式比例尺
// _mapView.overlooking = -45; // 地图俯视角度,在手机上当前可使用的范围为-45~0度
_mapView.zoomLevel = 18;//设置放大级别
_mapView.userTrackingMode = BMKUserTrackingModeNone;//设置定位的状态
_mapView.showsUserLocation = YES;//显示定位图层
[self.view addSubview:_mapView];
_locService = [[BMKLocationService alloc] init];
_locService.distanceFilter = 200;//设定定位的最小更新距离,这里设置 200m 定位一次,频繁定位会增加耗电量
_locService.desiredAccuracy = kCLLocationAccuracyHundredMeters;//设定定位精度
//开启定位服务
[_locService startUserLocationService];
_geoSearch = [[BMKGeoCodeSearch alloc] init];
}
/**
*用户位置更新后,会调用此函数
*@param userLocation 新的用户位置
*/
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
[_mapView updateLocationData:userLocation];// 动态更新我的位置数据
self.userLocation = userLocation;
[_locService stopUserLocationService];
[_mapView setCenterCoordinate:userLocation.location.coordinate];// 当前地图的中心点
NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
// /// geo检索信息类,获取当前城市数据
BMKReverseGeoCodeOption *reverseGeoCodeOption = [[BMKReverseGeoCodeOption alloc] init];
reverseGeoCodeOption.reverseGeoPoint = userLocation.location.coordinate;
[_geoSearch reverseGeoCode:reverseGeoCodeOption];
}
#pragma mark - 根据坐标返回反地理编码搜索结果
-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error {
BMKAddressComponent *addressComponent = result.addressDetail;
self.city = addressComponent.city;
NSString *title = [NSString stringWithFormat:@"%@%@%@%@", addressComponent.city, addressComponent.district, addressComponent.streetName, addressComponent.streetNumber];
NSLog(@"%s -- %@", __func__, title);
}
至此 获取就获取自己的定位了。demo 中实现了更多深层功能,如需 请留言~