En PostGIS, la función ST_DWithin incluye automáticamente un cuadro de comparación que va a hacer uso de cualquiera de los índices que están disponibles en la geometría. Esto se hace mediante el mecanismo de inline funciones de SQL. La definición de la función es como sigue.
CREATE OR REPLACE FUNCTION ST_DWithin(geom1 geometry, geom2 geometry, float8)
RETURNS boolean
AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($2,$3)
AND $2 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($1,$3)
AND @extschema@._ST_DWithin($1, $2, $3)'
LANGUAGE 'sql' IMMUTABLE _PARALLEL;
Por qué es necesario llamar dos veces el ST_Expand función, una para cada geometría? No una sola llamada como en la siguiente definición de ser suficiente?
CREATE OR REPLACE FUNCTION ST_DWithin(geom1 geometry, geom2 geometry, float8)
RETURNS boolean
AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ST_Expand($2,$3)
AND @extschema@._ST_DWithin($1, $2, $3)'
LANGUAGE 'sql' IMMUTABLE _PARALLEL;