2016-10-26 259 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讓我可以將它們連接到路徑和公園等,以及任何加息的媒體捕獲。 –