我正在开发一个CAD程序,允许用户平移非常大的多边形层。例如,如果用户缩小,那么我可能需要渲染数百万个多边形。我想通过每帧渲染一些多边形来为用户慢慢绘制这个场景,但这意味着我需要一个能够从块中选择PostGIS数据库中矩形多边形区域的查询。这是我正在使用的表和索引:
create table POLYGON(ID serial8 primary key,
LAYER_ID bigint not null,
GEOM geometry(polygon,0) not null);
create index on POLYGON using gist(LAYER_ID, GEOM);
我想执行以下查询:
select POLYGON.ID, ST_AsBinary(POLYGON.GEOM) from POLYGON
where LAYER_ID = ? and (ST_MakeEnvelope(?, ?, ?, ?, 0) && GEOM);
但该查询可能需要很长时间并返回大量结果。有什么方法可以将这个巨大的查询分成更小的查询吗?
我考虑使用“偏移”和“限制”,但我认为这不会起作用,因为我的结果没有订购。此外,就“偏移”而言,我相信postgres仍然需要查询它正在跳过的所有内容。
我可以尝试将多边形分成组,这样我就可以一次检索一个组,但是“gist”索引是否已经在内部以某种方式对我的几何进行了分区?我不想在“gist”索引之上构建另一个系统,除非我绝对必须这样做。
任何建议都将不胜感激。