我有一个'CLLocationCoordinate2D'类型的数组。例如, 这是我的数据的样子:
[__ C.CLLocationCoordinate2D(北纬:60.24971706534604,经度:13.748807609081268),__ C.CLLocationCoordinate2D(北纬:60.2463096103141,经度:14.025525748729706),__ C.CLLocationCoordinate2D(北纬:60.190718087002963,经度:13.781766593456268)]
如何将其保存到Core Data?
答案 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)
处理此问题的两种方法:
我更喜欢第一种方式,因为它可以让您在调试时阅读对象并在需要时进行打印。