zoukankan      html  css  js  c++  java
  • iOS设备定位

    一、iOS谈到定位

    1、SignInSignOutViewController.h

    @interface SignInSignOutViewController : UIViewController<CLLocationManagerDelegate>{
        CLLocationManager *_locationManager;
        // 纬度
        float _latitude;
        // 经度
        float _longitude;
    }
    @property (nonatomic,retain) CLLocationManager *locationManager;
    @property (nonatomic) float latitude;
    @property (nonatomic) float longitude;
    
    @end

    2、SignInSignOutViewController.m

    #import "SignInSignOutViewController.h"
    
    @interface SignInSignOutViewController ()
    
    @end
    
    @implementation SignInSignOutViewController
    @synthesize locationManager = _locationManager;
    @synthesize latitude = _latitude;
    @synthesize longitude = _longitude;
    
    -(void)dealloc{
        
        self.locationManager = nil;
        [super dealloc];
    }
    
    - (void)viewDidUnload
    {
        [super viewDidUnload];
        self.locationManager = nil;
    }
    
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // 实例化一个位置管理器
        CLLocationManager *cllocationManager = [[CLLocationManager alloc] init];
        self.locationManager = cllocationManager;
        [cllocationManager release];
        self.locationManager.delegate = self;
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        [self.locationManager startUpdatingLocation];
        if(![CLLocationManager locationServicesEnabled]){
            [GlobalApplication Alert:@"提示":@"请开启定位:设置 > 隐私 > 位置 > 定位服务"];
        }else{
            if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorized) {
                [GlobalApplication Alert:@"提示":@"定位失败,请开启定位:设置 > 隐私 > 位置 > 定位服务 下 XX应用"];
            }
        }
     }
    
    
    
    #pragma mark - CLLocationManagerDelegate
    #pragma mark - CLLocationManagerDelegate
    // 地理位置发生改变时触发
    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    {
        CLLocationCoordinate2D cc,cc2;
        // 获取经纬度
        cc.longitude = newLocation.coordinate.longitude;
        cc.latitude = newLocation.coordinate.latitude;
        // ios坐标(google)转换为 百度坐标
        cc2 = BMKCoorDictionaryDecode(BMKBaiduCoorForWgs84(cc));
        self.longitude = cc2.longitude;
        self.latitude = cc2.latitude;
        // 停止位置更新
        [manager stopUpdatingLocation];
    }
    
    // 定位失误时触发
    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
        NSString *errorString;
        [manager stopUpdatingLocation];
        switch([error code]) {
            case kCLErrorDenied:
                errorString = @"定位失败,请开启定位:设置 > 隐私 > 位置 > 定位服务 下 XX应用";
                //errorString = @"Access to Location Services denied by user";
                break;
            case kCLErrorLocationUnknown:
                errorString = @"定位失败,位置数据不可用";
                break;
            default:
                errorString = @"定位失败,未知错误";
                break;
        }
    
        [GlobalApplication Alert:@"定位":errorString];
    }
    

    二、百度地图定位(版本号2.1)

    1、MainMenuViewController.h

    @interface MainMenuViewController : UIViewController<BMKUserLocationDelegate> {
        BMKUserLocation *_mapLocation;
        // 纬度
        float _latitude;
        // 经度
        float _longitude;
    }
    
    @property (nonatomic, retain) BMKUserLocation *mapLocation;
    @property (nonatomic) float latitude;
    @property (nonatomic) float longitude;
    @end

    2、MainMenuViewController.m

    #import "MainMenuViewController.h"
    @interface MainMenuViewController ()
    
    @end
    
    @implementation MainMenuViewController
    @synthesize mapLocation = _mapLocation;
    @synthesize latitude = _latitude;
    @synthesize longitude = _longitude;
     
    -(void)dealloc{
        self.mapLocation = nil;
        [super dealloc];
        
    }
    
    - (void)viewDidUnload
    {
        [super viewDidUnload];
        self.mapLocation = nil;
    }
    
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        BMKUserLocation *bmkLocation = [[BMKUserLocation alloc] init];
        bmkLocation.delegate = self;
        self.mapLocation = bmkLocation;
        [bmkLocation release];
        [self.mapLocation startUserLocationService];
    }
    
    #pragma mark - baidu map
    
    /**
     *调用startUserLocationService定位成功后,会调用此函数
     *@param userLoc 我的位置坐标
     */
    - (void)viewDidGetLocatingUser:(CLLocationCoordinate2D)userLoc{
        if (userLoc.longitude != 0 && userLoc.latitude != 0 ) {
            self.longitude = userLoc.longitude;
            self.latitude = userLoc.latitude;
            [self.mapLocation stopUserLocationService];
        }
    }

    三、结果
    方法一:
    iOS:xxx.151604,xx.170156(iOS採集的坐标)
    baidu:xxx.162720,xx.174000 (百度转换的坐标)
    方法二:
    baidu:xxx.162716,xx.173980 (坐标百度收藏)
  • 相关阅读:
    怎么判断是从微信浏览器打开还是手机自带的浏览器(其他浏览器)打开?
    h5移动端页面强制横屏
    苹果的正常显示,安卓的不知道写了什么白屏了
    截取地址栏的最后一个参数
    检测手机号码的正则表达式
    js判断是不是在微信浏览器打开?
    LArea插件选中城市,确定之后又很难再次选择城市?
    display: inline-block 布局
    调试
    时间
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5042453.html
Copyright © 2011-2022 走看看