我正在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。
谢谢,欢迎提出任何建议
答案 0 :(得分:0)
Realm不支持存储MKPolygon
等,您可以在docs中找到支持的属性类型列表。
我认为你在这里有两个选择:
创建一个Point
对象并将其存储为多对多关系,这绝对不是一个坏主意:)
将坐标序列化为String
或Data
对象并将其存储在数据库中,就像您现在一样。