7

私は、あるインスタンスに POINT を格納し、別のインスタンスに POLYGON を格納するためのモデルの一部として空間データ型 DbGeography を使用して、新しい Entity-Framework 5 を使用しています。

POLYGON の値を設定すると、すべてエラーなしで保存されますが、これはマップ上で時計回りの順序で Polygon を描画した場合にのみ当てはまります。POLGON を反時計回りに描画すると、データが無効な地理タイプであることを示す SQL レベルのエラーが表示されます。

この問題について独自の調査を行った後、地理データ型がポリゴン リングの向きに関して非常に厳密であることが原因のようです。最も一般的な解決策は、Polygon をジオメトリとして作成し、それを geography タイプに変換することです。

SQLに送信される前にデータに適用できるC#のソリューションを探しています。基本的に、座標の配列のリングの向きを自動修正するもの。

エラーをキャッチしてから、配列を逆にして文字列を再構築しようとしました。これは場合によっては機能しますが、第一に信頼性が低く、第二にエラーをキャッチするとパフォーマンスが大幅に低下します。

ありがとうクリス

4

4 に答える 4

3

こんにちは私は同じ問題を抱えていて、それを使用して解決しました

var sqlGeography = SqlGeography.STGeomFromText().MakeValid()
var invertedSqlGeography = sqlGeography.ReorientObject();

詳しくはこちら

于 2013-03-18T02:18:33.630 に答える
2

私は自分で注文の問題を抱えており、SQLSpatialTools の MakeValidGeographyFromText 関数を使用して解決しました。SP で次のように使用しました。

SET @ge = dbo.MakeValidGeographyFromText(
    'POLYGON((' + @pois + '))', 4326);

@pois は有効な形式の座標を含む文字列ですが、回転が間違っています。

EF-5 との統合がどれほど簡単かはわかりませんが、次の 2 つの方法があります。

  1. 正しいポリゴンで EF を呼び出す前に、C# から関数を直接使用します。
  2. SQL サーバーに sqlspatialtools をインストールし、そこで処理を行います。
于 2012-11-21T11:39:59.643 に答える
0

ここで同じ問題が発生します。Bing maps v7 とそのシェイプ ツールキットを使用して、ここにあるポリゴンを描画します

于 2012-10-09T00:20:59.563 に答える