9

SqlGeometryとDbGeometryの間で変換する簡単な方法はありますか?私は人気のあるSQL空間ヘルパーライブラリを使用しており、そこにあるすべての関数はSqlGeometryを期待しています。しかし、ESRI ArcSDEフィーチャクラスに対してEntityFrameworkを使用すると、ShapeフィールドがDbGeometryとして返されます。そのDbGeometryタイプで、必要なメソッド(LocateAlongGeomなど)を呼び出すことができません。たぶん、それをバイナリまたはテキストとしてシリアル化し、それをSqlGeometryとして読み戻す方法はありますか?

4

3 に答える 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 に答える