有没有一种简单的方法可以在 SqlGeometry 和 DbGeometry 之间进行转换?我正在使用一个流行的 sql 空间助手库,其中的所有函数都需要 SqlGeometry。但是,当我针对 ESRI ArcSDE 要素类使用实体框架时,Shape 字段将作为 DbGeometry 返回。我无法使用该 DbGeometry 类型调用任何我想调用的方法(例如 LocateAlongGeom)。也许有一种方法可以将其序列化为二进制或文本,然后将其作为 SqlGeometry 读回?
问问题
4317 次
3 回答
12
//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);
于 2013-07-14T17:28:35.917 回答
3
管理多种空间类型的一种简单方法是通过扩展方法,如下所示:(使用来自@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();
于 2015-04-13T17:36:32.000 回答
0
实体框架不支持 CURVES (CIRCLE) -> 更改为行:
return DbGeometry.FromBinary(sqlGeometry.**STCurveToLine()**.STAsBinary().Buffer);
于 2022-01-09T13:35:06.480 回答