<span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;">一、判断应用是否打开定位服务</span>
<span style="font-family: Arial, Helvetica, sans-serif;">#pragma mark --- 是否打开了定位服务</span>
-(void)isOpenBmkLocationService:(void(^)(BOOL state))completion{
if ([CLLocationManager locationServicesEnabled] && ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways
|| [CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse)) {
completion(YES);
NSLog(@"已经打开了定位服务")
}
else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied){
[SVProgressHUD showErrorWithStatus:@"请在iPhone的\"设置-隐私-定位服务\"中允许访问位置信息"];
NSLog(@"定位功能不可用");
}
}
二、地理位置反编码
头文件
#import <BaiduMapAPI_Search/BMKGeocodeSearch.h>
编码
/**
* 地理位置反编码
*
* @param completion 城市名
*/
-(void)BaiDuMapGeoCodeSearch:(getCityName)cityBlock{
self.block = cityBlock;
_codeSearch = [[BMKGeoCodeSearch alloc] init];
/**
* 用完之后nil掉,会影响内存释放
*/
_codeSearch.delegate = self;
/**
* 初始化逆地理编码类
*/
BMKReverseGeoCodeOption * codeOption = [[BMKReverseGeoCodeOption alloc] init];
/**
* 需要逆地理编码的坐标位置(经纬度)
*/
codeOption.reverseGeoPoint = self.location;
[_codeSearch reverseGeoCode:codeOption];
}
-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{
if (self.block && [result.addressDetail.city length]) {
self.block(result.addressDetail.city);
}
}
三、地理位置正编码
代理的引用与释放
-(void)viewWillAppear:(BOOL)animated{
[self.mapView viewWillAppear];
self.mapView.delegate = self;
_codeSearch.delegate = self;
}
-(void)viewWillDisappear:(BOOL)animated{
[self.mapView viewWillDisappear];
self.mapView.delegate = nil;
self.codeSearch.delegate = nil;
}
编码
-(void)BaiDuMapGeoCodeSearch:(MapViewBlock)mapBlock{
_codeSearch = [[BMKGeoCodeSearch alloc] init];
BMKGeoCodeSearchOption * codeOption = [[BMKGeoCodeSearchOption alloc] init];
// codeOption.city = @"杭州市";
codeOption.address = @"需要编码的地理位置";
[self.codeSearch geoCode:codeOption];
self.block = mapBlock;
}
-(void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{
if (self.block && result.location.longitude != 0.0) {
self.block(result.location);
}
}
调用后的显示
头文件
#import <BaiduMapAPI_Map/BMKAnnotation.h>
#import <BaiduMapAPI_Map/BMKPointAnnotation.h>
#import <BaiduMapAPI_Map/BMKPinAnnotationView.h>
[self BaiDuMapGeoCodeSearch:^(CLLocationCoordinate2D coordinate) {
//显示位置
self.mapView.centerCoordinate = coordinate;
//添加标记
[self createPointAnnotationWithCoordinate:coordinate];
}];
/**
* 只有在添加大头针的时候才会调用
*/
-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation{
if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
BMKPinAnnotationView * annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation"];
annotationView.pinColor = BMKPinAnnotationColorPurple;
// 从天上掉下效果
annotationView.animatesDrop = YES;
// 不可拖拽
annotationView.draggable = YES;
return annotationView;
}
return nil;
}
/**
* 添加一个大头针 显示用户位置
*
* @param location
*/
-(BMKPointAnnotation *)createPointAnnotationWithCoordinate:(CLLocationCoordinate2D)coordate{
BMKPointAnnotation * point = [[BMKPointAnnotation alloc] init];
point.coordinate = coordate;
[self.mapView addAnnotation:point];
return point;
}