You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataTable中存储的多边形数据解析转换为GeoJSON文件

问题原因分析

你当前代码的问题在于对coordinates的赋值逻辑和数据类型不匹配:

  • GeoJSON的Polygon类型要求coordinates字段本身就是三层嵌套数组(结构为[[[lng,lat],[lng,lat],...]],分别对应「多边形环集合-单环坐标序列-单点经纬度」三层结构)
  • 你现有代码写的new [] { (record["Coordinates"]) }会给原有数据额外多嵌套一层数组,导致结构错误;同时如果record["Coordinates"]存的是字符串格式的坐标,还需要先做类型转换。

解决方法

分两种场景处理:

场景1:record["Coordinates"]已经是double[][][]/List<List<List<double>>>类型

直接赋值即可,不需要额外套数组层,修改geometry部分代码即可:

geometry = new
{
    type = "Polygon",
    coordinates = record["Coordinates"]  // 直接赋值,不用包new []
}

场景2:record["Coordinates"]存的是JSON格式的坐标字符串

先将字符串反序列化为符合要求的三维锯齿数组,再赋值:

geometry = new
{
    type = "Polygon",
    coordinates = JsonConvert.DeserializeObject<double[][][]>(Convert.ToString(record["Coordinates"]))
}

修改后的完整函数

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",
                // 这里根据你的实际存储类型二选一即可
                // 情况1:已经是数组类型
                // coordinates = record["Coordinates"]
                // 情况2:是字符串类型
                coordinates = JsonConvert.DeserializeObject<double[][][]>(Convert.ToString(record["Coordinates"]))
            },
        })
    };
    return JsonConvert.SerializeObject(cityData);
}

内容的提问来源于stack exchange,提问作者RAK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:15:04