微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 PostGIS 中使用 ST_Within 显示几个重叠/相交多边形内的点

如何解决在 PostGIS 中使用 ST_Within 显示几个重叠/相交多边形内的点

我有一个单独的点和多边形表。多边形彼此重叠或相交。这些点同时位于多个多边形内。我需要开发一个 sql 查询,它应该显示多边形中的点。如果我使用这样的 sql 查询

SELECT point_table.geom,polygon_table.name FROM point_table
INNER JOIN polygon_table on ST_Within(point_table.geom,polygon_table.geom);

它不会遍历所有多边形,而是使用最里面的多边形评估点几何,并且不评估具有其他重叠或相交多边形的点几何。我需要的是评估所有多边形的所有点。因为点可以同时位于多个多边形内。

例如,如果 10 个点在 3 个重叠的多边形内,它应该返回 30 条记录,并且每个记录/行都应该有相应的polygon_table.name。在这种情况下,上面的查询会从最里面的多边形返回 10 条带有polygon_table.name 的记录,即一旦找到匹配项,它就不会针对其他多边形评估这些点。

感谢您对此事的任何帮助。

谢谢。

解决方法

您的查询看起来不错。错误很可能在其他地方。为了使我的观点更清楚,我将添加一个示例,显示两个多边形和四个点,其中三个点位于内部多边形内,一个点位于外部多边形内:

enter image description here

WITH pol(id,geom) AS (
  VALUES (1,'SRID=4326;POLYGON((-4.53 54.21000000000001,-4.51 54.21000000000001,-4.51 54.19,-4.53 54.19,-4.53 54.21000000000001))'::GEOMETRY),(2,'SRID=4326;POLYGON((-4.537478046647734 54.213934294785226,-4.502287464372343 54.213934294785226,-4.502287464372343 54.18506473763151,-4.537478046647734 54.18506473763151,-4.537478046647734 54.213934294785226))'::GEOMETRY)
),poi(id,'SRID=4326;POINT(-4.524700698880288 54.20613765421879)'::GEOMETRY),'SRID=4326;POINT(-4.517588984076674 54.20219317274976)'::GEOMETRY),(3,'SRID=4326;POINT(-4.524762007263298 54.19627574559112)'::GEOMETRY),(4,'SRID=4326;POINT(-4.507098941702792 54.211414844419664)'::GEOMETRY))
SELECT poi.id AS point_id,pol.id AS polygon_id FROM poi
JOIN pol ON ST_Within(poi.geom,pol.geom);

 point_id | polygon_id 
----------+------------
        1 |          1
        1 |          2
        2 |          1
        2 |          2
        3 |          1
        3 |          2
        4 |          2

在结果集中,您可以看到三个点与所有多边形相连,一个点与一个多边形相连,如上图所示。

自己试试:db<>fiddle

如果还是不行,请提供一些示例数据,我们可以测试一下。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。