18

多分私は何かが足りない。「地理」データ型のSQLサーバー列があります。

C# コードで DbGeography 型を使用したいと考えています。SQLの地理からdbgeographyにキャストまたは変換する方法はありますか?

4

6 に答える 6

29

返信が遅くなり申し訳ありませんが、何か他のものを検索しているときにこれを見つけました。

次の操作を行うだけです。

SqlGeography theGeography;
int srid = 4326; // or alternative

DbGeography newGeography = DbGeography.FromText(theGeography.ToString(), srid);

逆にするには:

DbGeography theGeography;
SqlGeography newGeography = SqlGeography.Parse(theGeography.AsText()).MakeValid();

それが役立つことを願っています!

于 2013-04-18T15:30:01.170 に答える
10

パフォーマンスが重要な場合は、well-known テキストの代わりに well-known バイナリを使用する必要があります。

var newGeography = DbGeography.FromBinary(theGeography.STAsBinary().Value);

それが重要な場合は、SRID を使用したオーバーロードがあります。1,000 個のかなり複雑なポリゴンを使用した単純なテストでは、バイナリ ベースのアプローチはテキスト ベースのアプローチよりも 4 倍高速です。

* Binary-based conversion
Run 1: 1948
Run 2: 1944
Run 3: 1959
Run 4: 1979
Run 5: 1988
Average: 1963.6

* Text-based conversion
Run 1: 8527
Run 2: 8553
Run 3: 8596
Run 4: 8535
Run 5: 8496
Average: 8541.4
于 2015-03-22T22:31:03.983 に答える
1

上記のように、アセンブリへの参照を追加する必要があります。次の投稿は、リンク、リンク2 に役立つ場合があります。

于 2014-08-25T19:33:40.340 に答える
1

EF6 を実行していない場合、提供されたソリューションは問題ないようです。初期のバージョンでは問題ありませんが、EF6 では、このアセンブリを参照するべきではありません。それはEFを少し狂わせます。

于 2014-05-22T14:29:49.337 に答える