我设法获得了包含在特定多边形中的所有点的列表,但是如何查询 PostGIS 数据库以找出哪些多边形包含给定点?
假设我有一个带有纬度/经度位置(places
类型)的 POINT
表和一个带有 areas
类型的 geometry
列的 MULTIPOLYGON
表。
如何编写一个查询来返回包含每个点的地点和所有区域的列表?例如:
place_id, area_ids
1, {23,425,536}
2, {30,425}
-- etc...
最佳答案
您需要将 array_agg
与 ST_Contains 结合使用,有关 array_agg 和类似函数的更多信息,请参阅 aggregate functions。如果您将其与点表上的 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,因此您可能需要针对您的设置进行调整。
关于sql - 在 PostGIS 中查找包含一个点的所有多边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27005223/