一、corelocation(核心定位)基本使用
1.主要作用:定位、区域判断、地理编码
2.主要使用的类
2.1> CLLocation,表示某个地理位置的信息
其中包含:
CLLocationCoordinate2D coordinate//经纬度
CLLocationDistance altitude //海拔
CLLocationDirection course//方向 取值为0~359.9
CLLocationSpeed speed //速度,m/s
2.2>CLLocationManager 地图定位管理者:开启地图定位功能
2.2.1 开启地位定位
-(void)startUpdatingLocation
2.2.2关闭地图定位
-(void)stopUpdatingLocation
2.2.3 代理方法:当开启定位功能之后就会调用
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; //每定位到新的位置就会调用,在数组location中返回CLLocation对象。
2.2.4补充:在使用CLLocationManager定位是需要判断定位功能是否可用
+ (BOOL)locationServicesEnabled;//定位功能是否可用
@property(assign, nonatomic) CLLocationDistance distanceFilter;//每隔多少米定位一次
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;//定位精确度(越精确就越耗电)
2.3用户隐私保护:
iOS8之前
开发者可以在Info.plist中设置NSLocationUsageDescription说明定位的目的 (Privacy - Location Usage Description)
ios:
)调用iOS 8.0的API,主动请求用户授权
- (void)requestAlwaysAuthorization // 请求允许在前后台都能获取用户位置的授权
- (void)requestWhenInUseAuthorization // 请求允许在前台获取用户位置的授权
(2)务必在info.plist文件中配置对应的键值, 否则以上请求授权的方法不生效
● NSLocationAlwaysUsageDescription : 允许在前后台获取GPS的描述
● NSLocationWhenInUseDescription : 允许在前台获取GPS的描述
iOS9+;
在后台也想定位的话需要主动调用_locationM.allowsBackgroundLocationUpdates = YES;
-(void)locationManager:(nonnull CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status//当用户授权状态改变时
2.4地理编码
-(void)geocodeAddressString:(NSString*)addressString completionHandler: (CLGeocodeCompletionHandler)completionHandler;
反地理编码方法
-(void)reverseGeocodeLocation:(CLLocation*)location completionHandler: (CLGeocodeCompletionHandler)completionHandler;
2.4.1在返回的completionHandler中包含一placeMark的地标数组
placeMark:
@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; 城市
2.5区域监听
-(void)startMonitoringForRegion;//开启区域监听
代理方法:
/ 进去监听区域后调用(调用一次)
-(void)locationManager:(nonnull CLLocationManager *)manager didEnterRegion:(nonnull CLRegion *)region
{
[manager stopMonitoringForRegion:region];//结束监听
}
二、mapKit
1.主要作用:显示方面(大头针、路线、覆盖层)
1.1 自定义大头针:
自定义anotation继承于MKAnotation;
-(void)addAnnotation;//添加大头针到mapview上,
mapView代理方法:
(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id)annotation//zai代理方法中自定义MKAnotationView,接受传入的annotation模型
1.2航线信息(MKDirectionsRequest)
MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
request.source = sourceItem;// 起点
request.destination = endItem;// 终点
-(void)calculateDirectionsWithCompletionHandler (MKDirectionsHandler)completionHandler;//在MKDirectionResponse中拿到信息。
其中MKRoute中有个MKPolyLine,调用-addOverlay
代理方法:
-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay//将路线渲染上去
1.3 3D视角以及地图快照(iOS9出的)
3D:创建地图项(MKMapItem)
- (BOOL)openInMapsWithLaunchOptions:(NSDictionary *)launchOptions;
在调用+ (BOOL)openMapsWithItems:(NSArray *)mapItems launchOptions:(NSDictionary *)launchOptions;//系统地图进行导航
快照:(MKSnapShotter)