将CLLocationCoordiante2D数组保存到Core Data?

时间:2017-04-08 14:11:20

标签: ios swift xcode core-data

我有一个'CLLocationCoordinate2D'类型的数组。例如,  这是我的数据的样子:

[__ C.CLLocationCoordinate2D(北纬:60.24971706534604,经度:13.748807609081268),__ C.CLLocationCoordinate2D(北纬:60.2463096103141,经度:14.025525748729706),__ C.CLLocationCoordinate2D(北纬:60.190718087002963,经度:13.781766593456268)]

如何将其保存到Core Data?

3 个答案:

答案 0 :(得分:2)

如果您将这些坐标用于路径目的(路径中的坐标),则对数组进行字符串编码可能是一个非常好的方法。这可能过于复杂而无法实现,但我建议您查看Google的Encoded Polylines

这个想法是你有一个坐标数组(lat / long),它将整个数组转换成一个单独的字符串。

如果您在项目中使用GoogleMaps,那么到目前为止这将是最简单的。我们假设您创建一个GMSPath - 对象,如下所示:

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

然后只需执行path.encodedPath()即可获得路径的字符串表示形式。

在他们的示例中,这些点:(38.5, -120.2), (40.7, -120.95), (43.252, -126.453)变成了这个单字符串:

_p~iF~ps|U_ulLnnqC_mqNvxq`@

如果您将此字符串存储在数据库中,并希望再次提取它们,则可以简单地说

let path = GMSPath(fromEncodedPath: encodedString)

这非常适合存储在DB中或通过API发送。 然后,它可能不适合您的使用。

答案 1 :(得分:1)

您需要在对象模型中将坐标保存为 Double 。从那里,当您需要坐标时,您可以在NSManagedObject的扩展中为包含返回CLLocation对象的X和Y坐标创建一个方法:

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

答案 2 :(得分:0)

处理此问题的两种方法:

  1. 最好的方法是使用NSEncoder机制,然后将对象存储为Core数据项。
  2. 另一种方法是使用Coredata参数数据类型作为可转换的,并将对象直接存储为CoreLocation。它有效。
  3. 我更喜欢第一种方式,因为它可以让您在调试时阅读对象并在需要时进行打印。