[iOS]获取地理位置信息
1.在工程的 info.plist 文件中增加两个key( 右键 - Add Row )
Privacy - Location Always and When In Use Usage Description Privacy - Location When In Use Usage Description
value里输入征求获取位置信息时展示的提示语:

2.在需要获取地理位置信息的文件中
#import <CoreLocation/CoreLocation.h>
在interfce行添加相关的delegate
CLLocationManagerDelegate
3.在interface构造两个属性:
@property (nonatomic,strong) CLLocationManager *locationManager; //定位
@property (nonatomic,strong) CLGeocoder *geoCoder; //地理位置信息
4.初始化两个定位相关的工具类,我们把它写成一个 名叫 initLocationInfo 的函数:
*此处有个坑爹的地方,定位的获取必须在主线程中进行,不然的话虽然也会有弹窗提示看起来一切正常,但是不会触发delegate回调
- (void)initLocationInfo {
// 初始化定位管理器
_locationManager = [[CLLocationManager alloc] init];
// 设置代理
_locationManager.delegate = self;
// 设置定位精确度到米
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
// 设置过滤器为无
_locationManager.distanceFilter = kCLDistanceFilterNone;
// 取得定位权限,有两个方法,取决于你的定位使用情况
// 一个是requestAlwaysAuthorization,一个是requestWhenInUseAuthorization
// 这句话ios8以上版本使用。
[_locationManager requestAlwaysAuthorization];
// 开始定位
[_locationManager startUpdatingLocation];
//地理信息
_geoCoder = [[CLGeocoder alloc] init];
}
5.更新的地理位置信息会回调一个delegate:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
在回调的delegate中我们对回传的地理信息进行处理:
//MARK: - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
NSLog(@"%lu",(unsigned long)locations.count);
CLLocation * location = locations.lastObject;
// 纬度
CLLocationDegrees latitude = location.coordinate.latitude;
// 经度
CLLocationDegrees longitude = location.coordinate.longitude;
NSLog(@"%@",[NSString stringWithFormat:@"%lf", location.coordinate.longitude]);
// NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f", location.coordinate.longitude, location.coordinate.latitude,location.altitude,location.course,location.speed); [_geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (placemarks.count > 0) {
CLPlacemark *placemark = [placemarks objectAtIndex:0];
NSLog(@"%@",placemark.name);
//获取城市
NSString *city = placemark.locality;
if (!city) {
//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市)
city = placemark.administrativeArea;
}
// 位置名
NSLog(@"name,%@",placemark.name);
// 街道
NSLog(@"thoroughfare,%@",placemark.thoroughfare);
// 子街道
NSLog(@"subThoroughfare,%@",placemark.subThoroughfare);
// 市
NSLog(@"locality,%@",placemark.locality);
// 区
NSLog(@"subLocality,%@",placemark.subLocality);
// 国家
NSLog(@"country,%@",placemark.country);
}else if (error == nil && [placemarks count] == 0) {
NSLog(@"No results were returned.");
} else if (error != nil){
NSLog(@"An error occurred = %@", error);
}
}];
// [manager stopUpdatingLocation];不用的时候关闭更新位置服务,不关闭的话这个 delegate 隔一定的时间间隔就会有回调
}
[iOS]获取地理位置信息的更多相关文章
- HTML5 获取地理位置信息
HTML5增加的新功能,获取地理位置信息,如果浏览器支持且设备有定位功能,就能够直接使用这组API来获取当前信息位置.该Geolocation API可以应用于移动设备中的地理位置. Geolocat ...
- Html5 Geolocation获取地理位置信息
Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置.基于此特性可以开发基于位置的服务应用.在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用. ...
- AngularJS进阶(二十)HTML5实现获取地理位置信息并定位功能
HTML5实现获取地理位置信息并定位功能 注:请点击此处进行充电! 前言 这篇文章主要介绍了HTML5实现获取地理位置信息并定位功能,本文讲解了原生HTML5.百度地图.谷歌地图等三种获取理位置信息并 ...
- html5实现获取地理位置信息并定位
这里主要讲h5实现获取地理位置信息并定位功能,本文讲解了原生h5,百度地图,谷歌地图等三种获取地理信息并定位的方法,需要的朋友可以参考下: h5提供了地理位置功能(Geolocation API),能 ...
- html5获取地理位置信息API
html5获取地理位置信息API 在HTML5中,可以看下如何使用Geolocation API来获得用户的地理位置信息,如果该浏览器支持的话,且设备具有定位功能,就能够直接使用这组API来获取当前位 ...
- 百度api:根据经纬度获取地理位置信息
调用百度api,根据经度和纬度获取地理位置信息,返回Json. C#代码: using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Syste ...
- Html5 Geolocation获取地理位置信息(转)
Html5中提供了地理位置信息的API,通过浏览器来获取用户当前位置.基于此特性可以开发基于位置的服务应用.在获取地理位置信息前,首先浏览器都会向用户询问是否愿意共享其位置信息,待用户同意后才能使用. ...
- Android 获取地理位置信息 封装好了 直接用
前言:花了一个早上研究了以下android获取经纬度,然后网上的参考资料都是杂七杂八,基本上都是过去几年的,现在我用 android6.0参照别人的结果发生好多错误,我的内心几乎是崩溃的.后来,不断百 ...
- ios获取设备信息总结
1.获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名 ...
- HTML5获取地理位置信息
<!DOCTYPE html> <html> <head> <title>Location</title> <meta charset ...
随机推荐
- 【学习笔记】一种特别有意思的 RTOS 任务切换方法
一.介绍说明 目前常见流行的 RTOS 实现方式,如 FreeRTOS.uCosII.RT-Thread 等等,它们的内部的任务切换实现原理都差不多,都是通过借助汇编,根据不同的情况读写 CPU 寄存 ...
- saas解决redis数据库分离的一种方案
package com.xf.config; import java.util.HashMap; import java.util.Map; import java.util.Set; import ...
- Flex布局专题
Flex布局专题 参照 https://www.runoob.com/w3cnote/flex-grammar.html 下面是自己看代码的一下 小结,和认识,加笔记,加原文 认识容器 flex布局需 ...
- .NET Core 项目启动时运行定时任务
1.任务需求 在每次服务启动时定时(如24小时)清理一次缓存文件 2.代码实现 1)新建文件清理类 .NET Core 提供了BackgroundService的抽象类,在 ExecuteAsync ...
- 视觉十四讲:第七讲_3D-2D:P3P
1.P3P P3P输入数据为三对3D-2D的匹配点,一个单目相机,经过初始化,得到初始的3D点,就可以依次得到后续的姿态和3D点. ABC是上一时刻求的的3D点, abc是与上一次时刻的匹配点.利用相 ...
- Vue的认识、入门小历史
VUE.3 小知识 渐进式框架,尤雨溪 Soc原则:关注度分离原则 网络通信:axios 页面跳转:vue-router 状态管理:vuex Vue-ui: Ant-Design 阿里巴巴基于Reac ...
- c语言以及高级语言中的float到底是什么以及IEEE754
对内存里float4字节的好奇 初学计算机都要学那个什么二进制十进制什么补码 反码那些玩意儿哈,由于最近要做一个单片机往另外一个单片机发数据的需求,直接c语言指针 然后float4字节传过去不就得了吗 ...
- 钓鱼攻击之:Flash 网页钓鱼
钓鱼攻击之:Flash 网页钓鱼 目录 钓鱼攻击之:Flash 网页钓鱼 1 准备资料 2 具体钓鱼流程 3 生成后门并捆绑flash的安装程序 4 处理WEB站点过程 1 准备资料 Flash网站克 ...
- 钓鱼攻击之:OFFICE 宏后门文件钓鱼
钓鱼攻击之:OFFICE 宏后门文件钓鱼 目录 钓鱼攻击之:OFFICE 宏后门文件钓鱼 1 宏病毒介绍 1.1 Word 宏 1.2 Excel 4.0宏 2 生成 Word 宏后门 3 利用DOC ...
- WPF ScrollViewer 没有效果
ScrollViewer组件外组件如果是StackPanel组件 需要给StackPanel 设置高度,ScrollViewer 才会有滚动条 如果不想设置StackPanel高度,可以把StackP ...