有没有简单的方法在SqlGeometry和DbGeometry之间进行转换? 我正在使用一个流行的sql空间助手库,并且那里的所有函数都需要SqlGeometry。但是当我对ESRI ArcSDE要素类使用Entity Framework时,Shape字段将作为DbGeometry返回。 我不能使用该DbGeometry类型调用我想要的任何方法(例如LocateAlongGeom)。 也许有一种方法可以将它序列化为二进制或文本,然后将其作为SqlGeometry读回来?
答案 0 :(得分:10)
//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);
答案 1 :(得分:2)
管理多种空间类型的简单方法是通过扩展方法,如下所示:(使用来自@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();