DbGeometry makevalid?

问题描述 投票:6回答:2

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

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

MSDN

谢谢! :D

c# linq asp.net-mvc-4 .net-4.5 entity-framework-5
2个回答
5
投票

脱离Pawel的评论,我要做的就是检查它是否有效,如果无效,则使其有效。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.