iOS学习_地图_定位和编码与反编码

定位:

引入头文件  #import <CoreLocation/CoreLocation.h>
声明管理器属性:@property(nonatomic,strong)CLLocationManager *manager;
第一步:初始化管理器
self.manager = [[CLLocationManager alloc] init];
第二步:进行隐私的判断并授权

//进行隐私的判断
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"是否前往隐私进行设置,允许定位");
    }
    //进行版本的判断
    if ([[[UIDevice currentDevice] systemVersion] integerValue] >= 8.0) {
        //判断授权状态
        if ([CLLocationManager authorizationStatus]!=kCLAuthorizationStatusAuthorizedWhenInUse) {
            //请求授权
            [self.manager requestWhenInUseAuthorization];
        }
    }

//在授权请求之前需要在inforplist中设置允许定位的内容:把NSLocationWhenInUseUsageDescription(NSLocationAlwaysUsageDescription这是另一种方式)输入到inforplist中,然后在后边输入一句话;

第三步:设置管理器的代理和属性

self.manager.delegate = self;

第四步:开启定位

    [self.manager startUpdatingLocation];

实现代理方法

//这个代理方法是定位成功之后开始更新位置信息,只要移动的设置的最小距离之后也开始走这个方法;
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    //获取最后一次的位置
    CLLocation *location = locations.lastObject;
    //获取位置的坐标
    CLLocationCoordinate2D coordinate = location.coordinate;
    NSLog(@"经度:%f,纬度:%f,海拔:%f,航海方向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);
    //为了节省电源,如果不使用定位,需要把定位关了
    [self.manager stopUpdatingLocation];
}
//定位失败
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    NSLog(@"定位失败");
}

编码与反编码

声明编码与反编码类:@property(nonatomic,strong)CLGeocoder *geocoder;

初始化对象:self.geocoder = [[CLGeocoder alloc] init];

根据地名获取相关的信息(编码)

- (void)getCoordinateByAdress:(NSString *)address{
    //编码方法
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        //根据返回的地标,取出第一个(地标的位置很多)
        CLPlacemark *mark = placemarks.firstObject;
        //根据地标(mark)得到location
        CLLocation *location = mark.location;
        //根据mark获取区域
        CLRegion *region = mark.region;
        //获取字典信息
        NSDictionary *addressDic = mark.addressDictionary;
        NSLog(@"地标位置:%@,区域%@,地理位置信息%@",location,region,addressDic);
        /*
        //        NSString *name=placemark.name;//地名
        //        NSString *thoroughfare=placemark.thoroughfare;//街道
        //        NSString *subThoroughfare=placemark.subThoroughfare; //街道相关信息,例如门牌等
        //        NSString *locality=placemark.locality; // 城市
        //        NSString *subLocality=placemark.subLocality; // 城市相关信息,例如标志性建筑
        //        NSString *administrativeArea=placemark.administrativeArea; // 州
        //        NSString *subAdministrativeArea=placemark.subAdministrativeArea; //其他行政区域信息
        //        NSString *postalCode=placemark.postalCode; //邮编
        //        NSString *ISOcountryCode=placemark.ISOcountryCode; //国家编码
        //        NSString *country=placemark.country; //国家
        //        NSString *inlandWater=placemark.inlandWater; //水源、湖泊
        //        NSString *ocean=placemark.ocean; // 海洋
        //        NSArray *areasOfInterest=placemark.areasOfInterest; //关联的或利益相关的地标
         */
    }];
}

根据经纬度反编码取出地址(反编码)

- (void)getAdressByLongitude:(CLLocationDegrees)longitude Latitude:(CLLocationDegrees)latitude{
    //反编码
    //创建Cllocation
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        NSDictionary *dic = placemarks.firstObject.addressDictionary;
        NSLog(@"反编码地理位置信息:%@",dic);

    }];
}

计算两点之间的距离

- (void)distance{
    //创建位置一
    CLLocation *locationBeijing = [[CLLocation alloc] initWithLatitude:40 longitude:116];
    CLLocation *locationDaLiang = [[CLLocation alloc] initWithLatitude:39 longitude:121];
    CLLocationDistance distance = [locationBeijing distanceFromLocation:locationDaLiang];
    NSLog(@"北京到大连的距离:%f",distance);
}
时间: 2024-11-08 03:04:21

iOS学习_地图_定位和编码与反编码的相关文章

地图定位CoreLocation框架,地理位置编码与反编码

在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 这里我们简单了解一下CoreLocation,用于显示地理位置,坐标信息. 一.相关类介绍 CLLocationManager.用于定位服务管理类,它能够给我们提供位置信息和高度信息,也可以监控设备进入或离开某个区域,还可以获得设备的运行方向. CLLocation.封装了位置和高度信息. CLL

iOS开发系列--地图与定位

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

转-iOS开发系列--地图与定位

来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用

IOS学习之——地图2 跟踪用户位置变化

欢迎转载,转载请注明出处 本文地址:http://blog.csdn.net/zhenggaoxing/article/details/42707685 综述 mapkit提供了跟踪用户位置和方向变化的API,所以我们这里不用自定编辑定位信息,交给系统来搞. 添加framework 实现授权获取位置信息 在iOS8中,没有用户授权程序是无法获取定位信息的,所以我们需要在info.plist上添加两个键值: NSLocationAlwaysUsageDescription NSLocationWh

iOS开发系列--地图与定位-ios8

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

iOS进阶_地图上定位的标志——大头针

一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大头针类,我自定义的为MyAnnotation 大头针: 在iOS开发中经常会标记某个位置,需要使用地图标注,也就是大家俗称的“大头针”.只要一个NSObject类实现MKAnnotation协议就可以作为一个大头针,通常会重写协议中coordinate(标记位置).title(标题).subtitl

iOS学习_地图_添加大头针

首先要引入#import <MapKit/MapKit.h>框架 创建一个继承与NSObject的类;用于声明属性 接下来在ViewController中实现相关的操作 引入头文件 #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> #import "MyAnnotation.h" 定义相应的属性 //定位管理器 @property(nonatomic,strong)CLLo

iOS开发之地图与定位

---恢复内容开始--- 地图和定位看上去是挺高大上一东西,其实用法比TableView简单多了,下面的Demo是用的iOS中自带的地图和定位,当然了也可以用第三方的来加载地图,比如百度地图啥的,在这就不赘述了.今天的博客主要是介绍MKMapView的使用,MapView的使用和其他组件的用法差不多,MapView用的是委托回调,在使用mapView的Controller中要实现MKMapViewDelegate协议,并注册委托回调,然后实现相应的回调方法即可. 一,构建Demo的组件 为了节省

iOS开发中地图与定位

不管是QQ还是微信的移动client都少不了定位功能,之前在微信demo中没有加入定位功能,今天就写个定位的小demo来了解一下定位和地图的东西. 地图和定位看上去是挺高大上一东西.其有使用方法比TableView简单多了.以下的Demo是用的iOS中自带的地图和定位,当然了也能够用第三方的来载入地图.比方百度地图啥的,在这就不赘述了.今天的博客主要是介绍MKMapView的使用.MapView的使用和其它组件的使用方法差点儿相同.MapView用的是托付回调,在使用mapView的Contro