2017-04-08 8 views
0

私は 'CLLocationCoordinate2D'型の配列を持っています。CLLocationCoordiante2Dアレイをコアデータに保存しますか?

[__C.CLLocationCoordinate2D(緯度:60.24971706534604、経度:13.748807609081268)、__C.CLLocationCoordinate2D(緯度:60.2463096103141、経度:14.025525748729706)、__C.CLLocationCoordinate2D(緯度:60.190718087002963例えば、 これは私のデータがどのように見えるかであります、経度:13.781766593456268)]

どうすればこのデータをコアデータに保存できますか?

+0

[コアデータに特定のフォーマット配列を保存するにはどうすればいいですか?](http://stackoverflow.com/questions/43293084/how-can-i-store-a-specific-format-array-in -core-data) – pbasdf

+0

これは実際に私のスレッドですが、今回は具体的に尋ねています。 – konyv12

答えて

1

ダブルというように、オブジェクトモデルに座標を保存することをお勧めします。あなたは座標必要がある場合、そこから、あなたはCLLocationオブジェクトを返しますXとY座標を含むあなたのNSManagedObjectための拡張方法を作成することができます。

func location() -> CLLocation { 
    return CLLocation(latitude: self.coordinateX, longitude: self.coordinateY) 
} 
+0

でも、CLLocation型で、Doubleとして保存することはできません。 – konyv12

+0

CLLocationObjectをNSManagedObjectに保存することはできませんが、管理オブジェクトにDoubleを添付することはできます。つまり、CLLocationに必要なパラメータを管理対象オブジェクトに保存するだけです。これはDoubleです。次に、CLLocationが必要な場合は、 'myManagedObject.location()'を使用して – Adrian

+0

をお世話になります。ありがとうございました。 – konyv12

1

あなたはパス機能のために、これらの座標を(使用している場合パス内の座標)、配列を文字列でエンコードすることは本当に良い方法です。これは自分自身を実装するには複雑すぎるかもしれませんが、私はGoogleのEncoded Polylinesを見てみることをお勧めします。

あなたは座標の配列(緯度/経度)を持ち、配列全体を1つの文字列に変換するという考えがあります。

プロジェクトでGoogleMapsを使用している場合は、これが最も簡単です。あなたはこのようなGMSPath -objectを作成しましょう:

let path = GMSMutablePath() 
path.add(CLLocationCoordinate2D) 
path.add(CLLocationCoordinate2D) 
path.add(CLLocationCoordinate2D) 

そして、単にパスの文字列表現を取得するためにpath.encodedPath()を行います。あなたは、データベースにこの文字列を格納し、それらを再度抽出したい場合、あなたは、単に

let path = GMSPath(fromEncodedPath: encodedString) 
を言うことができ

_p~iF~ps|U_ulLnnqC_mqNvxq`@ 

(38.5, -120.2), (40.7, -120.95), (43.252, -126.453)この単一の文字列になっています、これらの点は、その例で

これは、DBに格納したり、APIを送信したりするのには本当に便利です。 もう一度、それはあなたの使用に適していない可能性があります。これを処理する

+0

素晴らしい代替品。 – Adrian

0

二つの方法:

  1. 最良の方法は、NSEncoderメカニズムを使用して、コア・データ項目としてオブジェクトを格納することです。
  2. 別の方法として、Coredataパラメータデータ型を変換可能なものとして使用し、そのオブジェクトをCoreLocationとして直接格納する方法があります。できます。

最初の方法は、オブジェクトを読み取り、デバッグ中に必要な場所で印刷できるためです。

関連する問題