Corelocation地理定位Map Kit地图展示

在移动互联网的时代,移动app能解决用户的很多生活琐事,比如
导航:去任意陌生的地方
周边找餐馆找酒店,找银行,找电影院在上述应用中都用到了地图定位功能,在ios开发中想要加入这2大功能必须基于2个框架开发
Map Kit 用于地图展示
Core Location用于地图展示
 
2个热门专业术语
LBS Location Based Service
Solomo Social Local Mobile
 
CoreLocation框架的使用
CoreLocation框架使用前提
 
导入主头文件
#import<CoreLocation/CoreLocation.h >
CoreLocation框架的使用须知
 
Corelocation框架中所有的数据类型的前缀都是CL
CoreLocation中使用CLLocationManager对象来做用户定位
CLLocationManager的常用操作
 
开始用户定位
-(void)startUpdationgLocation;
停止用户定位
-(void)stopUpdatingLocation;
当调用了startUpdatingLocation方法后,就开始不断定位用户的位置,中途会频繁的调用代理的下面方
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
 
locations参数里面装着CLLocation对象
CLLLocation用来表示某个位置的地理信息,比如经纬度,海拔等等
 
@Property(readonly, nonatomic)CLLocationCoordinate2D coordinate; 经纬度
@property(readonly, nonatomic)CLLocationDistance altitude; 海拔
@property(readonly, nonatomic)CLLocationDirection course;
路线,航向(取值范围是0.0~359.9,0.0表示真北方向)
@property(readonly, nonatomic)CLLocationSpeed speed; 行走速度
用-(CLLocationDistance)distanceFromLocation:(const CLLocation *)location
上面的方法可以计算2个位置之间的距离
@Property(assign, nonatomic)CLLocationDistance distanceFilter;每隔多少米定位一次
@property(assign, nonatomic)CLLocationAccuracydesireAccuracy; 定位精确度(越精确就越耗电)
 
CLLocationCoordinate2D是一个用来表示经纬度的结构体,定义如下
typedf struct {
 
CLLocationDegrees latitude;//纬度
CLLocationDegrees longitide;//经度
 
 }CLLocationCoodinate2D
一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D
如果是模拟器需要设置模拟位置(经纬度)
从iOS 6开始苹果在保护隐私方面做了很大的加强,一下操作都必须经过用户批准授权想获得用户的位置
党项防访问用的的隐私信息时,系统会弹出一个对话框让用户授权
 
开发者可以在Info.plist中设置NSLcationUsageDescription说明(Privacy -Location Usage Description)
一旦用户选择了Dot Allow以为着你的应用的定位功能无法使用
为了严谨起见,最好在使用定位功能之前判断当前的定位功能是否可用
CLLocationManager有个类方法可以判断当前应用的定位功能是否可用
+(BOOL)locationServicesEnable;
CLGeocoder
使用CLGeocoder可以完成地理编码和地理反编码
地理编码。根据给定的地名,获得具体的位置信息(比如经纬度地址的全称等)
反地址编码 根据给定的经纬度,获得具体的位置信息
地理编码方法
-(void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandle)completionHandler;
反地址编码方法
-(void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
 
 
当地理,反地理编码完成时,会调用CLGeocodeCompletionHandler typedef void(^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);
这个block传递2个参数
error 当编码出错时(比如编码不出具体的信息)有值
placemarks 里面装着CLPlacemark的对象
CLPacemark的字面意思是地标,封装详细的地址位置信息
@property(nonatomic, readonly)CLLocation *location; 地理位置
@property(nonatomic, readonly)CLRegion *region;区域
@property(nonatomic, readonly)NSDictionary *addressDictionary;详细的地址信息
@property(nonatomic, readonly)NSString *name;地址名称
@property(nonatomic, readonly)NSString *locality;城市
 
MapKit框架的使用
MapKit框架的使用前提
导入框架MapKit.framework
 
导入头文件<MapKit/MapKit.h>
MapKit框架使用须知
MapKit框架中所有的数据类型前缀都是MK
Mapkit有一个比较重要的UI控件:MKMapView,专门用于地图显示,跟踪显示用户的位置
设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置
MKUserTrackingModeNone不跟踪用户的位置
 
MKUserTrackingModeFollow跟踪并在读图上显示用户的当前位置
MKUserTrackingModeFollowWithHeading跟踪并在地图上显示用户当前的位置地图会随时跟随用户的前进方向进行旋转
可以通过设置MKMapView的mapViewType设置地图类型
 
 
 IOSBird  9小时前  iOS技术|   抢沙发 3 
文章评分 0 次,平均分 0.0 :     
 

在这里总结一下关于地图定位的知识。CoreLocaton,Map Kit。

在移动互联网时代,移动app能解决用户的很多生活琐事,比如

导航:去任意陌生的地方

周边:找餐馆、找酒店、找银行、找电影院

在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发

Map Kit :用于地图展示

Core Location :用于地理定位

2个热门专业术语

LBS :Location Based Service

SoLoMo :Social Local Mobile(索罗门)

CoreLocation框架的使用

CoreLocation框架使用前提

导入框架  CoreLocation

导入主头文件

#import <CoreLocation/CoreLocation.h>

CoreLocation框架使用须知

CoreLocation框架中所有数据类型的前缀都是CL

CoreLocation中使用CLLocationManager对象来做用户定位

CLLocationManager的常用操作

开始用户定位

- (void)startUpdatingLocation;

停止用户定位

- (void) stopUpdatingLocation;

当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法

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

locations参数里面装着CLLocation对象

CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等

@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;    经纬度

@property(readonly, nonatomic) CLLocationDistance altitude;   海拔

@property(readonly, nonatomic) CLLocationDirection course;

路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表真北方向)

@property(readonly, nonatomic) CLLocationSpeed speed;

行走速度(单位是m/s)

用- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

上面这个方法可以计算2个位置之间的距离

@property(assign, nonatomic) CLLocationDistance distanceFilter;

每隔多少米定位一次

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

定位精确度(越精确就越耗电)

CLLocationCoordinate2D是一个用来表示经纬度的结构体,定义如下

typedef struct {

CLLocationDegrees latitude; // 纬度

CLLocationDegrees longitude; // 经度

} CLLocationCoordinate2D;

一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D

如果是模拟器,需要设置模拟位置(经纬度)

从iOS 6开始,苹果在保护用户隐私方面做了很大的加强,以下操作都必须经过用户批准授权

要想获得用户的位置

想访问用户的通讯录、日历、相机、相册等等

当想访问用户的隐私信息时,系统会自动弹出一个对话框让用户授权

开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的(Privacy - Location Usage Description)

一旦用户选择了“Don’t Allow”,意味着你的应用以后就无法使用定位功能

为了严谨起见,最好在使用定位功能之前判断当前应用的定位功能是否可用

CLLocationManager有个类方法可以判断当前应用的定位功能是否可用

+ (BOOL)locationServicesEnable;

CLGeocoder

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

地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)

反地理编码:根据给定的经纬度,获得具体的位置信息

地理编码方法

- (void)geocodeAddressString:(NSString *)addressString completionHandler:

(CLGeocodeCompletionHandler)completionHandler;

反地理编码方法

- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:

(CLGeocodeCompletionHandler)completionHandler;

当地理\反地理编码完成时,就会调用CLGeocodeCompletionHandler

typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);

这个block传递2个参数

error :当编码出错时(比如编码不出具体的信息)有值

placemarks :里面装着CLPlacemark对象

CLPlacemark

CLPlacemark的字面意思是地标,封装详细的地址位置信息

@property (nonatomic, readonly) CLLocation *location;  地理位置

@property (nonatomic, readonly) CLRegion *region;  区域

@property (nonatomic, readonly) NSDictionary *addressDictionary;  详细的地址信息

@property (nonatomic, readonly) NSString *name;  地址名称

@property (nonatomic, readonly) NSString *locality;   城市

MapKit框架的使用

MapKit框架使用前提

导入框架  MapKit.framework

导入主头文件

#import <MapKit/MapKit.h>

MapKit框架使用须知

MapKit框架中所有数据类型的前缀都是MK

MapKit有一个比较重要的UI控件 :MKMapView,专门用于地图显示

跟踪显示用户的位置

设置MKMapView的userTrackingMode属性可以跟踪显示用户的当前位置

MKUserTrackingModeNone :不跟踪用户的位置

MKUserTrackingModeFollow :跟踪并在地图上显示用户的当前位置

MKUserTrackingModeFollowWithHeading :跟踪并在地图上显示用户的当前位置,地图会跟随用户的前进方向进行旋转

地图的类型

可以通过设置MKMapView的mapViewType设置地图类型

MKMapTypeStandard :普通地图

MKMapTypeSatellite :卫星云图

MKMapTypeHybrid :普通地图覆盖于卫星云图之上

MKMapView的代理

MKMapView可以设置一个代理对象,用来监听地图的相关行为

常见的代理方法有

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation;

调用非常频繁,不断监测用户的当前位置

每次调用,都会把用户的最新位置(userLocation参数)传进来

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;

地图的显示区域即将发生改变的时候调用

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

地图的显示区域已经发生改变的时候调用

MKUserLocation

MKUserLocation其实是个大头针模型,包括以下属性

@property (nonatomic, copy) NSString *title;

显示在大头针上的标题

@property (nonatomic, copy) NSString *subtitle;

显示在大头针上的子标题

@property (readonly, nonatomic) CLLocation *location;

地理位置信息

设置地图的显示

通过MKMapView的下列方法,可以设置地图显示的位置和区域

设置地图的中心点位置

@property (nonatomic) CLLocationCoordinate2D centerCoordinate;

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

设置地图的显示区域

@property (nonatomic) MKCoordinateRegion region;

- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

MKCoordinateRegion

MKCoordinateRegion是一个用来表示区域的结构体,定义如下

typedef struct {

CLLocationCoordinate2D center; // 区域的中心点位置

MKCoordinateSpan span; // 区域的跨度

} MKCoordinateRegion;

MKCoordinateSpan的定义

typedef struct {

CLLocationDegrees latitudeDelta; // 纬度跨度

CLLocationDegrees longitudeDelta; // 经度跨度

} MKCoordinateSpan;

大头针的基本操作

添加一个大头针

- (void)addAnnotation:(id <MKAnnotation>)annotation;

添加多个大头针

- (void)addAnnotations:(NSArray *)annotations;

移除一个大头针

- (void)removeAnnotation:(id <MKAnnotation>)annotation;

移除多个大头针

- (void)removeAnnotations:(NSArray *)annotations;

(id <MKAnnotation>)annotation参数是什么东西?

大头针模型对象:用来封装大头针的数据,比如大头针的位置、标题、子标题等数据

大头针模型

新建一个大头针模型类

#import <MapKit/MapKit.h>

@interface CustomAnnotation : NSObject <MKAnnotation>

/** 坐标位置 */

@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

/** 标题 */

@property (nonatomic, copy) NSString *title;

/** 子标题 */

@property (nonatomic, copy) NSString *subtitle;

Map小记的更多相关文章

  1. 【转】GO语言map类型interface{}转换踩坑小记

    原文:https://www.az1314.cn/art/69 ------------------------------------------ mapA := make([string]inte ...

  2. Map.getOrDefault被坑小记与optional

    错误使用样例 map.getOrDefault("account","").toString(); 在运行几小时后,发现报错空指针:查看源码如下: defaul ...

  3. effective java读书小记(一)创建和销毁对象

    序言 <effective java>可谓是java学习者心中的一本绝对不能不拜读的好书,她对于目标读者(有一点编程基础和开发经验)的人来说,由浅入深,言简意赅.每一章节都分为若干的条目, ...

  4. 小记Java时间工具类

    小记Java时间工具类 废话不多说,这里主要记录以下几个工具 两个时间只差(Data) 获取时间的格式 格式化时间 返回String 两个时间只差(String) 获取两个时间之间的日期.月份.年份 ...

  5. 临时处理小记:把Numpy的narray二进制文件转换成json文件

    临时处理一个Numpy的二进制文件,分析知道里面是dict类型,简单小记一下,如果Numpy和Python基础不熟悉可以看我之前写的文章 In [1]: %%time import numpy as ...

  6. AtCoder Grand Contest 1~10 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...

  7. logstash 学习小记

    logstash 学习小记 标签(空格分隔): 日志收集 Introduce Logstash is a tool for managing events and logs. You can use ...

  8. Java JPA小记

    什么是JPA JPA之于ORM(持久层框架,如MyBatis.Hibernate等)正如JDBC之于数据库驱动. JDBC是Java语言定义的一套标准,规范了客户端程序访问关系数据库(如MySQL.O ...

  9. select2插件使用小记2 - 多选联动 - 笔记

    这是select2插件使用的第二篇,可参考第一篇 select2插件使用小记.上一篇主要是关于基本的使用,这篇主要是关于多选,及联动的.侧重点不同. 效果图如下: 遵从W3C标准:结构.样式.行为.以 ...

随机推荐

  1. 利用onekeyup即可实现验证码的点击刷新功能

    显示验证码 首先在Home/Controller下创建一个公共控制器PublicController 1 <php2 namespace Home\Controller;3 4 use Thin ...

  2. Asp.Net:Repeater 详情 备用

    页面 repeator就想for循环一样,没有编辑模板,有删除delete和详情detail模板 <%@ Page Language="C#" AutoEventWireup ...

  3. 将url的查询参数解析成字典对象

    1, 这个题目不约而同的出现在了多家公司的面试题中,当然也是因为太过于典型,解决方案无非就是拆字符或者用正则匹配来解决,我个人强烈建议用正则匹配,因为url允许用户随意输入,如果用拆字符的方式,有任何 ...

  4. ci实现RBAC,详细解释原理和核心代码显示

    代码实现不复杂,主要是思路的理解 RBAC是基于权限控制 1.权限结点管理 2.角色管理 3.管理员权限分配 结点管理就是把所有的分组 控制器 方法全部写入一个结点管理表 请注意在写一个动作比如,展示 ...

  5. FZU 1018 枚举dp

    题意 给出一个数字组成的立方体 在其中选取一个体 使这个体中的数字之和最小 不可以不选 fzu的题目分类动态规划里面不是按难度排得 是按照题号..记得以前做题碰到过算 矩阵里面求子矩阵的最大和的 不会 ...

  6. PHP 设计模式 笔记与总结(8)策略模式

    ① 策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式就是策略模式. ② 实际应用举例,假如一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示 ...

  7. sqlserver log

    DBCC LOGINFODBCC log('QSSys', TYPE=2)goselect * from sys.fn_dblog(null,null)select [Dirty Pages],[Mi ...

  8. C#编程总结(四)多线程应用(进度条的编程问题)——转自http://www.cnblogs.com/yank/p/3232955.html

    多线程应用 多线程应用很广泛,简单总结了一下: 1)不阻断主线程,实现即时响应,由后台线程完成特定操作2)多个线程,完成同类任务,提高并发性能3)一个任务有多个独立的步骤,多个线程并发执行各子任务,提 ...

  9. IE 的resize事件问题

    window的resize事件,真的让人无语! 我在动态设置元素的HTML内容后,窗口高度变化了,可是却不触发resize事件. 但是我在访问document.documentElement.scro ...

  10. 关于网站的UV分析

    一:准备 1.统计的维度 guid tracktime provice 2.key与value的设定 key:date+provice_guid value:NullWritable 3.案例分析 表 ...