我是新来的。我不知道如何使用SqlSpatialFunction MakeValid。我有一个多边形的DbGeometry。这个多边形无效,我想使其有效。
任何人都可以解释如何使用MakeValid方法吗?
谢谢! :D
脱离Pawel的评论,我要做的就是检查它是否有效,如果无效,则使其有效。
DbGeometry myGeometry = DbGeometry.FromText("POLYGON ((10 10, 15 15, 5 15, 10 15, 10 10))");
if(!myGeometry.IsValid)
{
myGeometry = SqlSpatialFunctions.MakeValid(myGeometry);
}
您无法在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);
}