【问题标题】:Combine polygons for a coveredby query为覆盖查询组合多边形
【发布时间】:2013-05-22 22:30:36
【问题描述】:

我正在尝试弄清楚如何运行 SQL 查询以了解点在某些多边形内的位置。

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

IE:

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

等等等等

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

【问题讨论】:

  • geog真的是重点吗?

标签: postgresql gis postgis


【解决方案1】:

您最好创建一个数组并将 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>])

【讨论】:

  • 我尝试为此创建一个运算符,但不幸的是,查询返回了 0 个结果,而该结果应该返回数百个。 IE:如果我从上面执行 OR 子句,我会返回预期的行,但是使用 @ 或 @@@,我什么也得不到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 2013-08-24
  • 2013-11-04
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多