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

时间:2011-11-17 09:48:11

标签: postgresql gis intersection postgis

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

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

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

1 个答案:

答案 0 :(得分:3)

查询几乎与您前进的方向相同,只是取决于您的选择标准,我们假设您有下表:

---------------------------------------------------
| 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

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