3

当利用 kCLLocationAccuracyHundredMeters 常量时,正在使用什么位置数据以及当操作系统提取数据时该数据存储在哪里?“最后已知位置”曾经存储在 cache.plist 中,但从 iOS 4.2.8 开始不再如此。

我试图更好地了解应用程序如何确定设备的位置。核心位置框架允许调用与位置相关的数据,但隐藏了 API 背后的细节。

4

2 回答 2

0

确定设备位置的不是应用程序,而是设备。(硬件和软件)反过来,设备能够通过核心位置 API 通知应用程序有关设备位置的信息。位置不会自动跟踪,但您可以要求设备进行跟踪(再次通过 API)。

像 kCLLocationAccuracyHundredMeters 这样的常量背后的基本原理是,提高定位精度会消耗越来越多的计算能力。如果您所需要的只是 100 米,那么投资以 10 米的精度找到您的位置是没有意义的。

在内部,有两个数据源用于定位设备: 1. 内置在设备中的 GPS 芯片,能够接收来自地球周围 GPS 卫星的信号,这些卫星发送定时信息。由于信号到达的时间不同,因为它们与设备的距离不同并且光速是有限的,因此可以计算位置。2. 使用具有各自位置的可见 SSID 的数据库,从中可以知道与它们各自位置的接近度。

也就是说,对于作为应用程序开发人员的您来说,相应数据如何在设备内部存储在很大程度上应该是无关紧要的。您只需要知道 API。

于 2012-10-12T15:14:31.077 回答
0

当您将 kCLLocationAccuracyHundredMeters 分配给您的 CLLocationManager 的 desiredAccuracy 属性时,您实际上在做的是向经理建议您希望它报告给您的位置的准确度级别。CLLocationManager 可以是一位绅士,并为您提供所需的准确度,但有时,locationManager 无法为您提供这样的准确度。您需要做的是,在您的委托中,当您收到 CLLocation 对象时,您会查找捕获位置的日期以及水平/垂直精度属性。这将使您能够确定数据的准确程度。

CLLocationManager 的 location 属性将为您提供最后记录的位置,甚至在向其委托报告位置更改之前。

于 2012-10-12T15:22:54.543 回答