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

Tôi muốn hiển thị trong các tệp postgis nhỏ hơn 10.000m và khoảng cách tính toán của chúng

Cách dễ nhất và nhanh nhất để làm điều đó là lưu trữ các tọa độ dưới dạng geometry hoặc geography thay vì các cặp tọa độ được phân tách:

ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);

Sau đó, tạo chỉ mục chính trên cột mới này:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Sử dụng ST_DWithin để truy vấn khoảng cách, dưới dạng ST_DistanceSphere hoặc ST_Distance sẽ không sử dụng chỉ mục không gian!

SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
FROM data
WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true); 
  • Lưu ý:true trong các hàm ST_DWithin ST_Distance có nghĩa là use_spheroid =true , là mặc định cho geography tham số.

Demo: db<>fiddle

Xem thêm: Nhận tất cả các Tòa nhà trong phạm vi 5 dặm từ tọa độ được chỉ định




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vấn đề với việc xóa một hàng khỏi cơ sở dữ liệu là gì?

  2. Hướng dẫn bất hợp pháp:4 khi chạy Django

  3. Làm thế nào để viết một hàm trả về giá trị văn bản hoặc số nguyên?

  4. Tạo / Chèn Json vào Postgres với các yêu cầu và psycopg2

  5. Các cột trong bảng động dựa trên tùy chọn của người dùng