8

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

谁能解释如何使用 MakeValid 方法?

MSDN

4

2 回答 2

7

离开 Pawel 评论的内容,我所做的就是检查它是否有效,如果无效则使其有效。

DbGeometry myGeometry = DbGeometry.FromText("POLYGON ((10 10, 15 15, 5 15, 10 15, 10 10))");
if(!myGeometry.IsValid)
{
    myGeometry = SqlSpatialFunctions.MakeValid(myGeometry);
}
于 2014-04-21T15:58:42.520 回答
2

您不能调用SqlSpatialFunctions.MakeValidDbGeometry,如果这样做,它将引发以下异常:

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);
}

于 2019-10-09T10:36:42.617 回答