gpt4 book ai didi

c# - 如何将 DbGeometry 对象解析为 List

转载 作者:行者123 更新时间:2023-11-30 14:29:20 25 4
gpt4 key购买 nike

我正在尝试解析显示为 DbGeometry 的多边形类(从 System.Data.Entity.Spatial )到一些 List 表示,但是失败了。

我试过: - 用 .ToList<>() 方法转换它 - 在 .NET 中使用 JSON 库进行解析,但来自不同网站的示例代码因反序列化而失败 DbGeometry

所以,现在我在我的 Web API 应用程序中将几何图形作为字符串返回:

enter image description here

如果我找不到任何解决方案,为了将它表示为 double 列表,我将不得不在 JavaScript 中手动解析它,我认为这种方式是非常不正确的,必须有一些解决方案。

我正在使用 Entity Framework v.6.1.1,它已经准备好下一个模型:

public partial class Buildings
{
public int id { get; set; }
public Nullable<bool> has_holes { get; set; }
public System.Data.Entity.Spatial.DbGeometry polygon_data { get; set; }
public System.Data.Entity.Spatial.DbGeometry position_wgs { get; set; }
public System.Data.Entity.Spatial.DbGeometry position_mercator { get; set; }
public Nullable<int> height { get; set; }
public string street_name { get; set; }
public System.Data.Entity.Spatial.DbGeometry holes_data { get; set; }
public Nullable<double> angle { get; set; }
}

如果你想看MSSQL CE的表格结构,我已经展示过了。 (这是一个嵌入式数据库,或 LocalDb ,另一个名称)。

所以我想:

  • System.Data.Entity.Spatial.DbGeometry polygon_data
  • System.Data.Entity.Spatial.DbGeometry holes_data

准备好 double 列表,所以我的问题是:How can I parse DbGeometry instance, which holds a collection of points into List<Point>? .

最佳答案

我遇到了类似的问题。我所做的是,创建了将给定几何数据解析为点的扩展方法。 @Erik Philips 也有很好的解决方案。这是我想出的。

public static class ExtensionString
{
private static Dictionary<string, string> _replacements = new Dictionary<string, string>();

static ExtensionString()
{
_replacements["LINESTRING"] = "";
_replacements["CIRCLE"] = "";
_replacements["POLYGON"] = "";
_replacements["POINT"] = "";
_replacements["("] = "";
_replacements[")"] = "";
}

public static List<Point> ParseGeometryData(this string s)
{
var points = new List<Point>();

foreach (string to_replace in _replacements.Keys)
{
s = s.Replace(to_replace, _replacements[to_replace]);
}

string[] pointsArray = s.Split(',');

for (int i = 0; i < pointsArray.Length; i++)
{
double[] coordinates = new double[2];

//gets x and y coordinates split by space, trims whitespace at pos 0, converts to double array
coordinates = Array.ConvertAll(pointsArray[i].Remove(0, 1).Split(null), double.Parse);

points.Add(new Point() { X = coordinates[0], Y = coordinates[1] });
}

return points;
}
}

然后像这样使用它

List<System.Drawing.Point> points = geometryDataStr.ParseGeometryData();

关于c# - 如何将 DbGeometry 对象解析为 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com