一、簡(jiǎn)介
- 在移動(dòng)互聯(lián)網(wǎng)時(shí)代,移動(dòng)app能解決用戶的很多生活瑣事喉酌,比如導(dǎo)航:去任意陌生的地方周邊:找餐館、找酒店赐俗、找銀行、找電影院
在上述應(yīng)用中弊知,都用到了地圖和定位功能阻逮,在iOS開發(fā)中,要想加入這2大功能秩彤,必須基于2個(gè)框架進(jìn)行開發(fā)
Map Kit :用于地圖展示Core Location :用于地理定位
2個(gè)熱門專業(yè)術(shù)語(yǔ)LBS :Location Based ServiceSoLoMo :Social Local Mobile(索羅門)
二叔扼、CoreLocation框架的使用
CoreLocation框架使用前提
1.先導(dǎo)入框架:
2.導(dǎo)入主頭文件:
#import <CoreLocation/CoreLocation.h>
CoreLocation框架使用須知
1事哭、CoreLocation框架中所有數(shù)據(jù)類型的前綴都是CL
2、CoreLocation中使用CLLocationManager對(duì)象來(lái)做用戶定位
注意:用Xcode開發(fā)瓜富,模擬器沒(méi)有位置鳍咱,這里可以在調(diào)試中設(shè)置一個(gè)模擬位置:
三、CLLocationManager
CLLocationManager的常用操作
1.開始用戶定位
- (void)startUpdatingLocation;
2.停止用戶定位
- (void) stopUpdatingLocation;
3.當(dāng)調(diào)用了startUpdatingLocation方法后与柑,就開始不斷地定位用戶的位置谤辜,中途會(huì)頻繁地調(diào)用代理的下面方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
locations參數(shù)里面裝著CLLocation對(duì)象
四、CLLoaction
CLLocation用來(lái)表示某個(gè)位置的地理信息价捧,比如經(jīng)緯度丑念、海拔等等
1、經(jīng)緯度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
2.海拔
@property(readonly, nonatomic) CLLocationDistance altitude;
3.路線结蟋,航向(取值范圍是0.0° ~ 359.9°脯倚,0.0°代表真北方向)
@property(readonly, nonatomic) CLLocationDirection course;
4.行走速度(單位是m/s)
@property(readonly, nonatomic) CLLocationSpeed speed;
5.計(jì)算2個(gè)位置之間的距離
-(CLLocationDistance)distanceFromLocation:(const CLLocation *)location
CLLocationManager
6.每隔多少米定位一次
@property(assign, nonatomic) CLLocationDistance distanceFilter;
7.定位精確度(越精確就越耗電)
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
CLLocationCoordinate2D
CLLocationCoordinate2D是一個(gè)用來(lái)表示經(jīng)緯度的結(jié)構(gòu)體,定義如下:
typedef struct {
CLLocationDegrees latitude; // 緯度
CLLocationDegrees longitude; // 經(jīng)度
} CLLocationCoordinate2D;
一般用CLLocationCoordinate2DMake函數(shù)來(lái)創(chuàng)建CLLocationCoordinate2D
經(jīng)緯度了解
模擬位置
如果是模擬器嵌屎,需要設(shè)置模擬位置(經(jīng)緯度)朝帝都的經(jīng)緯度是:北緯40°推正,東經(jīng)116°
用戶隱私的保護(hù)
我們知道,蘋果對(duì)用戶的隱私保護(hù)的非常好宝惰,如果需要打開相機(jī)植榕、相冊(cè)等,需要用戶授權(quán)才可以掌测。
開發(fā)者可以在Info.plist中設(shè)置NSLocationUsageDescription說(shuō)明定位的目的(Privacy - Location Usage Description)
一旦用戶選擇了“Don’t Allow”内贮,意味著你的應(yīng)用以后就無(wú)法使用定位功能.為了嚴(yán)謹(jǐn)起見(jiàn),最好在使用定位功能之前判斷當(dāng)前應(yīng)用的定位功能是否可用CLLocationManager有個(gè)類方法可以判斷當(dāng)前應(yīng)用的定位功能是否可用
+ (BOOL)locationServicesEnabled;
CLGeocoder
使用CLGeocoder可以完成“地理編碼”和“反地理編碼”地理編碼:根據(jù)給定的地名汞斧,獲得具體的位置信息(比如經(jīng)緯度、地址的全稱等)什燕。反地理編碼:根據(jù)給定的經(jīng)緯度粘勒,獲得具體的位置信息。
-地理編碼方法
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
-反地理編碼方法
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
CLGeocodeCompletionHandler
CLGeocodeCompletionHandlertypedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);
這個(gè)block傳遞2個(gè)參數(shù)error :當(dāng)編碼出錯(cuò)時(shí)(比如編碼不出具體的信息)有值placemarks :里面裝著CLPlacemark對(duì)象
CLPlacemark
CLPlacemark的字面意思是地標(biāo)屎即,封裝詳細(xì)的地址位置信息1庙睡、地理位置
@property (nonatomic, readonly) CLLocation *location;
2、區(qū)域
@property (nonatomic, readonly) CLRegion *region;
3技俐、詳細(xì)的地址信息
@property (nonatomic, readonly) NSDictionary *addressDictionary;
4乘陪、地址名稱
@property (nonatomic, readonly) NSString *name;
5、城市
@property (nonatomic, readonly) NSString *locality;
測(cè)試代碼:
//
// IWViewController.m
// 0717-CoreLocation
//
// Created by kaiyi on 16-7-17.
// Copyright (c) 2016年 kaiyi. All rights reserved.
//
#import "IWViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface IWViewController ()<CLLocationManagerDelegate>
@property(nonatomic, strong) CLLocationManager *locMgr;
@end
@implementation IWViewController
// 初始化屬性值
-(CLLocationManager *)locMgr
{
if(!_locMgr)
{
// 創(chuàng)建定位管理者
// CLLocationManager *locMgr = [[CLLocationManager alloc] init];
self.locMgr = [[CLLocationManager alloc] init];
// 設(shè)置代理
// locMgr.delegate = self;
self.locMgr.delegate = self;
}
return _locMgr;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// 開始定義用戶的位置
[self.locMgr startUpdatingLocation];
}
/**
*
* 只要定位到用戶的位置雕擂,就會(huì)調(diào)用(調(diào)用頻率非常高)
*/
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// 1.取出位置對(duì)象
CLLocation *loc = [locations firstObject];
// 2.取出經(jīng)緯度
CLLocationCoordinate2D coordinate = loc.coordinate;
// 3.打印經(jīng)緯度
NSLog(@"經(jīng)度:%f-----緯度:----%f", coordinate.latitude, coordinate.longitude);
NSLog(@"didUpdateLocations");
// 停止定位
[manager stopUpdatingHeading];
}
@end
轉(zhuǎn)自 IOS開發(fā)之CoreLocation地理定位--- segmentfault
作者 Corwien
感覺(jué)軌跡這塊的相關(guān)資料比較少啡邑,網(wǎng)上找的一些資料整理下來(lái)
相關(guān)資料:
地圖處理之基本使用匯總
iOS 原生地圖(MapKit、MKMapView)軌跡漸變
iOS原生地圖MKMapView添加半透明遮蓋物和軌跡起點(diǎn)井赌、終點(diǎn)等自定義annotation
iOS開發(fā)系列--地圖與定位