J'essaie d'utiliser la nouvelle fonction de Postgis 2.0 <-> (Geometry Distance Centroid) afin de calculer, pour chaque ligne de ma table (cosn1), la distance au polygone le plus proche de la même classe.
J'essayais d'utiliser le code suivant:
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;
Mais alors je réalise l'avertissement:
Remarque: L'index ne démarre que si l'une des géométries est une constante (pas dans une sous-requête / cte). par exemple 'SRID = 3005; POINT (1011102 450541)' :: geometry au lieu de a.geom
Cela signifie que l'index ne sera pas utilisé du tout, et la requête prendra presque le même temps qu'avant l'utilisation:
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)
Quelqu'un peut-il m'indiquer une solution de contournement qui me permet d'améliorer les performances de ma requête?
Merci beaucoup.