您的位置:首页 > 其它

使用系统的CoreLocation定位

2015-09-30 17:38 344 查看
//
// ViewController.m
// LBS
//
// Created by tonnyhuang on 15/8/28.
// Copyright (c) 2015年 tonnyhuang. All rights reserved.
//

#import "ViewController.h"

#import <CoreLocation/CoreLocation.h>

//首先,我们需要在工程中导入CoreLocation系统框架。然后在我们的控制器中引入头文件。
//然后,声明一个CLLocationManager对象作为成员变量,用于定位获取经纬度坐标,并遵守协议CLLocationManager的协议。
@interface ViewController ()<CLLocationManagerDelegate>

{

CLLocationManager *_locationManager;

}

@end

@implementation ViewController

//实现其中的代理方法
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

fromLocation:(CLLocation *)oldLocation {

//获取经度

NSLog(@"经度 == %lf", newLocation.coordinate.longitude);

//获取纬度

NSLog(@"纬度 == %lf", newLocation.coordinate.latitude);

//获取当前所在的城市名

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

//根据经纬度反向地理编码出地址信息

[geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {

CLPlacemark *placemark = [placemarks objectAtIndex:0];

NSLog(@"%@", placemark.name);

//获取城市

NSString *city = placemark.locality;

//四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市

if (!city) {

city = placemark.administrativeArea;

} else if (error == nil && [placemarks count] == 0){

NSLog(@"no result were returned");

} else if (error != nil) {

NSLog(@"error = %@", error);

}

NSLog(@"city = %@", city);

}];

//系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新

}

//最后在viewDidLoad中初始化定位管理器。

- (void)viewDidLoad {

[super viewDidLoad];

[self initializeLocationService];

}

- (void)initializeLocationService {

//初始化定位管理器

_locationManager = [[CLLocationManager alloc] init];

//设置代理

_locationManager.delegate = self;

//设置定位精确度到米
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
//设置过滤器为无
_locationManager.distanceFilter = kCLDistanceFilterNone;
//开始定位
[_locationManager requestAlwaysAuthorization];
//取得定位权限,有两个方法,取决于你的定位使用情况
[_locationManager startUpdatingLocation];
}
//如果需要正常定位,相对iOS7而言,iOS8需要额外处理两个地方。//1. 工程的plist文件里面添加两个字段:NSLocationAlwaysUsageDescription,
//NSLocationWhenInUseUsageDescription,type类型均为string,值可以根据你的需要填写(也可以不填),填写的内容会展示在APP提示用户是否允许定位的alert内容里面,具体效果可以自行测试,这里就不额外截图。

这儿的位置不要错误 在上边的info.plist中添加字段



//2. 调用定位方法之前需要额外调用一个函数,直接在上面iOS7初始化定位服务的方法里面修改即可,具体如下:

// 开始定位
// 取得定位权限,有两个方法,取决于你的定位使用情况
// 一个是requestAlwaysAuthorization,一个是requestWhenInUseAuthorization
//[_locationManager requestAlwaysAuthorization];//这句话ios8以上版本使用。
//[_locationManager startUpdatingLocation];

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: