有没有一种在SqlGeometry和DbGeometry之间进行转换的简单方法?我使用的是一个流行的sql空间助手库,其中的所有函数都不包括SqlGeometry。但是,当我对ESRI ArcSDE要素类使用实体框架时,Shape字段将作为DbGeometry返回。我不能用那个DbGeometry类型调用任何我想调用的方法(比如LocateAlongGeom)。也许有一种方法可以将其序列化为二进制或文本,然后将其作为SqlGeometry读回?
发布于 2013-07-15 01:28:36
//Convert from SqlGeometry to DbGeometry
SqlGeometry sqlGeo = ...
DbGeometry dbGeo = DbGeometry.FromBinary(sqlGeo.STAsBinary().Buffer);
//Convert from DBGeometry to SqlGeometry
SqlGeometry sqlGeo2 = SqlGeometry.STGeomFromWKB(new SqlBytes(dbGeo.AsBinary()), 0);发布于 2015-04-14 01:36:32
管理多种空间类型的一种简单方法是通过扩展方法,例如:(使用来自@BizarroDavid的略微修改过的代码示例版本)
public static class GeometryExtensions
{
public static DbGeometry ToDbGeometry(this SqlGeometry sqlGeometry)
{
return DbGeometry.FromBinary(sqlGeometry.STAsBinary().Buffer);
}
public static SqlGeometry ToSqlGeometry(this DbGeometry dbGeometry)
{
return SqlGeometry.STGeomFromWKB(new SqlBytes(dbGeometry.AsBinary()), dbGeometry.CoordinateSystemId);
}
}一旦你实现了它们,你就可以像这样使用它们...
DbGeometry anyDbGeometry;
SqlGeometry anySqlGeometry;
//Convert to DbGeometry
anyDbGeometry = anySqlGeometry.ToDbGeometry();
//Convert to SqlGeometry
anySqlGeometry = anyDbGeometry.ToSqlGeometry();发布于 2022-01-09 13:35:06
实体框架不支持曲线(圆) ->更改为直线:
return DbGeometry.FromBinary(sqlGeometry.**STCurveToLine()**.STAsBinary().Buffer);https://stackoverflow.com/questions/15485945
复制相似问题