【问题标题】:Store MKPolygon in Realm database将 MKPolygon 存储在 Realm 数据库中
【发布时间】:2017-05-31 16:06:25
【问题描述】:

我正在用 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 对象并不是一个好主意,因为这意味着创建大量 Point 对象只是为了绘制一个多边形。

谢谢,欢迎提出建议

【问题讨论】:

    标签: json swift mapkit realm geojson


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      相关资源
      最近更新 更多