GPS座標の列を含むSQLサーバー2008でデータベースを構築したい-
latitude
と
longitude
そして、次のようなクエリを作成したいと思います:
"Give me all rows that are within 5(for example) metres of this coordinate"
C#で可能ですか??
GPS座標の列を含むSQLサーバー2008でデータベースを構築したい-
latitude
と
longitude
そして、次のようなクエリを作成したいと思います:
"Give me all rows that are within 5(for example) metres of this coordinate"
C#で可能ですか??
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 が本当に必要なのです。
緯度と経度しかない場合は、少し遅くなりますが、次のようなクエリで実行できます。
select latitude, longitude where (latitude - @lat)^2 + (longitude - @long)^2 <= @dist
@lat と @long は座標で、@dist は許容される最大距離です。
編集: Debracey と私は、2 つの手法を組み合わせた方が効果的かもしれないと考えています。したがって、最初にバウンディング ボックスを使用してクエリを実行します。これは非常に簡単な計算です。次に、バウンディング ボックスのテストに合格した (できればはるかに小さい) サンプルを取得し、クエリに対してテストします。