iOS 地图定位(一)

当前位置: 首页 > 阅读 > 原创 >

iOS 地图定位(一)

时间:2016-12-13 13:20:17 作者:iOShuihui

    地图定位.png

    前言 越来越多的app带有地图定位功能,本文分析CoreLocation,让你快速上手地图定位技术。 定位 一次定位 导入CoreLocation.framework,点击箭头所指的加号,搜索CoreLocation.framework,添加。

    导入framework.png

    添加头文件<CoreLocation/CoreLocation.h>1.创建位置管理者

    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; self.locationManager = locationManager;

    注意:由于在方法里面创建的locationManager是局部变量,但是我们需要locationManager一直存在,所以定义成员属性接收。

    2.请求用户授权,在iOS8之前,只要导入CoreLocation 会自动申请权限,在iOS8之后需要程序员手写,而且需要配置info.plist文件

    //请求授权有两种,1:无论程序在前台还是在后台运行 都可以使用定位 //需要在info.plist添加:Privacy - Location Always Usage Description // [locationManager requestAlwaysAuthorization]; //2.请求app在使用期间授权 在前台使用时才可以使用定位 //需要在info.plist添加:Privacy - Location When In Use Usage Description [locationManager requestWhenInUseAuthorization]; if ([UIDevice currentDevice].systemVersion.floatValue >= 9.0) { // 临时开启后台定位 配置info.plist文件 不配置直接崩溃 locationManager.allowsBackgroundLocationUpdates = YES; }

    临时开启后台定位所需要配置的参数

    3.设置属性

    // 距离筛选 单位:米 当用户移动100.5米后调用定位方法 // locationManager.distanceFilter = 100.5; // 期望精度 单位:米 系统默认将100米范围内作为一个位置 // locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    4.设置代理,开启定位

    locationManager.delegate = self; [locationManager startUpdatingLocation];

    5.遵循代理,实现方法

    <CLLocationManagerDelegate> // 当定位成功时调用 一直调用 比较耗电 // manager:位置管理者 // locations:包含位置的数组 一个CLLocation代表一个位置 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations { // 获取数据 // NSLog(@"%@",locations); // 停止定位 省电 // [manager stopUpdatingLocation]; } 地理编码 地理编码:将具体地址转换成经纬度 // 1.创建地理编码对象 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; // 2.地理编码 // 异步 向苹果请求数据,调用此方法进行地理编码 [geocoder geocodeAddressString:@"罗湖" completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { // 防错处理 if (error) { NSLog(@"%@",error); return ; } // placemarks :所有的地标 一个CLPlacemark代表一个地标 for (CLPlacemark *placemark in placemarks) { NSLog(@"%@",placemark.name); // 经度 float longitudeValue = placemark.location.coordinate.longitude; NSLog(@"经度:%f",longitudeValue); // 纬度 float latitudeValue = placemark.location.coordinate.latitude; NSLog(@"纬度:%f",latitudeValue); // 具体地址 NSString *localityString = placemark.locality; NSString *addressString = placemark.name; NSLog(@"地址(市):%@",localityString); NSLog(@"地址(区):%@",addressString); } }];

    输出结果

    反地理编码 反地理编码:将经纬度转换成具体的地址 // 1.创建地理编码对象 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; // 2.反地理编码 // 2.1创建位置 CLLocation *location = [[CLLocation alloc] initWithLatitude:22.5 longitude:112]; // 2.2向苹果请求数据,调用反地理编码方法 [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { // 2.3防错处理 if (error) { NSLog(@"%@",error); return ; } // 2.4获取地标 在开发中给一个列表供用户选择 CLPlacemark *placemark = placemarks[0]; // 2.5赋值 NSLog(@"城市名:%@",placemark.locality); }];

延伸阅读:

女子当街脱光示威 把胸罩脱掉裸露乳房扑向交警

性爱的好处 性爱达人告诉你为何性爱是女人的十大全补汤

闷骚女的12个经典特征 她的18个销魂动作你抵挡得住吗

胸大的烦恼 男友轻轻抚摸着他说这胸器可以杀人

(责任编辑:美朵)
图文推荐
每日重点推荐
  • 小心!鸡血有毒 | 幸福课

    积极的自我陈述有时会失效,甚至有害。如果你本来就觉得自己很行,那么鸡血能帮你的自我感觉更加良好。但如果你觉得自己不行,想通过喊口号来让自己行——千万住手,鸡血对你有毒。

在线阅读专题