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

Avi*_*hai 4 sql postgresql postgis ruby-on-rails geolocation

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

假设我有一个places带有lat/lon位置(POINT类型)的areas表和一个geometry带有MULTIPOLYGON类型列的表.

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

place_id, area_ids
1, {23,425,536}
2, {30,425}
-- etc...
Run Code Online (Sandbox Code Playgroud)

Joh*_*ell 11

您需要array_aggST_Contains一起使用,有关array_agg和类似函数的更多信息,请参阅聚合函数.如果将它与点表上的组合结合,您将获得包含这些点的所有多边形的数组,例如,

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; 
Run Code Online (Sandbox Code Playgroud)

注意,您可以在array_agg中放置一个Order By,以便区域ID始终以相同的顺序出现.我已经调用了表的主键,id和两个表的几何,geom,因此您可能需要调整设置.