1.在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发
Map Kit :用于地图展示.
Core Location :用于地理定位.
2.热门专业术语
LBS :Location Based Service (基于位置的服务)
SoLoMo :Social Local Mobile(索罗门)(即:Social(社交的)、Local(本地的)、Mobile(移动的),连起来就是SoLoMo(索罗门),社交本地移动,即社交加本地化加移动,它代表着未来互联网发展的趋势。)
3.需要导入头文件
导入头文件:#import <CoreLocation/CoreLocation.h>
4.CLLocationManager的常用操作
/**开始用户定位*/
- (void)startUpdatingLocation;
/**停止用户定位*/
- (void) stopUpdatingLocation;
/**定位回调的方法*/
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
locations参数里面装着CLLocation对象
CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等
/**经纬度*/
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
/**海拨*/
@property(readonly, nonatomic) CLLocationDistance altitude;
/**路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表真北方向)*/
@property(readonly, nonatomic) CLLocationDirection course;
/**行走速度(单位是m/s)*/
@property(readonly, nonatomic) CLLocationSpeed speed;
/**计算2个位置之间的距离*/
- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location;
/**每隔多少米定位一次*/
@property(assign, nonatomic) CLLocationDistance distanceFilter;
/**定位精确度(越精确就越耗电)*/
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
5.经纬度与中国经纬度
6.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;
7.模拟定位事例
7.1导入包.
7.2.如果是iOS8或者以上的版本需要的在info.plist里面设置如下内容
7.3代码部分
#import "ViewController.h"
/**导入定位框架*/
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()<CLLocationManagerDelegate>/**采用定位代理*/
/**0.创建一个位置*/
@property (strong, nonatomic) CLLocationManager *locMgr;
@end
@implementation ViewController
/**1.懒加载,因为只创建一次,定位管理器*/
- (CLLocationManager *)locMgr{
#warning 2.定位服务不可用,用户取消了以后,返回为空
if (![CLLocationManager locationServicesEnabled]) return nil;
if (!_locMgr) {
/**3.创建定位管理者*/
self.locMgr = [[CLLocationManager alloc] init];
/**4.设置代理*/
self.locMgr.delegate = self;
}
return _locMgr;
}
- (void)viewDidLoad {
[super viewDidLoad];
/**5.开始定位用户的位置*/
[self.locMgr startUpdatingLocation];
#warning iOS8里面必须添加这个
/**6.是否允许你的定位*/
[self.locMgr requestAlwaysAuthorization];
/**7.精确度*/
_locMgr.desiredAccuracy = kCLLocationAccuracyBest;
}
#pragma mark--8.当定位开始时,回调的方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
/**8.1.取出位置对象,第一个位置,因为第一个准确*/
CLLocation *loc = [locations firstObject];
/**8.2.取出经纬度*/
#if 0
typedef struct {
CLLocationDegrees latitude; 代表纬度
CLLocationDegrees longitude; 代表经度
} CLLocationCoordinate2D;
#endif
CLLocationCoordinate2D coordinate = loc.coordinate;
/**8.3.打印经纬度*/
NSLog(@"%f%f",coordinate.latitude,coordinate.longitude);
/**4.停止定位,因为这里只需定位用户的最初位置,如果是一直定位的话,不用写下面的话*/
[self.locMgr stopUpdatingLocation];
}
@end
7.因为上面的事例是模拟定位所以,需要在模拟上设置,选择Apple