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

Posted

技术标签:

【中文标题】为啥 CLLocation 坐标在显示时会失去精度?【英文标题】:Why do CLLocation coordinates lose precision when displayed?为什么 CLLocation 坐标在显示时会失去精度? 【发布时间】:2010-11-09 13:37:55 【问题描述】:

我正在进行一些实验,试图通过对随时间收集的数据执行加权平均来提高 iPhone 上的 GPS 精度。我注意到控制台、iPhone 模拟器和 iPhone 本身的坐标显示有所不同。

我正在运行基本的 CoreLocation 代码来设置我的位置管理器。

self.locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

[locationManager startUpdatingLocation];

在我的 locationManager: didUpdateToLocation: fromLocation: 方法中,我使用 NSLog 将坐标以多种格式写入控制台,然后在我的 IBOutlets 中显示它们。

NSLog(@"%@", newLocation);
NSLog(@"%f", newLocation.coordinate.latitude);
NSLog(@"%e", newLocation.coordinate.latitude);
NSLog(@"%E", newLocation.coordinate.latitude);

self.latitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude];
self.longitude.text = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude];
self.altitude.text = [NSString stringWithFormat:@"%f", newLocation.altitude];
self.horizontalAccuracy.text = [NSString stringWithFormat:@"%f", newLocation.horizontalAccuracy];
self.verticalAccuracy.text = [NSString stringWithFormat:@"%f", newLocation.verticalAccuracy];

写入控制台的值如下。

NSLog(@"%@", ...);  | <+42.40334972, -71.27483790> +/- 240.00m (speed -1.00 mps / course -1.00) @ 2010-10-19 12:15:00 GMT
NSLog(@"%f", ...); | 42.403350
NSLog(@"%e", ...); | 4.240335e+01
NSLog(@"%E", ...); | 4.240335E+01

屏幕上显示的经纬度如下。

Latitude | 42.403350
Longitude | -7.274838

由于纬度和经度是 CLLocationDegrees,即双精度值,并且我使用 %f 将坐标写入控制台并在屏幕上显示它们,我认为“原始”坐标不会从 8 向上取整到小数点后 6 位。 (我也不知道 iPhone 上的 GPS 接收器收集坐标的精度是否与 MacBook Pro 相同。)

显然,我可以将 CLLocation 对象存储在一个数组中,并在我的加权平均计算中使用更精确的坐标,但我也想在屏幕上显示增加的精度。有什么解决方法或想法?

提前致谢。

【问题讨论】:

只是想指出,6 位小数可以为您提供 10 厘米的分辨率。 GPS 接收器的分辨率最多只有几米。 【参考方案1】:

6 位只是使用 NSLog(和 printf 函数)进行浮点输出的默认值,并且存储在 newLocation 变量中的坐标值不会失去其精度,您可以明确设置需要打印的位数:

NSLog(@"%.8f", ...);// will print 8 decimal digits

【讨论】:

太棒了!不知道您可以使用 %f 指定精度级别。

以上是关于为啥 CLLocation 坐标在显示时会失去精度?的主要内容,如果未能解决你的问题,请参考以下文章

从浮点 lat long 创建的 CLLocation 显示更高的精度

为啥 UIStackView 中的 UILabel 在重用时会失去高度?

为啥我的 Vue js 应用在路由到其他组件时会失去焦点?

从方法中获取 CLLocation 坐标

为啥Java在使用“加号”运算符时会执行从双精度到整数的隐式类型转换? [复制]

CLLocation 类的课程值一直为 -1。为啥?