我正在尝试编写一个查询,以便在某个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秒)过滤数据库层中的重叠点有任何经验或好主意?