2016-10-26 211 views
0

我正在做一些使用核心位置的研究。 我想通过核心数据保存位置信息。 到目前为止,我似乎可以简单地保存一个CLLocation信息(这实质上是最小的位置信息)。 此CLLocation是否需要稍后恢复数据并确定用户是否在/位于特定位置?将核心位置数据保存到核心数据?

回答

1

由于CLLocation符合NSCoding,它可能就像使用“可转换”类型创建核心数据属性一样简单。然后,您可以将CLLocation对象分配给该属性并将其读回。

但是,您将无法使用此值过滤或排序数据 - 例如,如果您想查找具有特定区域中位置的所有实例。为此,您需要添加属性来代表CLLocation纬度和经度值,与CLLocation本身分开。您可能还需要高度和/或准确度信息,具体取决于您希望执行何种提取。

1

我这样做是通过将纬度,经度和高程信息保存为CoreData数据库中的航路点记录中的Doubles(NSNumbers),然后使用它们在我从数据库加载它们时创建CLLocationCoordinate2D点。

您将需要进行一点过滤以确认您有一个好点(水平精度低于阈值 - 高于0,因为他们可以用负值标记坏点)。我也看到了无序数据,这些数据有问题,所以我会跟踪最新加载的值的时间戳,并丢弃任何具有该值之前的时间戳的新点。

在处理背景模式和LocationManager设置方面有一些问题需要解决,但是将位置捕获到CoreData中的结构可以很好地工作 - 我已经在数小时的过程中捕获了超过20,000个航点的航迹,而且没有任何问题。

+0

什么是航点记录?这是您创建的自定义对象吗? – AlvinfromDiaspar

+0

是的,作为远足应用程序的一部分。它与GPS系统中定义的航点相似,并增加了一些信息。 CoreData让我可以将它们连接到路径和公园等,以及任何加息的媒体捕获。 –