CoreLocation:用于地理定位,地理编码,区域监听等(着重功能实现)
MapKit:用于地图展示,如大头针,路线,覆盖层展示等(着重界面展示)
热门专业术语
LBS:Location Based Services 基于位置的服务
SoLoMo:Social Local Mobile(索罗门) 社交化,本地化,移动化
CoreLocation框架的使用
1.导入框架(Xcode5.0之后可以省略)
2.导入头文件
#import <CoreLocation/CoreLocation.h>
3.CoreLocation使用须知
1)CoreLocation中所有数据类型的前缀都是CL
2)CoreLocation中使用CLLocationManager对象来做用户定位
CLLocationManager
∆开始更新用户位置
-(void)startUpdatingLocation;
∆停止更新用户位置
-(void)stopUpdatingLocation;
当调用了startUpdatingLocation方法后,就开始不断地请求、刷新用户的位置,一旦请求到用户位置就会调用代理的下面方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)location;
locations参数里面装着CLLocation对象
CLLocationManager补充
为了谨慎起见,最好在使用定位功能之前判断当前应用的定位功能是否可用
*CLLocationManager有个类方法可以判断当前应用的定位功能是否可用
+(BOOL)locationServicrsEnabled;
@property(nonatomic,assign)CLLocationAccuracy desiredAccuracy;
定位精确度(越精确就越耗电)
CLLocation
*CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等
//经纬度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
//海拔
@property(readonly, nonatomic) CLLocationDistance altitude;
//路线,航向(取值范围是0.0˚~359.9˚,0.0˚代表正北方向)
@property(readonly, nonatomic) CLLocationDirection course;
//移动速度
@property(readonly, nonatomic) CLLocationSpeed speed;
用以下方法可以计算2个位置之间的距离
-(CLLocationDistance)distanceFromLocation:(const CLLocation * )location;
CLLocationCoordinate2D
*CLLocationCoordinate2D是一个用来表示经纬度的结构体,定义如下
typedef struct{
CLLocationDegrees latitude;//经度
CLLocationDegrees longitude;//经度
}CLLocationCoordinate2D;
//一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D
CLGeocoder
*使用CLGeocoder可以完成“地理编码”和“反地理编码”
地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全程等)
反地理编码:根据给定的经纬度,获得具体的位置信息
地理编码方法
- (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;
反地理编码方法
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
CLGeocodeCompletionHandler
*当地理、反地理编码完成时,就会调用CLGeocodeCompletionHandler
typedef void (^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error);
//这个block传递2个参数
//error:当编码出错时(比如编码不出具体的信息)有值
//placemarks:里面装着CLPlacemark对象
CLPlacemark
*CLPlacemark的字面意思是地标,封装详细的地址位置信息
//地理位置
@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;