Tôi đang cố gắng sử dụng hàm mới Postgis 2.0 <-> (Geometry distance Centroid) để tính toán, cho mỗi hàng của bảng của tôi (cosn1), khoảng cách đến đa giác gần nhất của cùng một lớp.
Tôi đã cố gắng sử dụng mã sau đây:
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;
Nhưng sau đó tôi nhận ra cảnh báo:
Lưu ý: Chỉ mục chỉ khởi động nếu một trong các hình học là một hằng số (không phải trong truy vấn con / cte). ví dụ: 'SRID = 3005; POINT (1011102 450541)' :: hình học thay vì a.geom
Có nghĩa là Index hoàn toàn không được sử dụng và truy vấn sẽ mất gần như cùng thời gian như trước khi sử dụng:
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)
Bất cứ ai có thể chỉ cho tôi một cách giải quyết cho phép tôi cải thiện hiệu suất truy vấn của mình không?
Cảm ơn nhiều.