Sự khác biệt giữa ST_DWithin và ST_Distance cho tìm kiếm gần trong PostGIS là gì?


14

Tôi có các bản ghi được lưu trữ trong một bảng có tọa độ vĩ độ / kinh độ được lưu trữ trong trường hình học. Tôi muốn tìm tất cả các bản ghi gần một điểm tham chiếu do người dùng cung cấp. Lưu ý "gần đó" có thể có nghĩa là dưới 100km (thậm chí có thể nhỏ hơn).

Hầu hết các ví dụ tôi thấy sử dụng ST_DWithin. Có một lý do bạn không thể sử dụng ST_Distance? Sự khác biệt giữa sử dụng ST_DWithinST_Distanceđể làm điều này là gì?

Ví dụ:

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_DWithin(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326), 1)

đấu với

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_Distance(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326)) < 1

Câu trả lời:


15

ST_Distance là một phép tính phải được thực hiện và đánh giá trên mỗi hàng. ST_DWithin có thể sử dụng một chỉ mục, vì vậy nó có thể sẽ nhanh hơn nhiều .


4
Cũng quản lý để tìm thấy điều này nói khá nhiều điều tương tự: postgis.net/2013/08/26/tip_ST_DWithin
Người dùng
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.