SqlGeometryとDbGeometryの間で変換する簡単な方法はありますか?私は人気のあるSQL空間ヘルパーライブラリを使用しており、そこにあるすべての関数はSqlGeometryを期待しています。しかし、ESRI ArcSDEフィーチャクラスに対してEntityFrameworkを使用すると、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
Entity FrameworkはCURVES(CIRCLE)->行の変更をサポートしていません:
return DbGeometry.FromBinary(sqlGeometry.**STCurveToLine()**.STAsBinary().Buffer);
于 2022-01-09T13:35:06.480 に答える