地图定位 - 定位,持续定位设置,比较两个位置的距离 地理编码 反地理编码

地图定位 - 

需要导入头文件

#import <CoreLocation/CoreLocation.h>


1.定位

2.持续定位设置

3.比较两个位置的距离

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic,strong)CLLocationManager *locationManager;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    /************定位***************/
    
    self.locationManager = [[CLLocationManager alloc]init];
    
    // 请求用户授权(iOS8以后才有) 需要配置 plist 列表
    // 在 information Property List 中添加 键值对
    // key:     NSLocationWhenInUseUsageDescription
    // value:   自定义授权说明

    // 用户使用期间授权
    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
    }
    
    //  授权
//    if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
//        [self.locationManager requestAlwaysAuthorization];
//    }

    //使用代理获得定位数据
    self.locationManager.delegate = self;
    
    // 开始定位
    [self.locationManager startUpdatingLocation];
    // 结束定位
    //    [self.locationManager stopUpdatingLocation];
    
    /************持续定位设置***************/
    
    //设置距离筛选器
    self.locationManager.distanceFilter = 10 ;
    
    //设置精度
    
    /**
            kCLLocationAccuracyBest; 默认
            kCLLocationAccuracyNearestTenMeters;
            kCLLocationAccuracyHundredMeters;
            kCLLocationAccuracyKilometer;
            kCLLocationAccuracyThreeKilometers;
     */
    self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
  
    /************比较两个位置的距离***************/
    
    CLLocation *location1 = [[CLLocation alloc]initWithLatitude:40 longitude:70];
    CLLocation *location2 = [[CLLocation alloc]initWithLatitude:50 longitude:80];
    
    CGFloat distance = [location2 distanceFromLocation:location1];

    NSLog(@"distance:%f",distance/1000);
    
}

/**
 当用户更新位置的时候调用此方法  频繁调用, 非常耗电
 */

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    //CLLocation 位置对象 --> 经纬度
    //CLLocationCoordinate2D coordinate 经纬度
    //CLLocationDegrees latitude   纬度
    //CLLocationDegrees longitude  经度
    
    CLLocation *location = locations.firstObject;
    NSLog(@"latitude: %f,longitude: %f",location.coordinate.latitude, location.coordinate.longitude);
    
}

@end

地理编码

地址坐标  -> 地理坐标

  • 创建地理编码对象: CLGeocoder
  • 调用方法进行地理编码: geocodeAddressString
  • 在block中获取地标对象: CLPlacemark


需要导入头文件

#import <CoreLocation/CoreLocation.h>

    CLGeocoder *geocoder = [[CLGeocoder alloc]init];
    
    [geocoder geocodeAddressString:@"北京" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        if (placemarks.count == 0 || error){
            NSLog(@"没有这个地址");
            return ;
        }
        
        
        for (CLPlacemark *placemark in placemarks) {
            CGFloat latitudeFloat = placemark.location.coordinate.latitude;
            CGFloat longitudeFloat = placemark.location.coordinate.longitude;
            NSString *detailAddressStr = placemark.name;
            
            NSLog(@"纬度 = %.2f,经度 = %.2f,详细地址 = %@",latitudeFloat,longitudeFloat,detailAddressStr);
        }
        
    }];


反地理编码

地理坐标  -> 地址坐标

  • 创建地理编码对象: CLGeocoder
  • 调用方法进行地理编码:reverseGeocodeLocation
  • 在block中获取地标对象: CLPlacemark

需要导入头文件

#import <CoreLocation/CoreLocation.h>



    CLGeocoder *geocoder = [[CLGeocoder alloc]init];
    
    //2. 创建 CLLocation对象
    CLLocation *location = [[CLLocation alloc] initWithLatitude:31.23 longitude:121.47];
    
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        if (placemarks.count == 0 || error) {
            NSLog(@"没有数据或数据解析出错");
            return;
        }
        
        for (CLPlacemark *pm in placemarks) {
            // 获取城市信息, 如果有城市信息就显示, 否则可以显示行政区域
            if (pm.locality) {
                //locality : 城市
                NSString *cityStr = pm.locality;
                NSLog(@"城市:%@",cityStr);
            } else {
                //administrativeArea : 行政区域
                NSString *administrativeAreaStr = pm.administrativeArea;
                NSLog(@" 行政区域: %@",administrativeAreaStr);
            }
        }
    }];


  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dwt1220

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值