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

tìm vị trí gần nhất theo vĩ độ và kinh độ trong postgresql

PostGIS

Đừng lưu trữ vĩ độ và độ dài trên bàn như vậy. Thay vào đó, hãy sử dụng hình dạng PostGIS hoặc loại địa lý .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

INSERT INTO foo (geog)
  VALUES (ST_MakePoint(x,y));

Bây giờ khi bạn cần truy vấn nó, bạn có thể sử dụng KNN (<-> ) thực sự sẽ thực hiện điều này trên một chỉ mục.

SELECT *
FROM foo
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Trong truy vấn của bạn, rõ ràng bạn có HAVING distance < 5 . Bạn cũng có thể làm điều đó trên chỉ mục.

SELECT *
FROM foo
WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Điều này đảm bảo rằng không có gì được trả lại nếu tất cả các điểm nằm ngoài distance_in_meters .

Hơn nữa x và y là số thập phân ST_MakePoint(46.06, 14.505)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để nhận thông báo tự động về các thay đổi trong bảng?

  2. QUAY LẠI dữ liệu từ chế độ xem có thể cập nhật không hoạt động?

  3. cách kết hợp CTE đệ quy và CTE bình thường

  4. Truy vấn postgres chậm khi tham gia các bảng lớn

  5. Theo dõi dấu thời gian sửa đổi cuối cùng của một hàng trong Postgres