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

时间:2014-11-18 22:19:26

标签: sql ruby-on-rails postgresql geolocation postgis

我设法获取特定多边形中包含的所有点的列表,但是如何查询PostGIS数据库以找出哪些多边形包含给定点?

假设我有一个包含纬度/经度位置(places类型)的表POINT和一个带有areas列且geometry类型的MULTIPOLYGON表。

如何编写一个返回地点列表和包含每个点的所有区域的查询?例如:

place_id, area_ids
1, {23,425,536}
2, {30,425}
-- etc...

1 个答案:

答案 0 :(得分:9)

您需要将array_aggST_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,因此您可能需要调整设置。