DbGeometry有效吗?

时间:2012-11-05 12:34:28

标签: c# linq asp.net-mvc-4 .net-4.5 entity-framework-5

我是新手。我不知道如何使用SqlSpatialFunction MakeValid。 我有一个DbGeometry,它是一个多边形。这个多边形无效,我想要的 使它有效。

任何人都可以解释如何使用MakeValid方法吗?

MSDN

谢谢! :d

2 个答案:

答案 0 :(得分:5)

关于Pawel所评论的内容,我所做的就是检查它是否有效,然后将其设为有效,如果不是。

DbGeometry myGeometry = DbGeometry.FromText("POLYGON ((10 10, 15 15, 5 15, 10 15, 10 10))");
if(!myGeometry.IsValid)
{
    myGeometry = SqlSpatialFunctions.MakeValid(myGeometry);
}

答案 1 :(得分:0)

您无法在DbGeometry上调用SqlSpatialFunctions.MakeValid,如果这样做,它将引发以下异常:

System.NotSupportedException : This function can only be invoked from LINQ to Entities.

因此,您可以做的是使用其WKT字符串使其有效,然后将该有效字符串转换为如下所示的DBGeometry:


public static DbGeometry MakeValid(DbGeometry geom)
{
     if (geom.IsValid)
          return geom;

     var wkt = SqlGeometry.STGeomFromText(new SqlChars(geom.AsText()), 0).MakeValid().STAsText().ToSqlString().ToString();
     return DbGeometry.FromText(wkt, 0);
}