我有以下表结构:
column names : cell longitude latitude bcch bsic data types : varchar double double double double Keys : x
我想知道所有
的细胞上述要求的空间sql查询是什么?
由于我对postgis的理解有限,可以自由地用“使用这个数据库表结构”开始你的答案,这样它就更加面向GIS(我相信有一个点而不是lat / long colums的概念)。我之前没有写过空间查询,正在考虑购买“PostGIS In Action”一书,但需要知道我想做的是否可行以及如何做。
此外,我想提一下,我知道如何在标准的SQL中做到这一点。我需要一个空间查询,因为有大约10000条记录,并且使用标准的sql方法,我需要生成10000 * 10000(每个单元格的所有其他单元格)记录,然后查询它们效率非常低。
答案 0 :(得分:3)
尼,
这不是真的。一个要点指数在这里会有所帮助。
Basarat我不太清楚你期望的输出。这是每个单元格的查询 将返回那些在10公里以内的人。首先,您要添加地理列,然后创建它的要点索引。这在PostGIS in Action的第一章中有所介绍。
因此,假设您有一个名为geog的新列,您已经在其上添加了一个gist索引。
然后你的查询将是
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