There are two ways to find current location (lat,long) of device : Using CoreLocation framework OR using Mapkit framework.
Here's how to get the location using CoreLocation framework :
1. Import CoreLocation/CoreLocation.h in h file of view controller.
2. Create a global CLLocationManager object in the class.
#import <CoreLocation/CoreLocation.h>
@interface LocationViewController : NSObject <CLLocationManagerDelegate> {
CLLocationManager *locationManager;
}
3. Instantiate the object in viewDidLoad method or anywhere where you initialize other objects.
locationManager = [[CLLocationManager alloc]
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.delegate = self;
[locationManager startUpdatingLocation];
4. Implement CLLocationDelegate methods
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *newLocation = locations[0];
NSLog(@"lat: %f lon: %f",newLocation.coordinate.latitude,newLocation.coordinate.longitude);
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLoc(@"Error %@",error);
}
According to apple documentation :
desiredAccuracy is for the accuracy of result location data.
The receiver does its best to achieve the requested accuracy; however, the actual accuracy is not guaranteed.
Following are options that can be used as per requirement :
kCLLocationAccuracyBestForNavigation
kCLLocationAccuracyBest // this is the default value
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometer
kCLLocationAccuracyThreeKilometers
Determining a location with greater accuracy requires more time and more power. Hence the value which is appropriate for the required scenario should be used.
distanceFilter is the minimum distance (measured in meters) a device must move horizontally before an update event is generated.
This distance is measured relative to the previously delivered location. Use the value kCLDistanceFilterNone to be notified of all movements. The default value of this property is kCLDistanceFilterNone.
CLLocation object contains geographical coordinates and altitude of the devices location along with values indicating the accuracy of the measurements and the time when those measurements were made. In iOS, this class also reports information about the speed and heading in which the device is moving.
0 Comment(s)