2017-01-16 122 views
0

我正在Swift中开发一个iOS应用程序,它从远程HTTP服务器获取一些数据并在地图上显示一些功能。由于这些功能不会频繁更改,我认为保留数据的本地缓存(即使在离线情况下也可以显示)并且只在后台更新它是个不错的主意。 我正在使用MapKit来显示地图,并将数据提取为JSON。将MKPolygon存储在Realm数据库中

我以为这个本地缓存使用Realm(如果他们更适合这种情况,请随时提出任何其他解决方案和/或方法)。


我从服务器获取的数据是GeoJSON的和Feature几何形状看起来像这样:

{ 
    "type" : "Feature", 
    "geometry" : 
    { 
    "type" : "Polygon", 
    "coordinates" : 
    [ 
     [ 
     [15.7008834173655, 34.4622385876223], 
     [15.7453028366596, 34.4356537554745], 
     [15.7759359455856, 34.3953785537464], 
     //.... 
     ] 
    ] 
    } 
{ 

Area界多边形通常有几百点。


我需要缓存的模型对象可能是这个样子:

class Area: Object { 
    dynamic var name: String = "" 
    dynamic var description: String? 

    var boundary: MKPolygon! //as a MKPolygon to be drawn on map 
    //OR: 
    var boundary: [CLLocationCoordinate2D] = [] //as an array of coordinate structs 
    //OR: 
    var boundary: [[Double]] = [] //as a 2D array of coordinates (as in geoJSON) 


    //OR (only working solution): 
    var geoJSON: String = "" //store the geoJSON data directly as String 

} 

boundary财产将被用来绘制Area地图作为MKPolygon上。


的显然只以上的存储GeoJSON的数据的例子可与境界,但我想知道什么“正确的方式去做”是。我喜欢Realm易用性,但我认为将所有内容存储为Realm Objects并不是一个好主意,因为这意味着要创建大量的Point对象来绘制单个多边形。

谢谢,任何建议,欢迎

回答

0

境界不支持存储MKPolygon等,你可以在docs找到支持的属性类型的列表。

我认为你有两个选择,你说:

  1. 创建Point对象并将其存储为一对多的关系,这绝对不是一个坏主意:)

  2. 序列化坐标到StringData对象并将其存储在数据库中,就像您现在这样做。