2017-01-05 60 views
1

有沒有辦法將我的座標數組輕鬆轉換爲geojson字符串,這樣我就可以輕鬆地將它繪製在mapbox-ios地圖中?將座標數組轉換爲swift 3.0中的geojson字符串

id: 1, lat: 37.54365964, lon: -122.36820328, date: 1483607009.98252 
id: 2, lat: 37.63721702, lon: -122.43994642, date: 1483607387.95026 
id: 3, lat: 37.64117709, lon: -122.44319877, date: 1483607403.98835 
id: 4, lat: 37.64425086, lon: -122.44768593, date: 1483607419.95671 
id: 5, lat: 37.64803999, lon: -122.45107063, date: 1483607435.98718 
id: 6, lat: 37.65210789, lon: -122.45382878, date: 1483607451.98202 
id: 7, lat: 37.65538199, lon: -122.45796869, date: 1483607467.99542 
id: 8, lat: 37.65874435, lon: -122.46226986, date: 1483607483.98868 
id: 9, lat: 37.66271988, lon: -122.46545406, date: 1483607500.00689 
id: 10, lat: 37.66725462, lon: -122.46555909, date: 1483607515.00965 
id: 11, lat: 37.67171694, lon: -122.46680447, date: 1483607530.01121 
id: 12, lat: 37.67577633, lon: -122.46992933, date: 1483607545.96997 
id: 13, lat: 37.68035365, lon: -122.47161149, date: 1483607563.00284 
id: 14, lat: 37.68506394, lon: -122.47132223, date: 1483607579.00677 
id: 15, lat: 37.68971271, lon: -122.47030274, date: 1483607595.01726 
id: 16, lat: 37.69433345, lon: -122.47028874, date: 1483607611.01769 
id: 17, lat: 37.69887099, lon: -122.4712903, date: 1483607627.04018 
id: 18, lat: 37.70344977, lon: -122.47131242, date: 1483607642.97182 
id: 19, lat: 37.7078706, lon: -122.46905887, date: 1483607659.93988 
id: 20, lat: 37.71039615, lon: -122.46428839, date: 1483607675.97476 

下面是mapbox-IOS繪製以GeoJSON的樣本圖像: mapbox-ios geojson line

以下是我把緯度經度數組

  var coordinates = [Any]() 

     for location in try db.prepare(locations) { 
      print("id: \(location[id]), lat: \(location[lat]), lon: \(location[lon]), date: \(location[date])") 

      var waypoints = [Any]() 
      waypoints.append("\(location[lat])") 
      waypoints.append("\(location[lon])") 
      coordinates.append(waypoints) 
     } 

這是示例代碼格式,我想要實現。

func convertLocationArrayToGeoJson(locations: [Any],_:()) -> String { 

    // convert the array of lat lon here to geojson string 

    return "geojson string" 
} 

輸出的結果應該是這樣的:

所有的
{ 
"type": "FeatureCollection", 
"features": [{ 
    "type": "Feature", 
    "properties": { 
     "name": "geojson-1" 
    }, 
    "geometry": { 
     "type": "LineString", 
     "coordinates": [ 
      [ 
       longitude1-value, 
       latitude-value1 
      ], 
      [ 
       longitude2-value, 
       latitude2-value 
      ] 

     ] 
    } 
}] 
} 
+0

您可以顯示您的自定義班級結構。 –

+0

@ nirav-d,我用代碼格式和預期結果更新了問題。你能幫忙嗎? –

+0

我在說你需要告訴我們你是如何在數組中存儲這個lat long值的? –

回答

2

首先改變你的coordinates數組創建這樣並附加longlat作爲要在該格式JSON

var coordinates = [Any]() 
for location in try db.prepare(locations) { 

    var waypoints = [Any]() 
    waypoints.append("\(location[lon])") 
    waypoints.append("\(location[lat])") 
    coordinates.append(waypoints) 
} 

現在創建像這樣的POST json字典。

let jsonDic: [String: Any] = [ 
           "type": "FeatureCollection", 
           "features": [ 
             [ 
              "type": "Feature", 
              "properties": ["name": "geojson-1"], 
              "geometry": [ 
               "type": "LineString", 
               "coordinates": coordinate 
              ] 
             ] 
            ] 
           ] 

現在,如果想JSON數據或字符串比你可以使用JSONSerialization.data(withJSONObject:options:

if let data = try? JSONSerialization.data(withJSONObject: jsonDic, options: .prettyPrinted) { 
    //For JSON String 
    let jsonStr = String(bytes: data, encoding: .utf8) 
} 
+0

感謝它的工作! –

+0

@MarkAngeloHernandez歡迎隊友:) –