2017-01-16 173 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對象並將其存儲在數據庫中,就像您現在這樣做。