我有一個資料表,其中包含與城市相關的資訊以及存盤為多邊形的邊界。我撰寫了以下函式將資料轉換為 JSON 檔案。
public static string DataTableToGeoJSONString(DataTable dataTable)
{
var cityData = new
{
type = "FeatureCollection",
features = dataTable.AsEnumerable().Select(record => new {
type = "Feature",
id = Convert.ToString(record["Id"]),
properties = new
{
name = Convert.ToString(record["Name"]),
density = Convert.ToInt32(record["NumCri"])
},
geometry = new
{
type = "Polygon",
coordinates = new [] {
(record["Coordinates"])
}
},
})
};
return JsonConvert.SerializeObject(cityData);
}
我知道多邊形是一個陣列陣列,因此以下代碼陳述句不起作用
type = "Polygon",
coordinates = new [] {
(record["Coordinates"])
關于如何將陣列陣列存盤到坐標變數中的任何建議?請注意,record["Coordinates"] 以以下格式存盤坐標資訊:
[[[23.444,44.444],[24.444,45.222],...]]]
uj5u.com熱心網友回復:
看看這個例子。它執行以下操作:
- 將文字決議為陣列
- 從陣列中獲取第一項并將該項從通用標記轉換為陣列
- 回圈第 2 步中陣列中的每一項
- 將當前迭代的項從通用標記轉換為陣列
- 創建一個新的 PointF 并將其添加到基于步驟 4 中當前迭代陣列的值的集合中
Private Function ParseCoordinates(json As String) As IEnumerable(Of PointF)
Dim outerArray As JArray = JArray.Parse(json)
Dim innerArray As JArray = DirectCast(outerArray.Item(0), JArray)
Dim points As New List(Of PointF)()
For Each item As JToken In innerArray
Dim itemArray As JArray = DirectCast(item, JArray)
points.Add(New PointF(itemArray.Item(0).Value(Of Single)(), itemArray.Item(1).Value(Of Single)()))
Next
Return points
End Function
小提琴:https : //dotnetfiddle.net/mAJgfz
請記住,這假設您的資料是完美的。我強烈建議您花時間設定一些條件陳述句以確保:
- 所述outerArray變數可以被決議到一個JArray
- 在宣告innerArray之前,outerArray中有超過0個專案
- 該innerArray變數可以被轉換為JArray
- 該itemArray變數可以被轉換為JArray
- 在將itemArray變數設定為 PointF 的 X/Y 值之前,itemArray變數中有超過 1 個專案
- itemArray 的值可以轉換為 Single
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330000.html
