我将PostgreSQL与GisT和PostGIS结合使用,我想找到距离查询几何阈值在一定范围内的几何。因此,首先,我应该扩展查询的边界框,其次,我应该将扩展的边界框传递给GisT索引。
我认为两个查询的语言含义是:SELECT * FROM table WHERE DWithin(querygeom, table.col)
和SELECT * FROM table WHERE DWithin(table.col, querygeom)
相同,其中tabel.col是几何的一列,而querygeom是我传入的静态几何。但是,由于我有一个在table.col上的GisT索引中,我想始终扩展查询而不是列,以便使用索引。 (如果我理解正确,如果我在该列内展开框,则无法使用索引?)
这有什么用吗?例如,使用规则重写查询吗?
我想我找到了这个答案...它使用对称格式:
'SELECT $1 OPERATOR(@extschema@.&&) @[email protected]_Expand($2,$3) AND $2 OPERATOR(@extschema@.&&) @[email protected]_Expand($1,$3) AND @extschema@._ST_DWithin($1, $2, $3)'
所以任何一方都可以使用该索引(我猜这会增加计算成本)