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

发布于 2024-09-30 05:17:57 字数 1745 浏览 4 评论 0原文

我正在尝试学习如何使用 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 控制台上学位格式?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坐在坟头思考人生 2024-10-07 05:17:57

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

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

请参阅 字符串格式说明符

%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.

兮颜 2024-10-07 05:17:57

由于 GPS 数据不准确,位置有所不同。如果您需要足够准确的数据,请根据 newLocation.horizo​​ntalAccuracy 进行过滤,忽略前 3-4 个位置。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文