iOS地圖定位

一、定位。
1),iOS8以后,請求定位時候,需要在info.plist文件里加入一個字段。
//NSLocationAlwaysUsageDescription(一直定位,后臺的也能定位)
//NSLocationWhenInUseUsageDescription(使用的時候定位)
2),如果需要使用定位,需要導入CoreLocation框架。

import <CoreLocation/CoreLocation.h>

遵守代理<CLLocationManagerDelegate>
_locationManager.delegate = self;

初始化定位管理器


    _locationManager = [[CLLocationManager alloc] init];
    //在ios8以后,請求定位需要調(diào)用下面的方法
    //做版本判斷是因為低版本調(diào)用高版本的方法,會出現(xiàn)崩潰
    if ([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0) {
        //一直定位
        [_locationManager requestAlwaysAuthorization];
        //用時定位
        [_locationManager requestWhenInUseAuthorization];
    }
    //當用戶移動50米時,會調(diào)用一次代理方法[定位一次]
    
    _locationManager.distanceFilter = 50;
    //設置定位的精確度,精確度越高,越費電
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

實現(xiàn)代理方法

    。
//授權(quán)結(jié)果
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
    if (status == kCLAuthorizationStatusNotDetermined) {
        NSLog(@"等待用戶授權(quán)");
    }else if(status == kCLAuthorizationStatusAuthorizedAlways ||
             status == kCLAuthorizationStatusAuthorizedWhenInUse){
        NSLog(@"授權(quán)成功");
        //開始更新用戶的位置信息,一旦調(diào)用了這個方法,就會不斷地獲取用戶的位置信息
        [_locationManager startUpdatingLocation];
        
    }else{
        NSLog(@"授權(quán)失敗");
    }
}
//定位成功
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    //數(shù)組中最后的元素是最新的定位
    //拿到用戶最新的位置信息
    //按時間排序,如果想要拿到最新的位置信息,如果想要拿到最新的位置信息,直接拿到最后一個
    CLLocation *currentLocation = [locations lastObject];
    //把最新的位置信息賦值給_location
    _location = currentLocation;
    
    //比如:獲取用戶所在的城市,只需要一次
    //停止更新用戶的位置信息
//    [manager stopUpdatingLocation];
}

//定位失敗
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    
    NSLog(@"失敗");
    NSLog(@"%@",error.userInfo);
}

正向地理編碼

地址轉(zhuǎn)換為經(jīng)緯度稱為正向地理編碼

//創(chuàng)建編碼對象
 CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
    //正向地理編碼
    NSString *str = @"地址字符串";
    [geoCoder geocodeAddressString:str completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if (placemarks.count == 0) {
            return ;
        }
        CLPlacemark *placeMark = [placemarks lastObject];
       
        NSLog(@"緯度%lf",placeMark.location.coordinate.latitude);
        NSLog(@"經(jīng)度%lf",placeMark.location.coordinate.longitude);
    }];

反向地理編碼

將經(jīng)緯度轉(zhuǎn)換成詳細的地址。

//創(chuàng)建編碼對象
    CLGeocoder *geoCoder = [[CLGeocoder alloc] init];
    //反向地理變量    
//_location :一個地理位置的
    [geoCoder reverseGeocodeLocation:_location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if (placemarks.count == 0) {
            return ;
        }
        //地標  里面封住了詳細的地址信息
        CLPlacemark *placeMark = placemarks[0];
        NSLog(@"%@",placeMark.addressDictionary);
        //addressDictionary  詳細的位置信息
    }];

通過兩個地理位置計算之間距離

CLLocation *location1 = [[CLLocation alloc] initWithLatitude:34.772108 longitude:113.675915];
    CLLocation *location2 = [[CLLocation alloc] initWithLatitude:34.772478 longitude:113.678005];
    
    //計算兩個經(jīng)緯度之間的距離 單位是米
    CLLocationDistance distance = [location1 distanceFromLocation:location2];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 前言 越來越多的app帶有地圖定位功能,本文分析CoreLocation,讓你快速上手地圖定位技術(shù)。 定位 一次定...
    codychen123閱讀 724評論 1 8
  • 定位 常用方法的介紹 CLLocationManager位置管理器,我們的有關于位置的方法和屬性都是通過它來管理設...
    Joker_King閱讀 1,338評論 0 3
  • title : IOS地圖定位導航category : UI 地圖定位導航 標簽(空格分隔): IOS 概述 I...
    袁俊亮技術(shù)博客閱讀 2,211評論 3 10
  • 出自http://my.oschina.net/are1OfBlog/blog/420034 摘要 現(xiàn)在很多社交、...
    JJO閱讀 4,327評論 4 19
  • 簡介 在移動互聯(lián)網(wǎng)時代,移動app能解決用戶的很多生活瑣事,比如 周邊:找餐館、找KTV、找電影院等等 導航:根據(jù)...
    JonesCxy閱讀 1,538評論 1 1

友情鏈接更多精彩內(nèi)容