35

Core Location、MapKit、および Core Data フレームワークを使用して、場所を保存し、後で地図上の場所を取得しようとしています。

私が行ったことは、POI という名前のエンティティを作成し、緯度 (double 型)、経度 (double 型) などのプロパティをいくつか追加しただけです。

簡単に言えば、私のアプリは POI を 2 つの NSNumbers で保存します。(緯度と経度)しかし、それよりもCLLocationを保存するためのよりスマートな方法があるに違いないと感じています。

乾杯。

4

5 に答える 5

36

あなたがしていることは問題ありません。Core Data に緯度と経度を double として保存する必要があります。再度情報を取得する必要がある場合は、Core Data から double を取得し、 のCLLocationCoordinate2Dような関数で構造体を構築しますCLLocationCoordinate2DMake。場所を保存する方法は組み込まれていないため、緯度と経度のコンポーネントを保存しても問題ありません。

緯度または経度で数学演算を行っていない場合 (境界ボックスの検索など)、それらを文字列として保存できます。float と double は値がわずかに変わる可能性があり、比較操作が失敗します。

于 2010-09-26T09:57:13.307 に答える
29

CLLocation は NSCoding プロトコルを実装しているため、それらを変換可能な属性として Core Data に格納できます。デフォルトの NSKeyedUnarchiveFromData 値トランスフォーマーを使用できます。

CCLocation オブジェクトをマネージド オブジェクト属性に渡すだけで、それがデータにシリアル化され、SQL ストアに BLOB として格納されます。ロケーション オブジェクトを戻す必要がある場合は、プロセスが自動的に逆になり、完全に入力された CCLocation オブジェクトが返されます。

それがあなたが望むものを手に入れる最も簡単な方法かもしれません。

于 2010-09-26T14:55:53.783 に答える
19

それを保存する「最良の」方法は、それをどうしたいかによって異なります。

  • 「同じ」CLLocation が必要な場合は、シリアル化します。NSKeyedUnarchiveFromData は問題ありません。
  • 緯度と経度だけで検索したい場合は、それらを double として保存します (「インデックス付き」チェックボックスをオンにします)。

手動で保存/復元できる追加のプロパティがたくさんあります (altitude、 horizo​​ntalAccuracy、verticalAccuracy、timestamp)。あなたができないことがいくつかあります(速度、見出し)。CLLocation は適切な init-method を提供せず、プロパティは読み取り専用です。

追加のプロパティはすべて、トラックを録音する場合に役立ちます。山岳地帯で POI を記録している場合 (「まだ 100 m 登る必要があります」)、高度は便利です。水平/垂直精度は、POI の大きさを表すために使用される場合があります (たとえば、都市の「水平精度」は数 km で、大きな円として表示される場合があります)。

于 2010-09-26T15:43:46.717 に答える
1

Core Data 属性タイプを に設定するだけで、これを非常に簡単に行うことができますTransformable値トランスフォーマー名を空白のままにした場合のデフォルトのトランスフォーマーはNSKeyedArchiver、NSURL や CLLocation などのほとんどの Foundation タイプで機能します。

于 2015-02-03T16:10:53.470 に答える
0

緯度と経度のポイントを格納するために NSNumber を使用する必要はありません。代わりに、CLLocation を直接コア データに格納できます。

CLLocation ごとにエンティティを設定します。ロケーション ポイントを使用しているエンティティからの関係が多すぎます。これを LocationPoint と呼びましょう:

class LocationPoint: NSManagedObject {

@NSManaged var game: NSNumber
@NSManaged var time: NSDate
@NSManaged var location: AnyObject

}

次に、Xcode データ モデルでlocationプロパティを変換可能に設定します。それでおしまい!

Objective-c では、実際にはこの LocationPoint プロパティを CLLocation としてエラーなしで宣言できます。

@property (nonatomic, strong) CLLocation *location

詳細はこちら

于 2015-10-16T21:35:07.587 に答える