地圖sdk詳解

檀志文發表於2017-12-14

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新增屬性

相關文章