Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何基于位置接近度计算平均值_Sql_Database_Google Maps_Gps - Fatal编程技术网

Sql 如何基于位置接近度计算平均值

Sql 如何基于位置接近度计算平均值,sql,database,google-maps,gps,Sql,Database,Google Maps,Gps,我有一个带有地理标记值(经度、纬度、值)的SQL表。该表的累积速度很快,有数千个条目。因此,查询表中某些区域的值会返回非常大的数据集 我想知道接近一个值的平均值的方法,下面是一个示例: 表: Long lat value 10.123001 53.567001 10 10.123002 53.567002 12 10.123003 53.567003 18 10.124003

我有一个带有地理标记值(经度、纬度、值)的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的四个RAW。如果数据集相对较小,则此方法有效。如果数据很大,我想查询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数据库首先是正确的选择吗?

按四舍五入的列分组,AVG聚合函数应该可以很好地实现这一点:

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

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

以下是一些粗略的伪代码,可能是一个开始。您需要使用项目中使用的SQL方言为round函数提供正确的精度参数,因此请理解,我提供的第二个参数3 round是精度的小数位数,正如您最初的帖子所示

选择圆形(横向,3)、圆形(纵向,3)、平均值(值)
逐轮分组(lat,3),逐轮分组(long,3)

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

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

select *
from table
where long between @MyLong - @DeltaLong and @MyLong + @DeltaLong and
      lat between @MyLat - @DeltaLat and @MyLat + @DeltaLat
为此,您需要定义@DeltaLong和@DeltaLat


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

我不知道你所说的“四舍五入位置的所有数据的平均值”是什么意思。我重新写了这个问题,我希望它现在比以前更清楚,10、12和18的平均值是40/3,大约是13.3。这是打字错误还是其他意思?