2012-04-30 24 views
3

ジオタグの値(経度、緯度、値)を持つSQLテーブルがあります。テーブルはすぐに蓄積され、数千のエントリがあります。したがって、一部の領域の値をテーブルに問い合わせると、非常に大きなデータセットが返されます。ロケーションの近接に基づいて平均値を計算する方法

私は一つの値に近い場所に近接して平均値への道を知りたいのですが、ここの図は、次のとおりです。

表:

Long   lat   value 
10.123001  53.567001  10 
10.123002  53.567002  12 
10.123003  53.567003  18 
10.124003  53.568003  13 

は私の現在の場所が10.123004、53.567004であると言うことができます。私が近くの値を照会している場合は、値10、12、18、13の4つのローを取得します。これは、データセットが比較的小さい場合に機能します。データが大きい場合は、私は丸みを帯びた場所のためのSQLを照会する(10.123、53.567)を好きと

Long   lat   value 
10.123  53.567  10 (this is the average of 10, 12, and 18) 
10.124  53.568  13 

のようなものを返すために、SQLが必要になり、このことは可能ですか?場所に基づいて大きなデータセットを平均化する方法は?

最初はSQLデータベースが適切ですか?

+1

「丸い場所のすべてのデータの平均」とは何を意味するのかわかりません。 –

+0

私は質問を書き直しました。以前よりもはるかに明白であることを願っています – Future2020

+0

平均10,12,18 40/3、約13.3である。これはタイプミスですか、別の意味ですか? –

答えて

2

GROUP BY、列を丸め、およびAVG集約関数は、このために正常に動作する必要があります:

SELECT ROUND(Long, 3) Long, 
     ROUND(Lat, 3) Lat, 
     AVG(value) 
FROM Table 
GROUP BY ROUND(Long, 3), ROUND(Lat, 3) 

必要に応じてフィルタリングするWHERE句を追加します。

+0

ありがとうございますこれが動作し、問題を解決します – Future2020

1

ここでは始まりかもしれない荒い擬似コードがあります。プロジェクトに使用しているSQLの方言でラウンド関数の適切な精度引数を指定する必要があるので、Roundの2番目の引数として指定する3は、数値が丸められる精度の小数点以下の桁数ですあなたの元の投稿に示されているように。

選択ラウンドラウンドすることにより(緯度、3)、ラウンド(ロング、3)、平均(値) グループ(緯度、3)、ラウンド(ロング、3)

1

を丸めアプローチに問題があります境界条件 - ポイントが境界線に近づくとどうなりますか?

しかし、与えられた点の近傍のためにそれのようなものを使用した方がよい。このため

select * 
from table 
where long between @MyLong - @DeltaLong and @MyLong + @DeltaLong and 
     lat between @MyLat - @DeltaLat and @MyLat + @DeltaLat 

を、あなたは@DeltaLongと@DeltaLatを定義する必要があります。

要約では、丸めがうまく動作します(問題がある場合)。

関連する問題