首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据位置邻近度对值进行平均

如何根据位置邻近度对值进行平均
EN

Stack Overflow用户
提问于 2012-04-30 20:55:05
回答 3查看 137关注 0票数 3

我有一个带有地理标记的值(经度、纬度、值)的SQL表。该表的累积速度很快,有数千个条目。因此,查询表中某些区域的值将返回非常大的数据集。

我想知道位置接近一个值的平均值的方法,这里有一个插图:

表:

代码语言:javascript
复制
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的四个raws。如果数据集相对较小,则此方法有效。如果数据很大,我想查询sql以获得四舍五入的位置(10.123,53.567),并需要sql返回如下内容

代码语言:javascript
复制
Long            lat           value
10.123       53.567      10 (this is the average of 10, 12, and 18)
10.124       53.568      13

这个是可能的吗?我们如何根据位置对大数据集进行平均?

sql数据库首先是正确的选择吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-30 21:08:35

GROUP BY四舍五入的列,而AVG聚合函数应该可以很好地完成以下工作:

代码语言:javascript
复制
SELECT ROUND(Long, 3) Long, 
       ROUND(Lat, 3) Lat, 
       AVG(value) 
 FROM Table
 GROUP BY ROUND(Long, 3), ROUND(Lat, 3) 

根据需要添加WHERE子句以进行筛选。

票数 2
EN

Stack Overflow用户

发布于 2012-04-30 21:10:03

这里有一些粗略的伪代码,可能是一个开始。您需要在项目中使用的SQL方言中为round函数提供适当的精度参数,因此请理解,我提供的作为第二个参数的3是将数字四舍五入到的精度的小数位数,正如您的原始post所指示的那样。

选择舍入(纬度,3)、舍入(长,3)、平均值(值)按舍入分组(纬度,3)、舍入(长,3)

票数 1
EN

Stack Overflow用户

发布于 2012-04-30 22:30:29

四舍五入方法的问题是边界条件--当点接近边界时会发生什么。

但是,对于给定点的邻域,最好使用如下所示:

代码语言:javascript
复制
select *
from table
where long between @MyLong - @DeltaLong and @MyLong + @DeltaLong and
      lat between @MyLat - @DeltaLat and @MyLat + @DeltaLat

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

如果这是您的问题,四舍五入可以很好地用于摘要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10384076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档