Việc tạo vùng đệm để tìm các điểm là điều không nên vì (1) chi phí tạo ra hình học đại diện cho vùng đệm và (2) phép tính điểm trong đa giác kém hiệu quả hơn nhiều so với phép tính khoảng cách đơn giản.
Rõ ràng là bạn đang làm việc với dữ liệu (kinh độ, vĩ độ), vì vậy bạn nên chuyển đổi dữ liệu đó sang một hệ tọa độ Descartes thích hợp có cùng đơn vị đo với khoảng cách 10.000 của bạn. Nếu khoảng cách đó tính bằng mét, thì bạn cũng có thể truyền điểm từ bảng đến geography
và tính toán trực tiếp trên các tọa độ (kinh độ, vĩ độ). Vì bạn chỉ muốn xác định các điểm nằm trong khoảng cách đã chỉ định, bạn có thể sử dụng ST_DWithin()
chức năng
với tính toán trên hình cầu để tăng tốc độ (không làm điều này khi ở vĩ độ rất cao hoặc với khoảng cách rất xa):
SELECT id, point
FROM my_table
WHERE ST_DWithin(point::geography,
ST_GeogFromText('POINT(-116.768347 33.911404)'),
10000, false);