1

GPS座標の列を含むSQLサーバー2008でデータベースを構築したい-

latitude 

longitude

そして、次のようなクエリを作成したいと思います:

"Give me all rows that are within 5(for example) metres of this coordinate"

C#で可能ですか??

4

3 に答える 3

4

C# は実際には問題ではありません。問題はデータベース自体です。MS SQL Server 2008 以降では、次の記事で説明されているように空間サポートがあります。

http://msdn.microsoft.com/en-us/magazine/dd434647.aspx

空間拡張を使用しない場合は、バウンディング ボックスを自分で手動で計算する必要があります (座標から 5 メートルを超えるポイントが含まれる可能性があります)。次に、ポイントから 5 メートル以内に収まるように結果を制限する必要があります。問題があります。

これは、手動の(つまり、やや面倒な)計算の小さな写真です。

---------------------
|        ^          |
|     +5m lat       |
|                   |
|-5m lon *   +5m lon|
|                   |
|     -5m lat       |
|        v          |
---------------------

( *)内が問題点です。*手動で計算を行う際の問題は、ボックスの角に近いポイントが (おそらく) > 5 m ( ) のポイントから離れていることです。境界円を計算することもできますが、SQL クエリの複雑さが増します。

つまり、要するに、空間サポートを備えた DB が本当に必要なのです。

于 2012-04-19T23:42:13.780 に答える
1

緯度と経度しかない場合は、少し遅くなりますが、次のようなクエリで実行できます。

select latitude, longitude where (latitude - @lat)^2 + (longitude - @long)^2 <= @dist

@lat と @long は座標で、@dist は許容される最大距離です。

編集: Debracey と私は、2 つの手法を組み合わせた方が効果的かもしれないと考えています。したがって、最初にバウンディング ボックスを使用してクエリを実行します。これは非常に簡単な計算です。次に、バウンディング ボックスのテストに合格した (できればはるかに小さい) サンプルを取得し、クエリに対してテストします。

于 2012-04-19T23:53:05.127 に答える