苹果手机;使用 mapkit 处理纬度/经度十进制值
Posted
技术标签:
【中文标题】苹果手机;使用 mapkit 处理纬度/经度十进制值【英文标题】:iphone; handling latitude/longitudes decimal values with mapkit 【发布时间】:2010-11-29 03:23:46 【问题描述】:大家好 我需要使用 xcode 处理位置坐标的帮助;准确地说,转换。 我有 CLLocation 对象,它使用手机的地理位置接收到了经纬度,工作正常。但我在处理转换时遇到问题。
我将 lat 和 long 值存储在 userdefaults 中使用
[defaults setObject:[NSString stringWithFormat:@"%.9lf",location.coordinate.latitude] forKey:@"lastKnownLat"];
但是位置的十进制值当然不精确,它可能是 3.123456789 或 3.12345 - 在后一种情况下,该值将转换为 3.123459999,我认为这会在地图上给出错误的定位。
我怎样才能避免这种情况? 存储纬度/经度值并在地图上显示它们的最佳方式是什么? 在 mapkit 中,3.12345 和 3.12345999 之间会产生很大差异吗?
谢谢
【问题讨论】:
您询问 3.12345 和 3.12345999 度之间是否存在有意义的差异。在赤道,度数与以往一样大,1 度约为 362775 英尺或 110574 米。乘以 0.000001 得到 4.3 英寸或 11 厘米。两者都远远低于任何 GPS 的准确度,当然是 iPhone 的。 (对于那些关注准确性的人来说,是的,在许多计算中,小数点后 6 位的错误最终可能会滑到一个有意义的距离。) 啊,好吧,我想知道这个,感谢马修的洞察力,当然有教育意义:) 【参考方案1】:NSUserDefaults
具有专门用于保存浮点值的方法,您可以使用setDouble:forKey: 来尽可能保持精度。
【讨论】:
如果你打算使用 NSUserDefaults 这绝对是要走的路。 嗨,贾斯汀,我已经尝试过了,但我得到了不兼容的类型错误,我正在使用 [defaults setValue:location.coordinate.latitude forKey:@"lastKnownLat"] - 我必须进行任何转换吗? 应该是setDouble:forKey:
,而不是setValue:forKey:
。在这种情况下,后者与setObject:forKey:
相同。
啊,好的,知道了 - 谢谢,对不起,我没有仔细查看可用选项。还有我的子问题,当涉及到坐标 3.12345 和 3.12345999 时会有很大的不同吗?【参考方案2】:
存储数据本身的最佳方式可能是通过 Core Data 或 sqlite,但要获得最准确的数据,请使用 kCLLocationAccuracyBest。见下文(refreshLoc 是我的 CLLocationManager 变量)。
refreshLoc = [[CLLocationManager alloc] init];
refreshLoc.delegate = self;
refreshLoc.desiredAccuracy = kCLLocationAccuracyBest;
refreshLoc.distanceFilter = kCLDistanceFilterNone;
[refreshLoc startUpdatingLocation];
【讨论】:
感谢squeezemylime,我已经有了准确的位置,我只需要尽可能准确地存储和检索它。 然后设置精度十米并使用 kcldistancefilter = one以上是关于苹果手机;使用 mapkit 处理纬度/经度十进制值的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 CoreLocation/MapKit 查找纬度/经度附近的地址?
在 MapKit / CoreLocation 中计算两个纬度/经度之间的距离
在 Swift 中结合纬度/经度特征(蓝牙 LE)用于 Mapkit 注释
iPhone SDK - MapKit CoreLocation - 根据纬度和经度制作街道地址