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数据库首先是正确的选择吗?

4

3 回答 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 子句进行过滤。

于 2012-04-30T13:08:35.183 回答
1

这是一些粗略的伪代码,可能是一个开始。您需要为项目使用的 SQL 方言中的 round 函数提供正确的精度参数,因此请了解我作为 Round 的第二个参数提供的 3 是数字舍入到的精度小数位数,如您的原始帖子所示。

选择round(lat,3),round(long,3),avg(value) 分组round(lat,3),round(long,3)

于 2012-04-30T13:10:02.623 回答
1

舍入方法的问题在于边界条件——当点接近边界时会发生什么。

但是,对于给定点的邻域,最好使用以下内容:

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

为此,您需要定义@DeltaLong 和@DeltaLat。

如果这是您的问题,则四舍五入可以很好地进行总结。

于 2012-04-30T14:30:29.147 回答