繁体   English   中英

我将如何编写此空间查询?

[英]How would I write this spatial query?

我有以下表结构:

column names : cell    longitude latitude bcch   bsic
data types   : varchar double    double   double double 
Keys         : x

我想知道所有的细胞

  • 彼此相距10公里
  • 具有相同的bcch + bsic。

满足以上要求的空间SQL查询是什么?

由于我对Postgis的了解有限,请随时从“使用此数据库表结构代替”开始您的回答,以便它更面向GIS(我相信这里是点的概念,而不是经/纬度)。 我之前没有写过空间查询,正在考虑购买《 PostGIS In Action》一书,但需要知道我尝试做的事情是否可行以及如何进行。

另外,我想提一下,我知道如何在标准sql中进行操作。 我需要一个空间查询,因为大约有10000条记录,并且使用标准sql方法,我需要生成10000 * 10000(每个单元格的所有其他单元格)记录,然后查询它们,这效率极低。

丹尼斯,

这不是真的。 要点索引在这里会有所帮助。

Basarat我不太清楚您期望得到什么输出。 这是一个查询,对于每个像元,将返回10km之内的像元。 首先,您要添加一个地理位置列,然后为其创建要点索引。 《行动中的PostGIS》第一章对此进行了介绍。

因此,假设您有一个名为geog的新列,并已添加了要点索引。

然后你的查询将是

SELECT c.cell, array_agg(n.cell) As cells_close
FROM cells As c INNER JOIN cells As n ON ST_DWithin(c.geog, n.geog, 10000)
WHERE c.bsic = n.bsic  --other criteria go here
GROUP BY c.cell;

如果您不希望将输出作为数组-您可以这样做

array_to_string(array_agg(n.cell),',') As cell_comma_sep

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM