How to use iPhone's CLLocation class to assign latitude and longitude to variables?
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 开发者_JS百科NSLog console in it's decimal format, and NOT in the degree format?
%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.
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.
精彩评论