google-code-prettify

星期五, 1月 16, 2015

[DotNet] Convert between SqlGeometry and DbGeometry

 要怎麼轉呢?跟神魔一樣有自動轉珠讓他自己轉轉轉就太好了...(期待)

SqlGeometry DbGeometry 兩者的差異在哪裡?
命名空間: Microsoft.SqlServer.Types 之下的類別 SqlGeometry
而 DbGeometry 則有兩個命名空間
命名空間1:System.Data.Spatial 之下的類別 DbGeometry
命名空間2:System.Data.Entity.Spatial  之下的類別 DbGeometry
不管事哪個命名空間 都有要用的 FromBinary(Byte[]) 、AsBinary 方法!
(擇一使用,看哪個比較適合)



//Convert from SqlGeometry to DbGeometry
SqlGeometry sqlGeo = ...
DbGeometry dbGeo = DbGeometry.FromBinary(sqlGeo.STAsBinary().Buffer);

上面的作法是把 SqlGeometrySTAsBinary() 方法,轉成開放式地理空間協會 (Open Geospatial Consortium,OGC) 已知的二進位 (well-known binary,WKB) 結果。
再利用 命名空間: System 之下的類別 Buffer 轉成陣列(是這樣說嗎?)
透過 DbGeometry 類別  FromBinary 方法再把它轉成 DbGeometry 物件
//Convert from DBGeometry to SqlGeometry
SqlGeometry sqlGeo2 = SqlGeometry.STGeomFromWKB(new SqlBytes(dbGeo.AsBinary()), 0);
上面的作法是把 DbGeometry 用 AsBinary 方法,轉成 Binary 結果。
再利用 命名空間: System.Data.SqlTypes 之下的類別 SqlBytes 轉成 WKB
透過 SqlGeometry  類別  STGeomFromWKB 方法再把它轉成 SqlGeometry  物件


沒有留言 :

張貼留言