PostGIS高效的DISTINCT点过滤

时间:2016-09-30 16:02:09

标签: postgresql postgis

我正在尝试编写一个查询,以便在某个Geohash精度内有效地抓取给定多边形内的所有非重叠点。

注意事项:

  • 我有很多 很多 数百万行。
  • 我有空间索引 宝石。
  • 我有时间戳索引。

通用查询,即使有数百万点,也可以很棒并且非常快

SELECT * FROM points WHERE
ST_Contains(polygon, location)
AND timestamp >= somedate AND timestamp <= somedate
LIMIT 1000 OFFSET 0

现在假设我想删除重叠点以达到一定的精度。我会这样做。

SELECT DISTINCT ON (ST_GeoHash(ST_SetSRID(location, 4326), 9)) 
* FROM points WHERE
ST_Contains(polygon, location)
AND timestamp >= somedate AND timestamp <= somedate
LIMIT 1000 OFFSET 0

结果是我正在寻找的。过滤掉重叠点。

然而,EXPLAIN显示独特的成本约为78000,并且运行查询本身非常缓慢。

有没有人对有效(低于1秒)过滤数据库层中的重叠点有任何经验或好主意?

0 个答案:

没有答案