我设法获取特定多边形中包含的所有点的列表,但是如何查询PostGIS数据库以找出哪些多边形包含给定点?
假设我有一个包含纬度/经度位置(places
类型)的表POINT
和一个带有areas
列且geometry
类型的MULTIPOLYGON
表。
如何编写一个返回地点列表和包含每个点的所有区域的查询?例如:
place_id, area_ids
1, {23,425,536}
2, {30,425}
-- etc...
答案 0 :(得分:9)
您需要将array_agg
与ST_Contains结合使用,有关array_agg和类似功能的更多信息,请参阅aggregate functions。如果将其与点表上的组合结合使用,您将获得包含这些点的所有多边形的数组,例如
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,因此您可能需要调整设置。