iOS 地图定位 定位

2023-05-16

定位

常用方法的介绍

CLLocationManager位置管理器,我们的有关于位置的方法和属性都是通过它来管理设置的。 + (BOOL)locationServicesEnabled监测设备是否开启定位功能。 - (void)requestAlwaysAuthorization请求用户设置在程序运行期间和程序在前台和后台,都开启定位。需要在info.plist文件中添加相应的字段(键值对)来配合该方法的使用。NSLocatiodenAlwaysUsageDescription键 值(提示信息) - (void)requestWhenInUseAuthorization请求用户设置只在程序运行期间才开启定位服务。需要在info.plist文件中添加相应的字段(键值对)来配合该方法的使用。NSLocationWhenInUseUsageDescription键 值(提示信息) - (void)startUpdatingLocation开启定位,在所有相关的属性设置完毕之后,需要开启定位。

需要设置的属性

  • 设置定位的频率,每隔多少米定位一次。
距离筛选器
@property(assign, nonatomic) CLLocationDistance distanceFilter;
如果将下面的常量赋值给这个属性就可以将位置管理器返回到没有设置筛选器的默认状态。
复制代码
  • 设置精确度(精确度是根据当前应用的需求来定的,不是越精确越好,精确度越高越耗电)。
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
//下面是可以被设置的值
extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation;
extern const CLLocationAccuracy kCLLocationAccuracyBest;
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
复制代码
  • CLLocationManager代理属性,用来指定代理人。
@property(assign, nonatomic, nullable) id<CLLocationManagerDelegate> delegate;
复制代码

示例代码

注意:在初始化位置管理器的时候,我们需要将位置管理器的对象设置成为实例变量或者是属性,如果直接初始化为局部实例变量,这时候它的协议方法有可能会不执行。 在代码都正常的情况下,定位如果失败,有可能是网络环境的问题,我们可以换一下网络试试 在延展中需要声明属性

@interface RootViewController ()<CLLocationManagerDelegate>
@property (strong, nonatomic)CLLocationManager *locationManager;//定位服务的管理对象。
@end
复制代码
self.locationManager = [[CLLocationManager alloc]init];初始化一个位置管理器
BOOL openLocationServices = [CLLocationManager locationServicesEnabled];
    if (openLocationServices) {
        NSLog(@"已经开启定位");
        [self.locationManager requestAlwaysAuthorization];//请求用户总是使用定位服务
        self.locationManager.distanceFilter = 10.0;//设置定位的频率,
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;//设置精确度
        self.locationManager.delegate = self;//设置代理
        [self.locationManager startUpdatingLocation];//开始定位
    }else{
        NSLog(@"无法获取你的位置信息,为了更好的为你服务,请在设置隐私定位服务中开启定位服务");
    }
复制代码

定位的代理方法 位置管理器代理必须遵循CLLocationManagerDelegate协议,该协议定义了多个方法,其中有两个方法,当位置管理器已经确定当前位置或者当它检测到位置的更改时将调用。 在方法中你会见到一个CLLocationCoordinate2D它是一个结构体,里面包含了经纬度

typedef struct {
	CLLocationDegrees latitude;//纬度
	CLLocationDegrees longitude;//经度
} CLLocationCoordinate2D;
复制代码

如果想创建一个CLLocationCoordinate2D我们一般使用如下的方法

CLLocationCoordinate2D CLLocationCoordinate2DMake(CLLocationDegrees latitude, CLLocationDegrees longitude)
复制代码
  • 定位获取location信息的时候会执行的协议方法
-(void)locationManager:(CLLocationManager *)manager 
didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations{
    if (locations && locations.count) {
        CLLocationCoordinate2D lastLocation = locations.lastObject.coordinate;
        NSLog(@"纬度%f    经度%f",lastLocation.latitude,lastLocation.longitude);
    }
}
复制代码
  • 定位出现错误的时候
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    NSLog(@"定位失败-------%@",error.description);
}
复制代码

地理编码和反地理编码

使用CLGeocoder可以完成地理编码和反地理编码

  • 地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等) 地理编码的方法
-(void)geocodeAddressString:(NSString *)addressString completionHandler:
(CLGeocodeCompletionHandler)completionHandler;
复制代码
  • 反地理编码:根据给定的经纬度,获得具体的位置信息。 反地理编码的方法
-(void)reverseGeocodeLocation:(CLLocation *)location completionHandler:
(CLGeocodeCompletionHandler)completionHandler;
复制代码

地理编码

  1. 使用CLGeocoder类来创建一个实例对象
CLGeocoder *geo = [[CLGeocoder alloc]init];
复制代码
  1. 使用创建好的实例对象来调用地理编码的方法 CLPlacemark的字面意思是地标,它里面封装了具体的位置信息,我们可以根据需要取出我们需要的信息。
[geo geocodeAddressString:@"这里写地点名称" completionHandler:^(NSArray<CLPlacemark *> * _Nullable 
placemarks, NSError * _Nullable error) {
    CLPlacemark *newPlacemarks = placemarks.lastObject;
    NSLog(@"经度   %f, 纬度   %f",
newPlacemarks.location.coordinate.latitude,newPlacemarks.location.coordinate.longitude);
    NSLog(@"----+++++++++++++++++++++++%@",newPlacemarks.name);
}];
复制代码

反地理编码

  1. 使用CLGeocoder类来创建一个实例对象
CLGeocoder *geocoder = [[CLGeocoder alloc]init];
复制代码
  1. 使用创建好的实例对象来调用反地理编码的方法
[geocoder reverseGeocodeLocation:@"这里填写一个经纬度" completionHandler:
^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
            CLPlacemark *newPlacemark = placemarks.lastObject;
            NSLog(@"%@",newPlacemark.country);
            NSLog(@"%@",newPlacemark.addressDictionary);
            NSLog(@"%@",[newPlacemark.addressDictionary objectForKey:@"City"]);
            NSLog(@"%@",newPlacemark.name);
            NSLog(@"%@",newPlacemark.location);
        }];
复制代码

转载于:https://juejin.im/post/5c1a0df8e51d454ad55f067e

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 地图定位 定位 的相关文章

  • sxe客户端linux,Linux-kernel mailing list archive 2002-24,: [PATCH][swsusp] 2.4.19-pre10-ac2

    Florent Chabaud 8323584 1804289383 1024571187 61 19461 Content Type APPLICATION octet stream name 61 34 patch1 gz 34 Con
  • 打开Mac OSX原生的NTFS功能

    转载自 xff1a http www tianwaihome com 2014 07 mac osx ntfs html 打开Mac OSX原生的NTFS功能 很多同学都会为如何在Mac下写入NTFS格式的磁盘而感到困惑 xff0c 因为默
  • linux生成随机复杂密码,用Linux命令行生成随机密码的十种方法

    2011年的时候我写过一篇日志利用pwgen mkpasswd tr自动更改密码 xff0c 今天在51cto上翻译的与其相关的一篇国外文章 xff0c 名字就是本文的标题 当然方法上并不比我之前总结的高明 xff0c 这里也摘抄下具体实现
  • Linux的桌面环境gnome、kde、xfce、lxde 等等使用比较

    如果不是加入了图形界面 xff0c 微软的Windows系列操作系统不会成功地占领计算机桌面这块高地 这种人机交换的图形化界面 xff0c 使得界面更加直观 简易 而且更人性化 xff0c 同时也大大减少了使用者的认知负担 xff0c 普通
  • windows服务器不显示字体,Win10打开Word提示“Word无法显示所请求的字体”怎么办?...

    Win10打开Word提示 Word无法显示所请求的字体 怎么办 xff1f Word是我们最常使用的办公软件 xff0c 然而一位用户在Win10系统下打开Word时出错了 xff0c 系统提示 内存或磁盘空间不足 xff0c Word无
  • 在sublime text3中配置并使用LaTex

    准备工作 Sublime Text3 安装并配置好Package Control xff0c 若没有安装也没关系 xff0c 我已经把常用的插件都放到了我的GitHub xff0c 可以按照说明复制到指定路径即可 MiKTeX 下载并安装
  • Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

    前言 在我们在爬取手机APP上面的数据的时候 xff0c 都会借助Fidder来爬取 今天就教大家如何爬取手机APP上面的数据 环境配置 1 Fidder的安装和配置 下载Fidder软件地址 xff1a https www telerik
  • linux安装redis教程yum,linux下yum安装redis以及使用

    1 yum install redis 安装redis数据库 2 service redis start Redirecting to bin systemctl start redis service 开启redis服务 方式一 开启re
  • 存储过程:数据的插入和更新

    存储过程的功能非常强大 xff0c 在某种程度上甚至可以替代业务逻辑层 xff0c 接下来就一个小例子来说明 xff0c 用存储过程插入或更新语句 1 数据库表结构 所用数据库为Sql Server2008 2 创建存储过程 xff08 1
  • win10下VS2017配置GSL库

    GSL库 xff1a GNU Scientific Library 1 下载 xff1a 下载Complete package except sources和Sources两个exe文件 2 安装 xff1a 将两个exe安装 xff0c
  • 微信开放平台开发——网页微信扫码登录(OAuth2.0)

    1 OAuth2 0 OAuth xff08 开放授权 xff09 是一个开放标准 xff0c 允许用户让第三方应用访问该用户在某一网站上存储的私密的资源 xff08 如照片 xff0c 视频 xff0c 联系人列表 xff09 xff0c
  • 安全和取证Linux发行版Kali Linux 2018.4 发布

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 公告说 xff0c 欢迎来到2018年的第四个也是最后一个版本 xff0c Kali Linux 2018 4 xff0c 可以立即下载 这个版本将我们的内核升级到4 18
  • 使用Rust + Electron开发跨平台桌面应用 ( 二 )

    前言 在上一篇文章使用Rust 43 Electron开发跨平台桌面应用 一 中 xff0c 我们将Rust 43 Electron结合起来 xff0c 使用Rust编写核心业务逻辑 xff0c 并编译成node库提供给Electron的U
  • linux高级文件系统管理——btrfs

    前几天 xff0c 关于高级文件系统方面也给大家分享过RAID和LVM xff0c 今天给大家分享的这款文件系统可能比这两者更先进 xff0c 可以将其二者合二为一 第一 xff0c 它可以使用磁盘或者分区大小不一样的设备组建RAID xf
  • 字符串 - 字符串排序

    1 字符串排序 对于许多排序应用来说 xff0c 决定顺序的键都是字符串 给定一列字符串 xff0c 需要按一定顺序排列整齐方便后序处理 2 键索引计数法 这个方法名字有点拗口 xff0c 过程有点绕 xff0c 但是每一步其实很简单 举个
  • iOS-高德地图API的定位与搜索功能

    环境 xff1a Xcode10 1 Swift4 2 真机6s xff0c ios11 Demo xff1a https github com cxymq AmapSwift 高德地图API使用 需要 xff08 https lbs am
  • iOS 录音,播放并上传

    1 界面布局 xff0c 以及相关功能 点击中间开始录音 xff0c 点击左上角播放或暂停播放 xff0c 点击右上角移除文件 2 定义相关属性 import 34 SendVoiceController h 34 import impor
  • 【Python基础】request.post()方法

    00 序言 爬取懂che帝的车型信息时 xff0c 没太整明白request post 里面的参数是干什么用的 xff0c 所以写篇学习笔记提醒一下自己 url 61 39 https www dongchedi com motor bra
  • 老虎证券web端PWA实践总结

    历时两个月 xff0c PWA功能终于在web端稳定落地使用 xff0c 网站 web itiger com 从最新研究到落地上线 xff0c 遇到不少坑 xff1b 开发过程中也参考了不少资料 xff0c 但总有那么几个是没有答案 xff
  • 硬盘inode节点简单介绍

    一 inode是什么 xff1f 理解inode xff0c 要从文件储存说起 文件储存在硬盘上 xff0c 硬盘的最小存储单位叫做 34 扇区 34 xff08 Sector xff09 每个扇区储存512字节 xff08 相当于0 5K

随机推荐

  • NoMachine 远程桌面控制

    它是一个基于企业级对比套装的开源的终端服务器 它允许用户在连接速度缓慢或者窄带宽的情况下 xff0c 对X11会话进行远程访问 NX项目提供一整套的运行库文件以及优化的来自X11 xff0c SMB xff0c IPP xff0c HTTP
  • Angular之路--带你来搭建Webpack 2 + Angular 4项目

    上个月Angular发布了4 0 0版本 xff0c 少年们 xff0c 赶快学起来吧 xff0c 这篇文章带领大家搭建一个简单的Angular应用 xff0c 会尽量详细的把每个点都解释到 首先我选择了用webpack2来作为打包工具 x
  • C- unsigned :1之位域分析

    1 首先回忆结构体 我们都知道定义一个结构体可以这样的方式定义 struct Point float x float y point 等价于 struct Point point 除此之外 如果不想声明结构体 只想定义结构体的话 还可以这样
  • ShareSDK自定义UI的方法

    说明 xff1a 我们的分享菜单可以修改背景 xff0c 里面的图标以及文字 xff0c 颜色等 xff0c 另外可以自己自定义UI xff0c 用自己的方法写界面 xff0c 写好了之后可以调用我们以下无UI的分享方法 xff0c 另外我
  • HttpServletRequest & HttpServletResponse 中 Body 的获取

    为什么80 的码农都做不了架构师 xff1f gt gt gt 获取 HttpServletRequest 中的请求体 HttpServletRequest getInputStream 获取到请求的输入流 xff0c 从该输入流中可以读取
  • 图像学习之如何理解方向梯度直方图(Histogram Of Gradient)

    特征描述子 Feature Descriptor 特征描述子就是图像的表示 xff0c 抽取了有用的信息 xff0c 丢掉了不相关的信息 通常特征描述子会把一个w h 3 宽高3 xff0c 3个channel 的图像转换成一个长度为n的向
  • SQL查询语句练习题27道

    练习环境为 xff1a XP 43 SQL2000 数据库 练习使用的数据库为 xff1a 学生管理数据库 数据库下载地址为 http download csdn net download friendan 4648150 说明 这是我在学
  • 使用IDEA社区版如何创建SpringBoot项目?

    Spring Boot 就是 Spring 框架的脚 架 xff0c 它就是为了快速开发 Spring 框架 诞 的 首先谈谈SpringBoot的优点 xff1a 1 快速集成框架 xff0c Spring Boot 提供了启动添加依赖的
  • 从零转行数据分析的亲身经历

    作者 xff1a xiaoyu 微信公众号 xff1a Python数据科学 知乎 xff1a python数据分析师 快两周没更新了 xff0c 先跟大家说一下抱歉 最近生活上确实有点忙 xff0c 不过后续将恢复正常 今天和大家聊一个非
  • NodeBB搭建,维护,discuz!数据迁移

    为什么选择了NodeBB 无法回答 NodeBB官方Github NodeBB中文论坛 NodeBB官方文档 NodeBB中文文档 安装 此处的方式是Docker安装部署 https hub docker com r nodebb dock
  • _vimrc

    为什么80 的码农都做不了架构师 xff1f gt gt gt code 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
  • ubuntu编译qemu报错:‘ERROR: pixman >= 0.21.8 not present.’

    在ubuntu14 04中用源码方式编译安装qemu时 xff0c 执行 configure步骤提示错误 xff1a configure ERROR pixman gt 61 0 21 8 not present Your options
  • mysql my.conf 配置_Mysql my.conf配置说明

    MySQL配置文件my cnf 例子最详细翻译 可以保存做笔记用 BEGIN CONFIG INFO DESCR 4GB RAM 只使用InnoDB ACID 少量的连接 队列负载大 TYPE SYSTEM END CONFIG INFO
  • [译]使用 Rust 编写快速安全的原生 Node.js 模块

    原文地址 xff1a Writing fast and safe native Node js modules with Rust原文作者 xff1a Peter Czibik译文出自 xff1a 掘金翻译计划本文永久链接 xff1a gi
  • Discuz搭建论坛报错:advice_mysqli_connect

    环境说明 xff1a Ubuntu 12 04 3 四块硬盘RAID5 半个月前由于内部办公服务器由于RAID5两块盘出现问题 xff0c 导致部分数据丢失 xff0c 好在SVN数据是实时备份 xff0c 否则就真的哭了 xff0c 由于
  • c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...

    数据结构 C语言 课设1 单位员工通讯录管理系统 线性表应用 题目要求 xff1a 为某个单位建立一个员工通讯录管理系统 xff0c 可以方便查询每一个员工的手机号 及电子邮箱 其功能包括通讯录链表的建立 员工通讯信息的查询 修改 插入与删
  • OpenStack企业云平台监控实践

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 摘要 xff1a OpenStack企业云平台架构与实践 结合作者亲身经历的各类OpenStack的咨询 规划和实施经验 xff0c 从理论和工程角度 xff0c 讲述如何
  • python将时间戳转换为指定时区时间

    直接上代码 根据时区代码 xff08 如 xff1a America New York xff09 转换 在这里我们使用pytz span class token keyword import span pytz ts span class
  • .NET常见错误大全

    NET常见错误大全 1 检测到有潜在危险的 Request Form 值 原因 1 在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置 2 HTML里面写了两个 lt form gt 引起 解决
  • iOS 地图定位 定位

    定位 常用方法的介绍 CLLocationManager位置管理器 xff0c 我们的有关于位置的方法和属性都是通过它来管理设置的 43 BOOL locationServicesEnabled监测设备是否开启定位功能 void reque