将MKPolygon存储在Realm数据库中

时间:2017-01-16 18:27:42

标签: json swift mapkit realm geojson

我正在Swift中开发一个iOS应用程序,它从远程HTTP服务器获取一些数据并在地图上显示一些功能。由于这些功能不经常更改,我认为保留数据的本地缓存(即使在离线条件下也可以显示)并且只在后台更新它是个好主意。 我正在使用MapKit显示地图,数据被提取为JSON。

我认为将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的易用性,但我不认为将所有内容存储为Realm Objects是个好主意,因为这意味着创建大量的Point对象只是为了绘制一个Polygon。

谢谢,欢迎提出任何建议

1 个答案:

答案 0 :(得分:0)

Realm不支持存储MKPolygon等,您可以在docs中找到支持的属性类型列表。

我认为你在这里有两个选择:

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

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