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

问题描述 投票:1回答:2

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

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

目前,我能够将坐标显示在我成功部署的示例应用程序中。但是,我尝试稍微修改它,以便我只收到一个更新(这是我想要的,而不是几个),并将输出打印到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);

}

但是,不是让坐标出现在控制台中(即纬度为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

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

iphone objective-c geocoding cllocation
2个回答
0
投票

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

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

String Format Specifiers


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.