我正在试图找出如何针对某些多边形内的点进行SQL查询。
基本上,最终用户可以输入N个多边形,我需要找到任何这些多边形内的所有相关数据。除了使用N个OR子句之外,我无法找到一个好方法...
IE:
SELECT * FROM <table> WHERE st_coveredby(geog, <input polygon 1>) OR st_coveredby(geog, <input polygon 2>);
等等。
我一直在尝试创建一个巨大的多边形,它基本上就像所有这些多边形的聚合或联合,但我无法找到一种方法来做到这一点。有什么想法吗?
答案 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>])