iOS 百度地图 判断应用是否授权、地理位置的正反编码

<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;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值