在PostGIS中查找包含一个点的所有多边形

5
我已经成功获取了一个特定多边形内的所有点列表,但是如何查询PostGIS数据库以确定包含给定点的多边形呢?
假设我有一个名为places的表格,其中包含纬度/经度位置(POINT类型),另一个名为areas的表格中有一个geometry列,其中包含MULTIPOLYGON类型。
我该如何编写查询语句来返回一个包含每个点和所有包含该点的区域的地点列表?例如:
place_id, area_ids
1, {23,425,536}
2, {30,425}
-- etc...

2
St_contains函数如果没有使用array_agg函数,就不会像你在问题中所述的那样产生数组输出。只是为了明确起见。 - John Powell
1个回答

12
你需要使用 array_aggST_Contains 一起使用,有关 array_agg 和类似函数的更多信息,请参阅 聚合函数。如果在点表上结合使用 group by,将会得到包含这些点的所有多边形的数组,例如:
SELECT pl.id, array_agg(ar.id ORDER BY ar.id) as area_list
FROM areas ar, places pl 
WHERE ST_Contains(ar.geom, pl.geom) 
GROUP BY pl.id
ORDER BY pl.id; 

注意,你可以在array_agg内部放置Order By,以便区域ID始终以相同的顺序显示。我已经称两个表的主键为id,并将两个表的几何数据称为geom,因此您可能需要根据自己的设置进行调整。


太好了!调整了主键名称和几何信息,现在运行得很好 :-) - Avishai
很高兴能帮忙。数组在空间方面非常有用。 - John Powell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接