Saya mencoba menggunakan fungsi baru Postgis 2.0 <-> (Geometry Distance Centroid) untuk menghitung, untuk setiap baris tabel saya (cosn1), jarak ke poligon terdekat dari kelas yang sama.
Saya mencoba menggunakan kode berikut:
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;
Tapi kemudian saya menyadari peringatan itu:
Catatan: Indeks hanya menghasilkan jika salah satu geometri adalah konstanta (bukan dalam subquery / cte). mis. 'SRID = 3005; POINT (1011102 450541)' :: geometry alih-alih a.geom
Berarti Indeks tidak akan digunakan sama sekali, dan kueri akan memakan waktu yang hampir sama seperti sebelum menggunakan:
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)
Adakah yang bisa menunjukkan solusi yang memungkinkan saya meningkatkan kinerja kueri?
Terima kasih banyak.