我是新手。我不知道如何使用SqlSpatialFunction MakeValid。 我有一个DbGeometry,它是一个多边形。这个多边形无效,我想要的 使它有效。
任何人都可以解释如何使用MakeValid方法吗?
谢谢! :d
答案 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);
}