定位地图

2023-05-16

  1.在iOSApp开发中,尤其是O2O类型的的App往往包含着定位或地图这两项功能,所以说定位和地图是iOS开发中一种常用的第三方(iOS自带高德地图)。

  2.定位:首先我们先来说说定位:废话不多说,直接上干货。

    (1)首先我们先要知道定位需要什么:

    静态包:

    

    导入#import <CoreLocation/CoreLocation.h>

    (2)代码


//宏定义
#define IS_IOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)   

//声明
@property(nonatomic, strong) CLLocationManager *locationManager;  

- (void)viewDidLoad {
       //定位
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.delegate = self;
        if (IS_IOS8)
        {
            [_locationManager requestAlwaysAuthorization];
            [_locationManager requestWhenInUseAuthorization];
        }
        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        _locationManager.distanceFilter = kCLLocationAccuracyBest;
        [_locationManager startUpdatingLocation];
}  
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    [_locationManager stopUpdatingLocation];
     CLLocation *location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
    self.geocoder = [[CLGeocoder alloc] init];
   [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
       if (error||placemarks.count==0) {
           [self zhHUD_showErrorWithStatus:@"你输入的地址没找到"];
       }
       else{
           //编码成功
           //显示最前面的地标信息
           CLPlacemark *firstPlacemark=[placemarks firstObject];
           //经纬度
//           CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
//           CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
           //地理位置名
           NSLog(@"name,%@",firstPlacemark.name);                       // 位置名
           NSLog(@"thoroughfare,%@",firstPlacemark.thoroughfare);       // 街道
           NSLog(@"subThoroughfare,%@",firstPlacemark.subThoroughfare); // 子街道
           NSLog(@"locality,%@",firstPlacemark.locality);               // 市
           NSLog(@"subLocality,%@",firstPlacemark.subLocality);         // 区
           NSLog(@"country,%@",firstPlacemark.country);                 // 国家
           NSLog(@"country,%@",firstPlacemark.administrativeArea);      // 省份
           _province =firstPlacemark.administrativeArea;
           _city =firstPlacemark.locality;
           //数据
           self.payBtn.enabled = YES;
           [self requestData];
       }
   }];
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    [self zhHUD_showErrorWithStatus:@"请打开你的gps"];
    self.payBtn.enabled = NO;
}

   (3)以上代码写完后,意味着定位代码已完成,但是你运行后就会发现,定位代理不会调用。我擦,坑了!好的,我们这时候需要配置plist文件

  (4)运行代码,定位成功(必须真机)

  3.当然你如果想将定位学习透彻,你需要了解他的所有代理和属性:介绍如下()

CLLocationManager相关方法解读:

+ (BOOL)locationServicesEnabled;

判断设备是否支持定位服务

+ (BOOL)headingAvailable;

判断设备是否支持航向信息功能(海拔,速度,方向等传感器的支持)

+ (BOOL)significantLocationChangeMonitoringAvailable;

判断设备是否支持更新位置信息

+ (BOOL)isMonitoringAvailableForClass:(Class)regionClass;

判断设备是否支持区域检测,regionClass是地图框架中的类。

+ (BOOL)isRangingAvailabl;

判断设备是否支持蓝牙测距

+ (CLAuthorizationStatus)authorizationStatus;

获得定位服务的授权状态,CLAuthorizationStatus的枚举如下:

?
1
2
3
4
5
6
7
typedef  NS_ENUM( int , CLAuthorizationStatus) {
     kCLAuthorizationStatusNotDetermined = 0, //用户还没有做选择
     kCLAuthorizationStatusRestricted, //应用拒接使用定位服务
     kCLAuthorizationStatusDenied, //用户拒绝授权
     kCLAuthorizationStatusAuthorizedAlways, //8.0后可用,始终授权位置服务
     kCLAuthorizationStatusAuthorizedWhenInUse, //8.0后可用,只在前台授权位置服务
};

@property(assign, nonatomic) CLActivityType activityType;

这个属性用来设置位置更新的模式,枚举如下:

?
1
2
3
4
5
6
typedef  NS_ENUM(NSInteger, CLActivityType) {
     CLActivityTypeOther = 1, //未知模式,默认为此
     CLActivityTypeAutomotiveNavigation,     //车辆导航模式
     CLActivityTypeFitness,                 //行人模式
     CLActivityTypeOtherNavigation          //其他交通工具模式
};

模式的应用可以起到节省电量的作用,例如车辆导航模式,当汽车停止时,位置更新服务会暂停。

@property(assign, nonatomic) CLLocationDistance distanceFilter;

设置位置更新的敏感范围,单位为米。

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

设置定位服务的精确度,系统定义好的几个参数如下:

kCLLocationAccuracyBestForNavigation;//导航最高精确
kCLLocationAccuracyBest;//高精确
kCLLocationAccuracyNearestTenMeters;//10米
kCLLocationAccuracyHundredMeters;//百米
kCLLocationAccuracyKilometer;//千米
kCLLocationAccuracyThreeKilometers;//三公里

@property(assign, nonatomic) BOOL pausesLocationUpdatesAutomatically;

设置位置更新是否自动暂停

@property(readonly, nonatomic, copy) CLLocation *location;

最后一次更新的位置信息,只读属性

@property(assign, nonatomic) CLLocationDegrees headingFilter;

相关航向更新的敏感范围

@property(assign, nonatomic) CLDeviceOrientation headingOrientation;

typedef NS_ENUM(int, CLDeviceOrientation) {

CLDeviceOrientationUnknown = 0,随机

CLDeviceOrientationPortrait,纵向

CLDeviceOrientationPortraitUpsideDown,纵向倒置

CLDeviceOrientationLandscapeLeft,左向横向

CLDeviceOrientationLandscapeRight,右向横向

CLDeviceOrientationFaceUp,水平屏幕向上

CLDeviceOrientationFaceDown水平屏幕

};

定位航向时的参照方向默认为正北,枚举如下:

@property(readonly, nonatomic, copy) CLHeading *heading;

最后一个定位得到的航向信息

- (void)startUpdatingLocation;

开启定位服务

- (void)stopUpdatingLocation;

停止定位服务

- (void)startUpdatingHeading;

开启航向地理信息服务

- (void)stopUpdatingHeading;

停止航向地理信息服务

三、定位服务代理的相关方法

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;

位置更新后调用的方法,数组中是所有定位到的位置信息,最后一个是最新的。

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading;

航向信息更新后调用的方法

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;

定位异常时调用的方法

四、定位服务获取到的位置对象

上面也提到,定位后返回的数组中存放的都是CLLocation对象,这里面有很详细的位置信息,属性如下:

@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

经纬度属性,CLLocationCoordinate2D是一个结构体,如下:

typedef struct {

CLLocationDegrees latitude;

CLLocationDegrees longitude;

} CLLocationCoordinate2D;

@property(readonly, nonatomic) CLLocationDistance altitude;

海拔高度,浮点型

@property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy;

水平方向的容错半径

@property(readonly, nonatomic) CLLocationAccuracy verticalAccuracy;

竖直方向的容错半径

@property(readonly, nonatomic) CLLocationDirection course;

设备前进的方向,取值范围为0-359.9,相对正北方向

@property(readonly, nonatomic) CLLocationSpeed speed;

速度,单位为m/s

@property(readonly, nonatomic, copy) NSDate *timestamp;

定位时的时间戳

五、航标定位得到的航标信息对象

CLHeading对象的属性信息:

@property(readonly, nonatomic) CLLocationDirection magneticHeading;

设备朝向航标方向,0为北磁极。

@property(readonly, nonatomic) CLLocationDirection trueHeading;

设备朝向真实方向,0被地理上的北极

@property(readonly, nonatomic) CLLocationDirection headingAccuracy;

方向偏差

@property(readonly, nonatomic) CLHeadingComponentValue x;

x轴的方向值

@property(readonly, nonatomic) CLHeadingComponentValue y;

y轴方向值

@property(readonly, nonatomic) CLHeadingComponentValue z;

z轴方向值

@property(readonly, nonatomic, copy) NSDate *timestamp;

方向定位时间戳

 

    

转载于:https://www.cnblogs.com/YU411524/p/5228146.html

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

定位地图 的相关文章

  • 关于485通信不稳定问题解决方案[STM32产品问题]

    485通讯不稳定的问题 xff08 具体表现为有时能通讯上 xff0c 有时通讯不上 xff09 RS485在连接设备过多 通讯距离过长 双绞线质量差 xff0c 接线不规范 等 xff0c 都会导致通讯不稳定的问题 解决方案 xff1a
  • Oracle update语句更新值来自另一张表中的数据

    task 任务表 role 角色表 两表之间必须有关联的字段 update task t set t roleName 61 select r name from role r where r id 61 t roleid 转载于 http
  • HTML个人简介

    lt doctype html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta name 61 34 Generator
  • 如何查看windows某个目录下所有文件/文件夹的大小?

    如何查看windows某个目录下所有文件 文件夹的大小 xff1f TreeSize Free绿色汉化版是一款硬盘空间管理工具 xff0c 用树形描述出来 xff0c 能够显示文件大小和实际占用空间数及浪费的空间等信息 xff0c 让你做出
  • Kafka服务不可用(宕机)问题踩坑记

    背景 某线上日志收集服务报警 xff0c 打开域名报502错误码 收集服务由2台netty HA服务器组成 netty服务器将客户端投递来的protobuf日志解析并发送到kafka xff0c 打开其中一个应用的日志 xff0c 发现如下
  • Sublime Text 的破解方式

    Sublime Text 破解 xff08 Mac和Windows系统 xff09 Posted on 2013 年 11 月 19 日 3 条评论 6 031 次浏览 继 续分享在 Mac OSX 和 Windows 下破解编码神器 xf
  • 洛谷P1233 木棍加工【单调栈】

    题目 xff1a https www luogu org problemnew show P1233 题意 xff1a 有n根木棍 xff0c 每根木棍有长度和宽度 现在要求按某种顺序加工木棍 xff0c 如果前一根木棍的长度和宽度都大于现
  • 高并发核心知识——ZooKeeper

    ZooKeeper 简介 ZooKeeper是一个开源的分布式协调服务 xff0c 重视高性能 高可用 严格有序的访问 Zookeeper中利用被称为znode的节点保存数据 xff0c 数据将保存在内存 ram 中 xff0c 最多存储1
  • https://gns3.com/community/discussion/gns3-doesn-t-work-on-vmware-play

    swered Question GNS3 doesn t work on VMWARE player 15 Hi guys today I try to install GNS3 on new VMWARE player 15 with V
  • 时间同步服务

    1 NTP时钟同步方式说明 NTP在linux下有两种时钟同步方式 xff0c 分别为直接同步和平滑同步 xff1a 直接同步 使用ntpdate命令进行同步 xff0c 直接进行时间变更 如果服务器上存在一个12点运行的任务 xff0c
  • The Windows 10 May 2020 Update无法更新问题,从1909升级到2004

    今天系统在更新的时候遇到系统提示如下信息 The Windows 10 May 2020 Update is on its way We re offering this update to compatible devices but y
  • 遇到Visual Studio "当前不会命中断点.还没有为该文档加载任何符号"的情况

    一 问题及原因 有这样一种调用逻辑 A exe调用B dll 现在想要在B的源代码中打断点 从A发起进行调试 却给出了 34 当前不会命中断点 还没有为该文档加载任何符号 34 的提示 感觉十分奇怪 各种重新生成 重启VS都没啥用 最后不得
  • Centos 7 Ntop 流量分析 安装

    Centos 6 安装 Ntop xff1a https www cnblogs com weijie0717 p 4886314 html 一 安装 1 添加EPEL 仓库 yum install epel release 2 创建 Nt
  • 三节点搭建openstack-Mitaka版本

    前言 xff1a 现在的云计算平台已经非常火 xff0c 也非常的稳定了 像阿里云平台 xff0c 百度云平台等等 xff0c 今天咱们基于openstack来搭建一个云平台 注意 xff1a 本次平台搭建为三节点搭建 xff08 没有外部
  • POJ滑动窗口

    题目描述 现在有一堆数字共N个数字 xff08 N lt 61 10 6 xff09 xff0c 以及一个大小为k的窗口 现在这个从左边开始向右滑动 xff0c 每次滑动一个单位 xff0c 求出每次滑动后窗口中的最大值和最小值 例如 xf
  • JsonSQL:用SQL语句解析JSON文件

    下午没事干 xff0c 到处闲逛发现一个好玩的东东 xff0c 发出来与大家共享 xff0c 哈哈 一个解析JSON的插件 xff0c 用SQL语法 xff0c 当然只能用简单的条件查询咯 xff0c 不过这个用起比较简单 xff0c 容易
  • windows系统cmd命令行设置、查看、更改环境变量

    问题场景 xff1a 在windows系统 xff0c 做flask项目需要配置qq邮箱的用户 密码 xff0c 为了安全性账户密码需要从OA机的环境变量中设置 获取 xff1a code import os app config 39 M
  • Python之路【第二十五篇】:数据库之pymysql模块

    数据库进阶 一 pymysql模块 pymysql是Python中操作Mysql的模块 xff0c 其使用的方法和py2的MySQLdb几乎相同 二 pymysql模块安装 pip install pymysql 三 执行sql语句 cod
  • centos7 linux中搭建MFS分布式文件系统

    MFS分布式文件系统 mooseFS xff08 moose 驼鹿 xff09 是一款网络分布式文件系统 它把数据分散在多台服务器上 xff0c 但对于用户来讲 xff0c 看到的只是一个源 MFS也像其他类unix文件系统一样 xff0c
  • MAC_BOOKPRO苹果电脑系统常用快捷键大全

    Mac 键盘快捷键 我在品多多上拼的Mac终于到货了 xff0c 安全下车 xff0c 接下来要熟练使用了 xff01 您可以按下某些组合键来实现通常需要鼠标 触控板或其他输入设备才能完成的操作 要使用键盘快捷键 xff0c 请按住一个或多

随机推荐

  • 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案

    场景 小程序页面有一个web view组件 xff0c 组件嵌套的H5页面 xff0c 要唤起微信支付 先讲一下我的项目 xff0c 首先我是自己开发的一个H5触屏版的商城系统 xff0c 里面含有购物车 xff0c 订单支付等功能 然后刚
  • Linux-常用命令

    基本命令 查看文件 span class token function ls span span class token comment 列出当前目录文件和文件夹名称 span F span class token comment 输出可以
  • 酒店管理系统(功能结构图、E-R图、用例图)

    功能结构图 用例图 状态图 流程图 数据字典 er图 转载于 https www cnblogs com wang jee p 10828875 html
  • C语言表达分段函数

    void main int x y scanf 34 d 34 amp x if x lt 61 1 y 61 x else if x gt 1 amp amp x lt 10 y 61 2 x 1 else if x gt 61 10 y
  • 拼音转汉字

    description Pinyin to get chinese pinyin from chinese license MIT style authors Bill Lue requires core 1 2 1 39 39 provi
  • windows下C++连接mysql

    平台 xff1a windows c c 43 43 编译器 xff1a vs2017 项目设置 xff1a 项目属性页 xff1a 1 C C 43 43 gt 常规 gt 附加包含目录 gt C Program Files x86 My
  • 制表符概念的理解(c语言角度)

    百度百科给出的答案 xff1a 制表符 xff08 也叫制表位 的功能是在不使用表格的情况下在垂直方向按列对齐文本 比较常见的应用包括名单 简单列表等 也可以应用于制作页眉页脚等同一行有几个对齐位置的行 至于制表符这一概念的由来 xff0c
  • iOS中实现多线程的技术方案

    pthread 实现多线程操作 代码实现 xff1a void run void param for NSInteger i 61 0 i lt 1000 i 43 43 NSLog 64 34 buttonclick zd 64 34 i
  • linux inode 详解 / 线上inode爆满解决方案

    linux inode 详解 线上inode爆满解决方案 本文大量参考阮一峰大神博客 xff0c 整理笔记 之所以写inode文章是由于一次线上问题 xff0c 引发对inode深入的思考 磁盘的inode监控与磁盘空间的监控同等重要 xf
  • vscode调整字体大小

    在vscode中 xff0c 通过setting gt User gt Text Editor gt Font可以调整字体大小 xff0c 但是这里只是调整右侧的代码编辑区域的字体 xff0c 左侧的侧边栏确无法调整字体大小 xff0c 找
  • MyBatis分页插件PageHelper自定义分页逻辑实现

    因为PageHelper对于MySQL的分页逻辑采用的是SQL后面追加limit子句的方式 xff0c 这样在小数据量情况下是没有问题的 但是对于大数据量的时候 xff0c 比如limit 100000 10 xff0c MySQL的运作机
  • 使用estimatedRowHeight的优缺点

    使用estimatedRowHeight的优缺点 1 优点 1 gt 可以降低tableView heightForRowAtIndexPath 方法的调用频率 2 gt 将 计算cell高度的操作 延迟执行了 xff08 相当于cell高
  • 用红蓝3D眼镜在PC上观看3D影片效果并不好

    如题 xff0c 最近试了一下买了副红蓝分色3D眼镜 结果戴上以后放3D蓝光盘只有在画面的静态部分才能正确融像 xff0c 画面上的物体一动起来马上两个像就不能正确融合 xff0c 而是红色部分和蓝色部分直接混在一起闪来闪去 网上找了一圈
  • python----面向对象

    一 面向过程和面向对象优缺点 面向过程 xff1a 优点 xff1a 极大的降低了写程序的复杂度 xff0c 只需要顺着要执行的步骤 xff0c 堆叠代码即可 缺点 xff1a 一套流水线或者流程就是用来解决一个问题 xff0c 代码牵一发
  • Sublime Text Build 3176 安装图文详细教程

    1 著作权声明 1 1 本图文详细教程为 推优创意 原创教程 xff0c 推优创意 拥有著作权 xff0c 未经本人许可 xff0c 谢绝任何形式的全部或部分转载 xff01 违者必究 xff01 1 2 所有文章在 微信公众号 64 推优
  • iOS开发——纯代码界面(UITableViewController)

    创建UITableViewController xff08 表视图控制器 xff09 创建一个类TableViewController继承UITableViewController 1 AppDelegate m中代码如下 xff08 记得
  • iOS-CoreData详解与使用

    上面已经说完了SQLite和FMDB以及两者的区别 xff0c 本篇将讲述iOS中另一个存储方式 xff0c CoreData的使用 通读下来大约10分钟 xff0c 后续还会根据项目中问题 xff0c 不断更新 一 预备知识 在了解Cor
  • Verilog中变量位宽注意

    Verilog中 xff0c 变量定义方式可以为 xff1a reg 位宽 1 0 数据名 xff1b reg 位宽 1 数据名 其他变量也类似 以reg变量cnt为例 xff0c 当cnt位宽为4时 xff0c 可定义为reg 3 0 c
  • 使用PaintCode便捷地实现动画效果

    ViewController m paintCodeTestOC Created by LongMa on 2019 7 25 import 34 ViewController h 34 64 interface ViewControlle
  • 定位地图

    1 在iOSApp开发中 xff0c 尤其是O2O类型的的App往往包含着定位或地图这两项功能 xff0c 所以说定位和地图是iOS开发中一种常用的第三方 xff08 iOS自带高德地图 xff09 2 定位 xff1a 首先我们先来说说定