如何使用iOS中的CLLocationManager获取当前位置

我已经可以使用纬度和经度查找当前位置,但是我也希望能够find给定邮政编码的当前位置。

这是我到目前为止:

。H

#import <MapKit/MapKit.h> #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface ViewController : UIViewController<CLLocationManagerDelegate> { CLLocationManager *locationManager; CLLocation *currentLocation; IBOutlet UILabel *label1; IBOutlet UILabel *lable2; } @property (weak, nonatomic) IBOutlet MKMapView *myMapview; @property (weak, nonatomic) IBOutlet UILabel *label2; @property (weak, nonatomic) IBOutlet UILabel *lable1; @end 

.M

 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. locationManager = [[CLLocationManager alloc]init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; _myMapview.showsUserLocation = YES; [self->locationManager startUpdatingLocation]; CLLocation *location = [locationManager location]; CLLocationCoordinate2D coordinate = [location coordinate]; NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude]; NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude]; //NSLog(@”dLatitude : %@”, latitude); //NSLog(@”dLongitude : %@”,longitude); NSLog(@"MY HOME :%@", latitude); NSLog(@"MY HOME: %@ ", longitude); } #pragma mark CLLocationManager Delegate - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { currentLocation = [locations objectAtIndex:0]; [locationManager stopUpdatingLocation]; [self->locationManager stopUpdatingLocation]; NSLog(@"my latitude :%f",currentLocation.coordinate.latitude); NSLog(@"my longitude :%f",currentLocation.coordinate.longitude); label1.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; lable2.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; NSLog(@"Detected Location : %f, %f", currentLocation.coordinate.latitude, currentLocation.coordinate.longitude); CLGeocoder *geocoder = [[CLGeocoder alloc] init] ; [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { if (error) { NSLog(@"Geocode failed with error: %@", error); return; } NSLog(@"Monday"); CLPlacemark *placemark = [placemarks objectAtIndex:0]; NSLog(@"placemark.ISOcountryCode %@",placemark.ISOcountryCode); }]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"didUpdateToLocation: %@", newLocation); CLLocation *currentLocation = newLocation; if (currentLocation != nil) { label1.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; lable2.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

步骤1:.h文件中导入MobileCoreServices框架

#import <MobileCoreServices/MobileCoreServices.h>

第2步:添加委托CLLocationManagerDelegate

 @interface yourViewController : UIViewController<CLLocationManagerDelegate> { CLLocationManager *locationManager; CLLocation *currentLocation; } 

第3步:在类文件中添加此代码

 - (void)viewDidLoad { [super viewDidLoad]; [self CurrentLocationIdentifier]; // call this method } 

步骤4:获取位置的方法

 //------------ Current Location Address----- -(void)CurrentLocationIdentifier { //---- For getting current gps location locationManager = [CLLocationManager new]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; //------ } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { currentLocation = [locations objectAtIndex:0]; [locationManager stopUpdatingLocation]; CLGeocoder *geocoder = [[CLGeocoder alloc] init] ; [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { if (!(error)) { CLPlacemark *placemark = [placemarks objectAtIndex:0]; NSLog(@"\nCurrent Location Detected\n"); NSLog(@"placemark %@",placemark); NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; NSString *Address = [[NSString alloc]initWithString:locatedAt]; NSString *Area = [[NSString alloc]initWithString:placemark.locality]; NSString *Country = [[NSString alloc]initWithString:placemark.country]; NSString *CountryArea = [NSString stringWithFormat:@"%@, %@", Area,Country]; NSLog(@"%@",CountryArea); } else { NSLog(@"Geocode failed with error %@", error); NSLog(@"\nCurrent Location Not Detected\n"); //return; CountryArea = NULL; } /*---- For more results placemark.region); placemark.country); placemark.locality); placemark.name); placemark.ocean); placemark.postalCode); placemark.subLocality); placemark.location); ------*/ }]; } 

这里是一个代码来获取用户当前位置使用块

1) #import <CoreLocation/CoreLocation.h>

2) <CLLocationManagerDelegate>

3)在.h文件中

 //Location typedef void(^locationBlock)(); //Location -(void)GetCurrentLocation_WithBlock:(void(^)())block; @property (nonatomic, strong) locationBlock _locationBlock; @property (nonatomic,copy)CLLocationManager *locationManager; @property (nonatomic)CLLocationCoordinate2D coordinate; @property (nonatomic,strong) NSString *current_Lat; @property (nonatomic,strong) NSString *current_Long; 

4).m文件

 #pragma mark - CLLocationManager -(void)GetCurrentLocation_WithBlock:(void(^)())block { self._locationBlock = block; _locationManager = [[CLLocationManager alloc] init]; [_locationManager setDelegate:self]; [_locationManager setDistanceFilter:kCLDistanceFilterNone]; [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; if (IS_OS_8_OR_LATER) { if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { [_locationManager requestWhenInUseAuthorization]; [_locationManager requestAlwaysAuthorization]; } } [_locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { CLLocation *currentLoc=[locations objectAtIndex:0]; _coordinate=currentLoc.coordinate; _current_Lat = [NSString stringWithFormat:@"%f",currentLoc.coordinate.latitude]; _current_Long = [NSString stringWithFormat:@"%f",currentLoc.coordinate.longitude]; NSLog(@"here lat %@ and here long %@",_current_Lat,_current_Long); self._locationBlock(); [_locationManager stopUpdatingLocation]; _locationManager = nil; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { } 

5)通话function

 - (void)viewDidLoad { [super viewDidLoad]; [self GetCurrentLocation_WithBlock:^{ NSLog(@"Lat ::%f,Long ::%f",[self.current_Lat floatValue],[self.current_Long floatValue]); }]; } 

6)并将下面的行添加到.plist

Info.plist文件中需要添加以下任一项或两项。

 NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription 

如果位置权限不问你什么时候第一次启动,那么你不能得到你的当前位置。

iOS8让我们对LocationsServices进行了主要的API更改

假设[CLLocationManager locationServicesEnabled]返回YES,

首次推出iOS应用程序[iOS7和iOS8] – locationMangers(CLLocationManager)

您可以致电Google API Maps服务以使用邮政编码获取位置:

只需在address={your zipcode}input您的邮政编码。