查找最多 3 个其他多边形的相邻多边形

时间:2021-06-02 22:52:09

标签: sql postgresql postgis touches st

我有一个类似下图的案例

//gbr

假设我有 9 个多边形,并且想要获得一个与 3 个其他多边形(例如多边形)的最大邻居的多边形1、3、7、9(黄色)

我认为这是在 postgis 中使用 ST_Touches 完成的,但我只是想出了在 postgis 代码中表示它

select a.poly_name, b.poly_name from tb a, tb b where ST_Touches(a.geom, b.geom)

说我想输出如下:

 poly_name      poly_name
     1               2
     1               4
     1               5

那么我是如何想到完成这个的呢?

1 个答案:

答案 0 :(得分:1)

您对 ST_Touches 的提示是正确的,但是要从与同一表中其他记录相关的一列中获取相邻单元格的数量,您需要运行子查询或在 {{1} 中调用该表两次}} 子句。

给定名为 FROM .. 的表格上的以下网格

enter image description here

.. 您可以像这样过滤具有三个或更少相邻单元格的单元格:

tb

enter image description here

如果您还想列出哪些是相邻单元格,您可能希望首先加入在 SELECT * FROM tb q1 WHERE ( SELECT count(*) FROM tb q2 WHERE ST_Touches(q2.geom,q1.geom)) <=3; 子句和子查询中接触的单元格或 CTE 计算结果:

WHERE

演示:db<>fiddle

进一步阅读: