地图sdk详解

219 阅读4分钟

1  获取用户位置

需要导入CoreLocation框架

使用定位服务前,通常需要检查定位服务是否可用 :

[CLLocationManager locationServicesEnabled]

ios7 的时候,在调用定位服务时,会自动申请用户的授权

ios8 之后,在调用定位服务时,app必须主动去申请用户的授权

需要在info.plist 文件中声明相关的key

CLLocationManager: //主要处理位置和方向相关的事件

- requestWhenInUseAuthorization// 仅仅是前台可以获取位置

- requestAlwaysAuthoriz    // 在前台与后台均可获取位置

代理方法: -locationManager: didChangeAuthorizationStatus

CLAuthorizationStatus    授权状态

kCLAuthorizationStatusNotDetermined    //用户尚未决定授权权限

kCLAuthorizationStatusRestricted    //无法使用定位服务,该状态用户无法改变

kCLAuthorizationStatusDenied    //用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态

kCLAuthorizationStatusAuthorized    //已经授权(废弃)

kCLAuthorizationStatusAuthorizedAlways  //用户允许该程序无论何时都可以使用地理信息

kCLAuthorizationStatusAuthorizedWhenInUse  //用户同意程序在可见时使用地理位置

2计算用户位移,时间,平均速度

解决方法:

1.确定模拟器(手机)已经联网并且允许程序获取地理位置

2.重置地理位置服务或者网络服务

/*-------- 计算用户位移, 时间, 平均速度 --------*/

CLLocationManager      //主要处理位置和方向相关的事件

distanceFilter  // 距离过滤值, 设备移动达到该值后才会触发代理方法

desiredAccuracy      // 定位的精确度

activityType    // 定位数据用途

- startUpdateLocation  // 开始定位

- stopUpdateLocation    // 停止定位

// CLLocationAccuracy      定位精确度

kCLLocationAccuracyBestForNavigation    //导航级最佳精准

kCLLocationAccuracyBest    //最佳精准

kCLLocationAccuracyNearestTenMeters    //10米误差

kCLLocationAccuracyHundredMeters    //百米胡茬

kCLLocationAccuracyKilometer    //千米误差

kCLLocationAccuracyThreeKilometers  //3千米误差

// CLActivityType      定位数据用途

CLActivityTypeOther    //作为普通用途

CLActivityTypeAutomotiv eNavigation    //作为车辆导航

CLActivityTypeFitness    //作为步行导航

CLActivityTypeOtherNavigation  //作为其它导航

CLLocation      //表示位置相关的信息, 如果经度/纬度/高度/速度/路线等

coordinate  //表示该位置的坐标

timestamp  // 定位信息返回的时间

speed  // 设备移动速度 单位是米/秒

- distanceFromLocation  // 计算两个点之间的距离


3 获取设备方向,制作指南针

CLHeading      // 表示设备方向相关的信息

magneticHeading    //设备与磁北的相对角度

trueHeading    //设置与真北的相对角度, 必须和定位一起使用, iOS需要位置来计算真北

弧度 = 角度 / 180 * M_PI

4 判断设备在指定的区域内

CLCircularRegion //表示圆形区域的范围

center  // 圆形范围的圆心

radius// 

5 地理编码和反地理编码

地理编码: 根据用户描述获取地标信息  NSString -> CLPlacemark

反地理编码: 根据位置获取对应的描述信息 CLLocation -> CLPlacemar

CLGeocoder: // 地理编码

- geocodeAddressString: completionHandler:      // 地理编码

- reverseGeocodeLocation: completionHandler:    // 反地理编码

6 Mapkit 基本使用

CLPlacemark    //表示地理位置信息, 包括坐标, 区域, 名称, 街道等

name        // 该地标的名称

location    // 地标的位置信息

addressDictionary  // 保存地址信息的字典

7  添加大头针

MapView    // 用于展示地图的视图

mapType    // 地图类型

userTrackingMode    // 追踪模式

//MKMapType    地图类型

MKMapTypeStandard      // 标准

MKMapTypeSatellite      // 卫星地图

MKMapTypeHybrid      // 混合地图 (卫星地图 + 标准)

//MKUserTrackingMode    追踪模式

MKUserTrackingModeNone      //不追踪

MKUserTrackingModeFollow        // 追踪用户位置

MKUserTrackingModeFollowWithHeading, // 追踪用户位置与方向

// 地图的手势支持开关:

zoomEnabled    // 放大缩小

scrollEnabled      // 拖动

rotateEnabled    // 旋转


/*-------- 添加大头针 --------*/

MKAnnotation协议(自定义大头针数据模型时需要遵守该协议)

注意在iOS9中通过代码创建的MapView上添加大头针无效


/**********************自定大头针********************/

MKPinAnnotationView    //原生大头针视图

pinColor    大头针颜色选择(MKPinAnnotationColor)

MKPinAnnotationColor    自定义大头针颜色, iOS9新增属性

canShowCallout      允许大头针点击弹出视图

leftCalloutAccessoryView    弹出视图的左边辅助视图

rightCalloutAccessoryView  弹出视图的右边辅助视图

detailCalloutAccessoryView  自定义弹出详情视图, iOS9新增属性