Question

I am trying to learn how to use the CLLocation class for the purpose of building an iPhone app that takes the user's current location, and then uses it to retrieve results from a sqlite database. To do this, I need to initially acquire the user's present location by using the CLLocation class, and specifically, the method:

(void)locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *)newLocation fromLocation: (CLLocation *)oldLocation {}

At present, I am able to get the co-ordinates to appear in a sample app that I successfully deployed. However, I tried to modify it slightly so that I receive only one update (which is what I want, not several), and print the output to the NSLog console. My relevant code looks like this:

- (void) locationManager:(CLLocationManager *)manager 
 didUpdateToLocation:(CLLocation *)newLocation
        fromLocation:(CLLocation *)oldLocation {

numUpdates++;

NSString *lat = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.latitude];
latitudeTextField.text = lat;

NSString *lng = [[NSString alloc] initWithFormat:@"%g", newLocation.coordinate.longitude];
longitudeTextField.text = lng;

NSString *acc = [[NSString alloc] initWithFormat:@"%g", newLocation.horizontalAccuracy];
accuracyTextField.text = acc;

if (numUpdates == 1) {

    [lm stopUpdatingLocation];
    NSLog(@"latitude: %i longitude: %i", lat, lng);

}

However, instead of getting the co-ordinates to appear in the console (i.e. 37.3317 for latitude, and -122.031 for longitude), I get the following output, which unfortunately is different each time I run my code:

[Session started at 2010-11-03 01:43:36 -0400.]
2010-11-03 01:43:41.208 GPS[4702:207] latitude: 65138096 longitude: 65023248
Terminating in response to SpringBoard's termination.

[Session started at 2010-11-03 21:38:45 -0400.]
2010-11-03 21:39:37.072 GPS[5880:207] latitude: 65030208 longitude: 65070336
Terminating in response to SpringBoard's termination.

[Session started at 2010-11-03 21:53:12 -0400.]
2010-11-03 21:53:21.824 GPS[5899:207] latitude: 65042624 longitude: 65086352

Can anyone see what it is I am doing wrong, and show me how to correctly assign the value of the user's latitude, and longitude position to a variable, and then print it on the NSLog console in it's decimal format, and NOT in the degree format?

Was it helpful?

Solution

%i is for printing int values. In your code, lat and lng are NSStrings (objects) so use %@:

NSLog(@"latitude: %@ longitude: %@", lat, lng);

See String Format Specifiers.

OTHER TIPS

Location is different because GPS data is not accurate. If you need accurate enough data, ignore 3-4 first locations by filtering based on newLocation.horizontalAccuracy.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top