Làm thế nào để tìm điểm gần nhất bằng cách sử dụng chức năng PostGIS?


8

bảng A:

lat | long | the_geom | code | sign 
13.8433095 | 100.6360357 | 0101000020E61.... | ABC | start_point
13.7544738 | 100.5459646 | 0101000020E6..... | ABC | end_point
13.4124215 | 100.6232332 | 0101000020E61.... | DEF | start_point
13.2423438 | 100.2324426 | 0101000020E6..... | DEF | end_point

bảng B:

lat | long | the_geom | code    
13.7546285 | 100.5458729 | 0101000020E.... | ABC    
13.7546698 | 100.5458513 | 0101000020E.... | ABC
13.7547107 | 100.5458233 | 0101000020E.... | DEF    
...

Tôi muốn tìm (các) điểm gần nhất của mỗi điểm (điểm bắt đầu và điểm kết thúc của bảng A) so sánh với mọi điểm có cùng 'mã' trong bảng B?

Hàm PostGIS / truy vấn PostgreQuery tốt nhất để giải quyết vấn đề này là gì? Những gì tôi đã cố gắng là ..

ST_Distance_Spheroid và ST_DWithin và ST_Distance

Nhưng tôi không biết làm thế nào để kết hợp chúng trong một truy vấn duy nhất.

Câu trả lời:


9

Có thể một cái gì đó như thế này (tôi sẽ giả sử bạn có một số "id" cột chính trong mỗi bảng):

SELECT A.id, A.code AS Code, A.sign AS Sign, B.id, 
   ST_Distance(A.geom, B.geom) AS Distance 
FROM Table_A AS A, Table_B AS B
WHERE A.id IN ( 
   SELECT X.id
   FROM TableA as X, TableB as Y
-- Here's the important part: refer to the A table **outside** of the subquery
   WHERE X.code=Y.code AND X.id=A.id
-- and use ORDER BY ... LIMIT 1 to get the closest point
   ORDER BY ST_Distance(X.geom, Y.geom) ASC LIMIT 1
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.