Estoy tratando de utilizar Postgis 2.0 nueva función <-> (Geometría Distancia Centroide) con el fin de calcular, para cada fila de mi tabla (cosn1), la distancia al polígono más cercano de la misma clase.
Intentaba utilizar el siguiente 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;
Pero entonces me doy cuenta de la advertencia:
Nota: El índice sólo se activa si una de las geometrías es una constante (no en una subconsulta/cte). por ejemplo, 'SRID=3005;POINT(1011102 450541)'::geometry en lugar de a.geom
Esto significa que el índice no se utilizará en absoluto, y la consulta tardará casi el mismo tiempo que antes de utilizarlo:
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)
¿Puede alguien indicarme una solución que me permita mejorar el rendimiento de mi consulta?
Muchas gracias.