zoukankan      html  css  js  c++  java
  • Map小记

    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设置地图类型
     
     
       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;

  • 相关阅读:
    《你说对就队》第四次作业:项目需求调研与分析
    《你说对就对队》第三次作业:团队项目的原型设计
    《你说对就队》第二次作业:团队项目选题报告
    《你说对就队》第一次作业 团队亮相
    实验十一 团队作业7:团队项目设计完善&编码1
    《你们都是魔鬼吗 团队》 第六次作业 团队项目系统设计改进与详细设计
    团队项目改进
    《你们都是魔鬼吗团队》第四次作业:项目需求调研与分析
    《你们都是魔鬼吗团队》第三次作业:团队项目的原型设计
    <你们都是魔鬼吗>第二次团队作业:团队项目选题
  • 原文地址:https://www.cnblogs.com/Ganggang888/p/5253584.html
Copyright © 2011-2022 走看看