0

我试图弄清楚如何运行 SQL 查询来确定点在某些多边形内的位置。

基本上,最终用户可以输入 N 个多边形,我需要在这些多边形中找到所有相关数据。除了使用 N 个 OR 子句之外,我想不出一个好方法来做到这一点......

IE:

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

等等等等

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

4

1 回答 1

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>])
于 2013-06-09T07:33:59.077 回答