如何使用iPhone的CLLocation类为变量分配纬度和经度?

时间:2022-02-19 16:04:15

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:

我正在尝试学习如何使用CLLocation类来构建一个获取用户当前位置的iPhone应用程序,然后使用它来从sqlite数据库中检索结果。为此,我需要首先使用CLLocation类获取用户的当前位置,具体来说,方法:

(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:

目前,我能够让坐标显示在我成功部署的示例应用程序中。但是,我尝试稍微修改它,以便我只收到一个更新(这是我想要的,而不是几个),并将输出打印到NSLog控制台。我的相关代码如下所示:

- (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:

但是,不是让坐标出现在控制台中(即纬度为37.3317,经度为-122.031),我得到以下输出,不幸的是每次运行我的代码都不同:

[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?

任何人都可以看到它我做错了什么,并告诉我如何正确地将用户的纬度和经度位置的值分配给变量,然后在它的十进制格式的NSLog控制台上打印,而不是在程度上格式?

2 个解决方案

#1


0  

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

%i用于打印int值。在你的代码中,lat和lng是NSStrings(对象)所以使用%@:

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

See String Format Specifiers.

请参见字符串格式说明符。

#2


0  

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.

位置不同,因为GPS数据不准确。如果您需要足够准确的数据,请通过基于newLocation.horizo​​ntalAccuracy过滤来忽略3-4个第一个位置。

#1


0  

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

%i用于打印int值。在你的代码中,lat和lng是NSStrings(对象)所以使用%@:

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

See String Format Specifiers.

请参见字符串格式说明符。

#2


0  

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.

位置不同,因为GPS数据不准确。如果您需要足够准确的数据,请通过基于newLocation.horizo​​ntalAccuracy过滤来忽略3-4个第一个位置。