虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > IOS编程/Objective-C > ios百度地图的使用(普通定位、反地理编码)

ios百度地图的使用(普通定位、反地理编码)
类别:IOS编程/Objective-C   作者:码皇   来源:互联网   点击:

iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置)使用代码如何实现呢,下面小编就给大家详解ios百度地图的使用(普通定位、反地理编码,有需要的朋友可以参考下

iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下:

    #import <CoreLocation/CoreLocation.h> 使用到的头文件 要引入CoreLocation这个包<CLLocationManagerDelegate> 使用的代理名称//1.使用定位服务 //设置app有访问定位服务的权限 //在使用应用期间 / 始终(app在后台) //info.plist文件添加以下两条(或者其中一条): //NSLocationWhenInUseUsageDescription 在使用应用期间 //NSLocationAlwaysUsageDescription 始终 //2.LocationManager 对象管理相关的定位服务 _manager = [[CLLocationManager alloc] init];
    //manager判断: 手机是否开启定位 / app是否有访问定位的权限 //[CLLocationManager locationServicesEnabled];
    //手机是否开启定位 //[CLLocationManager authorizationStatus];
    //app访问定位的权限的状态 if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
    [_manager requestWhenInUseAuthorization];
    //向用户请求访问定位服务的权限 }
    _manager.delegate = self;
    _manager.desiredAccuracy = kCLLocationAccuracyBest;
    _manager.distanceFilter = 1.0f;
    [_manager startUpdatingLocation];
    //定位代理经纬度回调-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    [_manager stopUpdatingLocation];
    CLGeocoder * geoCoder = [[CLGeocoder alloc] init];
    [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
    for (CLPlacemark * placemark in placemarks) {
    NSDictionary *test = [placemark addressDictionary];
    // Country(国家) State(城市) SubLocality(区) Name全称 NSLog(@"%@", [test objectForKey:@"Name"]);
    }
    }
    ];
    }

ios百度地图的使用(普通定位、反地理编码)

1.首先接受基本的地图功能

新建一个地图类,xib拖也行,我这边是代码实现的。

 

    _mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.height)];
    //添加mapVIew [self.view addSubview:_mapView];
    #pragma mark - 设置mapView属性-(void)setMapViewProperty{
    _mapView.mapType = BMKUserTrackingModeFollowWithHeading;
    _mapView.showsUserLocation = YES;
    //是否显示定位图层(即我的位置的小圆点) _mapView.zoomLevel = 16;
    //地图显示比例 _mapView.rotateEnabled = NO;
    //设置是否可以旋转 [self passLocationValue];
    }
    #pragma mark -传入定位坐标 //设置定位到得用户的位置,这里是简单的应用方法(必须打开程序时已经获取到地理位置坐标,为了解决地图定位时总是先显示天安门)-(void)passLocationValue{
    BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake([UserLocationManager sharedInstance].clloction.coordinate, BMKCoordinateSpanMake(0.02f,0.02f));
    BMKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion];
    [_mapView setRegion:adjustedRegion animated:YES];
    }
    #pragma mark -设置定位圆点属性-(void)setUserImage{
    //用户位置类 BMKLocationViewDisplayParam* param = [[BMKLocationViewDisplayParam alloc] init];
    param.locationViewOffsetY = 0;
    //偏移量 param.locationViewOffsetX = 0;
    param.isAccuracyCircleShow =NO;
    //设置是否显示定位的那个精度圈 param.isRotateAngleValid = NO;
    [_mapView updateLocationViewWithParam:param];
    }

这样基本的地图界面就出来了

如果你需要在地图上做一些请求,可以实现BMKMapViewDelegate,以下是mapView的一些协议方法

    ** *地图区域即将改变时会调用此接口 *@param mapview 地图View *@param animated 是否动画 */- (void)mapView:(BMKMapView *)mapView regionWillChangeAnimated:(BOOL)animated{
    //TODO}
    /** *地图区域改变完成后会调用此接口 *@param mapview 地图View *@param animated 是否动画 */- (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
    //TODO}
    /** *地图状态改变完成后会调用此接口 *@param mapview 地图View */- (void)mapStatusDidChanged:(BMKMapView *)mapView{
    //TODO}

2.地图定位

我这边是将定位封装了一个独立的manager类来管理定位和地图上滑动到的位置,是将定位功能和地图mapVIew独立开来,管理地理移动位置的变化

    #import <Foundation/Foundation.h>#import "BMapKit.h"@interface UserLocationManager : NSObject <BMKMapViewDelegate,BMKLocationServiceDelegate>{
    CLLocation *cllocation;
    BMKReverseGeoCodeOption *reverseGeoCodeOption;
    //逆地理编码}
    @property (strong,nonatomic) BMKLocationService *locService;
    //城市名@property (strong,nonatomic) NSString *cityName;
    //用户纬度@property (nonatomic,assign) double userLatitude;
    //用户经度@property (nonatomic,assign) double userLongitude;
    //用户位置@property (strong,nonatomic) CLLocation *clloction;
    //初始化单例+ (UserLocationManager *)sharedInstance;
    //初始化百度地图用户位置管理类- (void)initBMKUserLocation;
    //开始定位-(void)startLocation;
    //停止定位-(void)stopLocation;
    @end#import "UserLocationManager.h"@implementation UserLocationManager+ (UserLocationManager *)sharedInstance{
    static UserLocationManager *_instance = nil;
    @synchronized (self) {
    if (_instance == nil) {
    _instance = [[self alloc] init];
    }
    }
    return _instance;
    }
    -(id)init{
    if (self == [super init]) {
    [self initBMKUserLocation];
    }
    return self;
    }
    #pragma 初始化百度地图用户位置管理类/** * 初始化百度地图用户位置管理类 */- (void)initBMKUserLocation{
    _locService = [[BMKLocationService alloc]init];
    _locService.delegate = self;
    [self startLocation];
    }
    #pragma 打开定位服务/** * 打开定位服务 */-(void)startLocation{
    [_locService startUserLocationService];
    }
    #pragma 关闭定位服务/** * 关闭定位服务 */-(void)stopLocation{
    [_locService stopUserLocationService];
    }
    #pragma BMKLocationServiceDelegate/** *用户位置更新后,会调用此函数 *@param userLocation 新的用户位置 */- (void)didUpdateUserLocation:(BMKUserLocation *)userLocation{
    cllocation = userLocation.location;
    _clloction = cllocation;
    _userLatitude = cllocation.coordinate.latitude;
    _userLongitude = cllocation.coordinate.longitude;
    [self stopLocation];
    (如果需要实时定位不用停止定位服务)}
    /** *在停止定位后,会调用此函数 */- (void)didStopLocatingUser{
    ;}
    /** *定位失败后,会调用此函数 *@param error 错误号 */- (void)didFailToLocateUserWithError:(NSError *)error{
    [self stopLocation];
    }

以上代码就是本文ios百度地图的使用(普通定位、反地理编码),希望对大家今后的工作和学习有所帮助。

相关热词搜索: ios百度地图地理编码 ios地图反地理编码 i