Ich versuche, die neue Postgis 2.0-Funktion <-> (Geometry Distance Centroid) zu verwenden, um für jede Zeile meiner Tabelle (cosn1) die Entfernung zum nächsten Polygon derselben Klasse zu berechnen.
Ich habe versucht, den folgenden Code zu verwenden:
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;
Aber dann merke ich die Warnung:
Hinweis: Der Index wird nur aktiviert, wenn eine der Geometrien eine Konstante ist (nicht in einer Unterabfrage / einem Byte). zB 'SRID = 3005; POINT (1011102 450541)' :: Geometrie anstelle von a.geom
Dies bedeutet, dass der Index überhaupt nicht verwendet wird und die Abfrage fast genauso lange dauert wie vor der Verwendung von:
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)
Kann mir jemand eine Problemumgehung empfehlen, mit der ich die Leistung meiner Abfrage verbessern kann?
Vielen Dank.