将多边形组合为覆盖查询

时间:2013-05-22 22:30:37

标签: postgresql gis postgis

我正在试图找出如何针对某些多边形内的点进行SQL查询。

基本上,最终用户可以输入N个多边形,我需要找到任何这些多边形内的所有相关数据。除了使用N个OR子句之外,我无法找到一个好方法...

IE:

SELECT * FROM <table> WHERE st_coveredby(geog, <input polygon 1>) OR st_coveredby(geog, <input polygon 2>);

等等。

我一直在尝试创建一个巨大的多边形,它基本上就像所有这些多边形的聚合或联合,但我无法找到一种方法来做到这一点。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

最好创建一个数组,并将ANY与运算符一起使用。你现在有:

WHERE st_coveredby(geog, <input polygon 1>) OR st_coveredby(geog, <input polygon 2>);

根据您的设置方式,@运算符可能有效:

WHERE geog @ ANY(ARRAY[ <input polygon 1>,  <input polygon 2>,  <input polygon 3>])

如果这不起作用,您可以创建一个像:

这样的运算符
CREATE OPERATOR @@@ (
      procedure st_covered_by,
      leftarg geography,
      rightarg geography
);

然后你应该能够做到:

 WHERE geog @@@ ANY(ARRAY[ <input polygon 1>,  <input polygon 2>,  <input polygon 3>])