Estou tentando usar a nova função do Postgis 2.0 <-> (Geometry Distance Centroid) para calcular, para cada linha da minha tabela (cosn1), a distância do polígono mais próximo da mesma classe.
Eu estava tentando usar o seguinte código:
WITH index_query AS (
SELECT g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, g1.the_geom <-> g2.the_geom)
SELECT DISTINCT ON (ref_gid) ref_gid, ENN
FROM index_query
ORDER BY ref_gid, ENN;
Mas então eu percebo o aviso:
Nota: O índice somente entra em ação se uma das geometrias for uma constante (não em uma subconsulta / cte). por exemplo, 'SRID = 3005; POINT (1011102 450541)' :: geometry em vez de a.geom
Significando que o Índice não será usado e a consulta levará quase o mesmo tempo que antes de usar:
SELECT DISTINCT ON(g1.gid) g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
Alguém pode me indicar uma solução alternativa que me permita melhorar o desempenho da minha consulta?
Muito obrigado.