我正在开发一个项目,使用PostGIS来保存空间数据,其中包含保存几何点数据的记录和保存几何区域数据的记录。为了解决我的问题,我正在寻找两种可以采用地理形状而不是几何形状作为参数的查询。找到与点相交的所有区域 - 反之亦然 - PostGIS
对于查询A我需要它返回与给定区域相交的所有点。
对于查询B我需要它返回与给定点相交的所有区域。
我正在开发一个项目,使用PostGIS来保存空间数据,其中包含保存几何点数据的记录和保存几何区域数据的记录。为了解决我的问题,我正在寻找两种可以采用地理形状而不是几何形状作为参数的查询。找到与点相交的所有区域 - 反之亦然 - PostGIS
对于查询A我需要它返回与给定区域相交的所有点。
对于查询B我需要它返回与给定点相交的所有区域。
查询是相当多的,其曾经向你去,它只是取决于你选择的标准是相同的,让我们假设你有如下表:
---------------------------------------------------
| id | name | otherdata | geometry(MULTIPOLYGON) |
---------------------------------------------------
| 1 | poly1 | blah | 1020304050...... |
---------------------------------------------------
使用下列内容:
SELECT * FROM poly_table
或
SELECT id,name,otherdata,AsText(geometry)
将按原样显示该表(稍后将给出更多En glish可读的输出)
现在如果你也有一个类似的表格,而不是在几何体中的多边形,你有点,要对它们进行交叉过滤,你可以使用简单的连接。
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个实体仍然较小那么我们仍然需要检查为相同的空间排序。