postgresql - 查找与点相交的所有区域,反之亦然 - PostGIS

标签 postgresql gis intersection postgis

我正在开发一个使用 PostGIS 来保存空间数据的项目,其中我有保存几何点数据的记录和保存几何区域数据的记录。为了解决我的问题,我正在寻找两个可以采用地理形状而不是几何形状作为参数的查询。

对于查询 A,我需要它返回与给定区域相交的所有点。

对于查询 B,我需要它返回与给定点相交的所有区域。

最佳答案

无论您走向哪个方向,查询都几乎相同,它仅取决于您的选择标准,让我们假设您有下表:

---------------------------------------------------
| id | name  | otherdata | geometry(MULTIPOLYGON) |
---------------------------------------------------
| 1  | poly1 | blah      | 1020304050......       |
---------------------------------------------------

使用以下内容:

SELECT * FROM poly_table

SELECT id,name,otherdata,AsText(geometry)

将按原样显示该表(后者将提供更易读的英语输出)

现在,如果您也有一个类似的表,但您有点而不是几何图形中的多边形,要对它们进行交叉过滤,您可以使用简单的连接。

EG:

SELECT points.* FROM points_table points
INNER JOIN polygon_table polys ON ST_Within(points.geometry,polys.geometry)
WHERE polys.id = 1 -- Or some other where clause to restrict the polygon area to the one you want.

这将从点表中返回落在代表您感兴趣的区域的所选多边形内的所有点。

注意:我在这里使用 ST_Within,但是 PostGIS 中可能还有其他几何运算符可以执行许多其他类型的检查,这将使您的相交和/或边界测量更加准确,但对于所有这些运算符来说,原理是一样。

对于您的第二个查询,所需的 GIS-SQL 将非常相似,但您需要反转条件以返回给定点的多边形,而不是返回给定多边形的点:

SELECT polys.* FROM polygon_table polys
INNER JOIN points_table points ON ST_Within(points.geometry,polys.geometry)
WHERE points.id = 1 -- Or some other where clause to restrict the point to the one you want.

注意:我们将“ST_Within”中的参数保持完全相同的顺序,因为 ST_Within 使用以下规则进行处理:

returns true IF geometry A is within geometry B

由于该点仍然是两个实体中较小的一个,因此我们仍然需要检查相同的空间顺序。

关于postgresql - 查找与点相交的所有区域,反之亦然 - PostGIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165065/

相关文章:

javascript - CartoDB - 单击某个点时缩放到特定范围?

Python地理空间坐标格式转换

BIGINT ARRAY 上的 PostgreSQL array_remove

postgresql - psql : FATAL: role "root" does not exist when creating database from fabric explorer's sql file

mysql - 如何根据已经活跃的用户(而不是根据用户注册日期)计算月度用户留存率?

java - 如何生成用于计算最短距离的数据

postgresql - 无法从我的 Linux 用户连接 PostgreSQL 数据库

Python - 多个列表的交集?

MySQL - 是否有可能获得两个查询结果的 'the difference'?

Python 对元组列表的列表交集求和的最简单方法