PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách hiệu quả nhất để tìm các điểm trong một bán kính nhất định từ một điểm nhất định

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đếm vị trí cột thay đổi thành giá trị cụ thể trong postgres

  2. không thể thực hiện các truy vấn RDS trên heroku

  3. Làm thế nào để xóa nhận xét khỏi tệp sql thô

  4. Chèn NULL thay vì chuỗi trống với PDO

  5. NodeJS và Express:Lỗi:chứng chỉ tự ký