現在手機軟件基本上都需要定位,比如打個的,附近的人,附近的餐廳等等,這些應用都需要定位和地圖服務。
我這個人分不清東西南北,很容易轉蒙圈了,在梳理IOS知識之前,我先總結一下經緯度的知識,我記不住一樣長的是經度還是緯度,所以我通過谷歌老師了解到,很好記憶,因為我們一般都會說東經西經,所以經線是和赤道平行的線,肯定也包括赤道線,而從南極到北極的連線叫緯線,希望我不會再忘記了。
在IOS裡面針對定位服務,實現定位功能步驟如下
1.創建一個位置管理器:CLLocationManager類 對象locationManager
設置代理locationManager.delegate = self
2.判斷是否啟用定位服務:locationServicesEnabled ->Bool
3.設置精度:locationManager.desireAccuarcy = kCLLocationAccuracyBest
屬性:desiredAccuracy 用於定位精度
kCLLocationAccuracyBestForNavigation 最高精度,用於導航程序
kCLLocationAccuracyBest 最精確
kCLLocationAccuracyNearestTenMeters 十米誤差范圍
kCLLocationAccuracyHundredMeters 百米誤差范圍
kCLLocationAccuracyKilometer 千米誤差范圍
kCLLocationAccuracyThreeKilometers 三千米誤差范圍
4.設置距離篩選器:locationManager.distanceFilter = 50 當你移動一段位移後,所以移動距離大於篩選器說設置50m時候,通知委托更新位置;但是位置一段更新過於頻繁就會消耗電池電量,我們可以返回它的默認的沒有篩選器模式,使用常量kCLDistanceFilterNone;
locationManager.distanceFilterkCLDistanceFilterNone
5.設置什麼啟動(ios版本8.0.0以上的需要設置)
locationManager.requestWhenInUseAuthorization()//當App進入前台時候開啟定位
locationManager.requestAlwaysAuthorization()//始終開啟
6. 然後就是啟動 位置管理器進行定位locationManager.startUpdatingLocation;
如果我們不需要繼續輪詢更新位置可以使用locationManager.stopUpdatingLocation;
停止更新,否則應用程序打開會一直更新,這些都需要添加委托的,遵循 CLLocationManagerDelegate協議
7.顯示實況地圖
經緯度MKCoordinateSpan 和 范圍 MKCoordinateRegion
struct MKCoordinateSpan{
CLLocationDegrees latitudeDelta; //double類型
CLLocationDegrees longitudeDlta;
}
struct MKCoordinateRegion{
CLLocationCoordinate2Dcenter;//表示顯示的中心
MKCoordinateSpanspan;//表示比例
}
方向導航
startUpdatingHeading 開始方向導航
stopUpdatingHeading 停止方向導航
需要注意的是
1.定位的頻率和精度不是越精度越好,因為耗能費電的原因
2.定位成功後會返回數組,每個元素代表一個CLLocation位置信息
3.除了提供定位功能 CLLocationManager還可以調用startMonitoringForRegion:方法對指定區域進行監控
地理編碼
由於上面的只能讀取經度和緯度,不能獲取具體的城市位置等等,需要進行逆地理編碼和地理編碼
CLGeocoder 主要兩個方法 定位的結果是一個CLPlacemark
geocodeAddressString(addressString:String!,completionHandler:CLGeocodeCompletionHandler!)
geocodeAddressString(addressString:String!, inRegion region:CLRegion!, completionHandler:CLGeocodeCompletionHandler!)
逆地理編碼
reverseGeocodeLocation(location:CLLocation!, completionHandler:CLGeocodeCompletionHandler!)
地圖 MapKit
IOS 地圖開發有兩種方式:1.使用MapKit框架 2.直接調用蘋果官方自帶的地圖應用,無法進行精確的控制。 重點是MapKit
MapKit框架提供MKMapView控件
屬性
mapType
MKMapTypeStandard :標准地圖,一般情況下使用此地圖即可滿足;
MKMapTypeSatellite :衛星地圖;
MKMapTypeHybrid :混合地圖,加載最慢比較消耗資源;
userLocation 用戶位置
annotations 當前地圖所有大頭針,只讀屬性
方法
addAnnotations 添加大頭針
removeAnnotations 刪除大頭針
setRegion 設置顯示區域
dequeueReusableAnnotationViewWithIdentifier 從緩存池中取大頭針(類似Cell)
代理方法
didSelectAnnotationView 點擊選中某個大頭針觸發
var point:MKPointAnnotation=MKPointAnnotation()
注意:
a.這個代理方法的調用時機:每當有大頭針顯示到系統可視界面中時就會調用此方法返回一個大頭針視圖放到界面中,同時當前系統位置標注(也就是地圖中藍色的位置點)也是一個大頭針,也會調用此方法,因此處理大頭針視圖時需要區別對待。
b.類似於UITableView的代理方法,此方法調用頻繁,開發過程中需要重復利用MapKit的緩存池將大頭針視圖緩存起來重復利用。
c.自定義大頭針默認情況下不允許交互,如果交互需要設置canShowCallout=true
d.如果代理方法返回nil則會使用默認大頭針視圖,需要根據情況設置。
參考互聯網資源整理。