Tôi đang sử dụng PostGIS để tính toán các đa giác lân cận gần nhất. Điều tôi muốn tính toán là khoảng cách tối thiểu từ mỗi đa giác, đến đa giác gần nhất.
Cho đến nay tôi đã nhận được sự giúp đỡ rất lớn từ câu trả lời của Mike Toews (mà tôi trích dẫn bằng một thay đổi nhỏ) ở đây:
SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM
public."TestArea" AS a, public."TestArea" AS b
WHERE
a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
Sau đó, tôi tính tối thiểu:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
Tuy nhiên, thách thức của tôi là tính toán điều này cho một số lượng lớn đa giác (1.000.000). Vì phép tính trên so sánh từng đa giác với mọi đa giác khác, tôi tự hỏi làm thế nào tôi có thể cải thiện phép tính để tôi không phải thực hiện 10 ^ 12 phép tính.
Một suy nghĩ tôi đã có là đệm từng đa giác, và sau đó tính toán các lân cận gần nhất của tất cả các giá trị trong bộ đệm cho đa giác đó và ghi lại mức tối thiểu. Tôi không chắc đó là cách tiếp cận tốt nhất hay liệu có chức năng nào trong PostGIS mà tôi nên sử dụng hay không.
EDIT: Sử dụng một trong những gợi ý của Nicklas, tôi đang thử nghiệm ST_Dwithin()
:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
Điều này trả về một bảng ID của mỗi đa giác, và liệu nó có nằm trong một khoảng cách nhất định hay không. Có thể xây dựng một IF/ELSE
câu lệnh kiểu bằng SQL không? (Tôi đã đọc về việc sử dụng CASE
điều kiện) Hoặc tôi có nên thử tham gia bảng tôi sản xuất vào bảng gốc và sau đó chạy lại truy vấn bằng ST_Distance không?