2012-04-30 30 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的四個原始數據。如果數據集相對較小,這將起作用。如果數據大,我想查詢SQL爲圓角的位置(10.123,53.567),並需要SQL返回類似

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

這可能嗎?我們如何平均基於位置的大型數據集?

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的第二個參數提供的3是數字被舍入到的精度的小數位數,正如您原來的帖子所示。

選擇輪(LAT,3),圓(長,3),AVG(值) 組由圓形(LAT,3),圓(長,3)

1

與舍入方法的問題是邊界條件 - 當點接近邊界時會發生什麼。

然而,對於一個給定的點附近,最好是使用類似:

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

對於這一點,你需要定義@DeltaLong和@DeltaLat。

舍入工作正常進行彙總,如果這是你的問題。

相關問題