转自:https://my.oschina.net/wangdk/blog/166792
其中desiredAccuracy属性表示精确度,有5种选择如下:
desiredAccuracy属性
描述
kCLLocationAccuracyBest
精确度最佳
kCLLocationAccuracynearestTenMeters
精确度10m以内
kCLLocationAccuracyHundredMeters
精确度100m以内
kCLLocationAccuracyKilometer
精确度1000m以内
kCLLocationAccuracyThreeKilometers
精确度3000m以内
NOTE:精确度越高,用点越多,就要根据实际情况而定。
// appDelgate.h #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import <MapKit/MapKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate,CLLocationManagerDelegate,MKReverseGeocoderDelegate> @property (strong, nonatomic) UIWindow *window; @end // // AppDelegate.m // location // // Copyright (c) 2013年 TestApp. All rights reserved. // #import "AppDelegate.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd]; button.frame = CGRectMake(0, 100, 100, 30); [button setTitle:@"定位" forState:UIControlStateNormal]; [button addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 150, 320, 30)]; label.tag = 101; label.text = @"等待定位中...."; [self.window addSubview:label]; [label release]; [self.window addSubview:button]; return YES; } -(void) test { CLLocationManager *locationManager = [[CLLocationManager alloc] init]; // 设置定位精度,十米,百米,最好 [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; locationManager.delegate = self; // 开始时时定位 [locationManager startUpdatingLocation]; } // 错误信息 -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"error"); } // 6.0 以上调用这个函数 -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { NSLog(@"%d", [locations count]); CLLocation *newLocation = locations[0]; CLLocationCoordinate2D oldCoordinate = newLocation.coordinate; NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude); // CLLocation *newLocation = locations[1]; // CLLocationCoordinate2D newCoordinate = newLocation.coordinate; // NSLog(@"经度:%f,纬度:%f",newCoordinate.longitude,newCoordinate.latitude); // 计算两个坐标距离 // float distance = [newLocation distanceFromLocation:oldLocation]; // NSLog(@"%f",distance); [manager stopUpdatingLocation]; //------------------位置反编码---5.0之后使用----------------- CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error){ for (CLPlacemark *place in placemarks) { UILabel *label = (UILabel *)[self.window viewWithTag:101]; label.text = place.name; NSLog(@"name,%@",place.name); // 位置名 // NSLog(@"thoroughfare,%@",place.thoroughfare); // 街道 // NSLog(@"subThoroughfare,%@",place.subThoroughfare); // 子街道 // NSLog(@"locality,%@",place.locality); // 市 // NSLog(@"subLocality,%@",place.subLocality); // 区 // NSLog(@"country,%@",place.country); // 国家 // administrativeArea //省 } }]; } // 6.0 调用此函数 -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"%@", @"ok"); } @end iOS 8.0 获取权限p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo} span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000} span.s2 {font-variant-ligatures: no-common-ligatures; color: #c32275} span.s3 {font-variant-ligatures: no-common-ligatures; color: #6122ae} span.s4 {font-variant-ligatures: no-common-ligatures} span.s5 {font-variant-ligatures: no-common-ligatures; color: #0435ff} span.s6 {font-variant-ligatures: no-common-ligatures; color: #539aa4}if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 8.0) {
[self.locationManager requestWhenInUseAuthorization];
}