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

Posted

技术标签:

【中文标题】如何使用 iPhone 的 CLLocation 类将纬度和经度分配给变量?【英文标题】:How to use iPhone's CLLocation class to assign latitude and longitude to variables? 【发布时间】:2010-11-04 01:56:46 【问题描述】:

我正在尝试学习如何使用 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 控制台上打印它,而不是学位格式?

【问题讨论】:

【参考方案1】:

%i 用于打印 int 值。在您的代码中,lat 和 lng 是 NSString(对象),因此请使用 %@

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

见String Format Specifiers。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于如何使用 iPhone 的 CLLocation 类将纬度和经度分配给变量?的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 中暂停和恢复 CLLocation 跟踪

CLLocation 区域监控已启动,但没有在 iPhone 上调用 didExitRegion

为啥 CLLocation 坐标在显示时会失去精度?

如何找出设备坐标

iphone 4s如何更改当前位置?

iPhone模拟器位置错误