将可变数量的点与多个多边形相交

时间:2014-11-07 13:46:45

标签: postgresql postgis

这可能是一个非常简单的问题,但我想不出一个合适的查询来解决它。

我想通过多个单个多边形(多边形都在一个表中)来交叉多个点(可以从一个点到几乎任何东西,具体取决于用户的输入)。

具体来说,我想将多边形表中的一个字段的值(让我们称之为“检查”)设置为1,只要它与点表中的一个点相交。

这是一个截图,阐明了我想要做的事情enter image description here

与点相交的那个单元格的字段“检查”应设置为1.

到目前为止,我的查询如下:

select * from raster2km     
where ( ST_Intersects( (select geom from points), (select the_geom from raster2km) ) = true)

但自然它不起作用,因为它返回多个几何体。

有什么建议吗?我真的很感激。

编辑:我试图运行查询Jakub Kania建议,但是我只是继续收到错误消息“无效的连接选择性”。我尝试使用一个包含“仅”5000多边形的显着更小的表来运行它,但错误消息保持不变。

编辑:我现在可以确认Jakub Kania提出的查询是在一个只有几个多边形的桌子上工作的(我用10个多边形测试了它)。 问题是,保持大量的多边形对我来说至关重要。

也许我使用了错误的方法,但我想不出另一种方法。

最后编辑:我想出了一个完美的解决方法:我得到了点的坐标,使用google api获取它们所在城镇的名称,并使用该名称对postgresql进行查询比交叉更快,更快。

总而言之,Jakub Kania的查询工作正常,但它不适合非常大的数据集。使用反向地理编码是一种可能的替代方案。

1 个答案:

答案 0 :(得分:1)

ST_Intersects()是一个函数,因此您只需在ON的{​​{1}}子句中使用它。

JOIN