【问题标题】:DbGeometry makevalid?DbGeometry 是否有效?
【发布时间】:2012-11-05 12:34:28
【问题描述】:

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

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

MSDN

【问题讨论】:

  • 在查询中您将使用SqlSpatialFunctions.MakeValid(dbGeometryValue)。如果这对您不起作用,请更具体地说明您想要实现的目标并展示您的尝试。
  • 看到这个问题最后的答案可能对你有帮助stackoverflow.com/questions/16640565/…

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你不能在 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);
    }
    
    

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 2017-06-20
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多