为啥 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 在重用时会失去高度?