2017-01-05 10 views
1

mapbox-iosマップに簡単にプロットできるように、座標配列をgeojson文字列に簡単に変換する方法はありますか?座標アレイをswiftのgeojson文字列に変換する3.0

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

このlong long値をどのように配列に格納したかを私たちに示す必要があると言いますか? –

答えて

2

まず、このようなあなたのcoordinatesアレイの作成を変更し、あなたがその形式でJSONをしたいのようlong最初にしlatを追加します。

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のような辞書を作成してください。あなたがJSONSerialization.data(withJSONObject:options:を使用することができるよりも

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

は今JSONデータや文字列をしたい場合。

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

ありがとうございました! –

+0

@MarkAngeloHernandezようこそメイト:) –

関連する問題