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

Cách cấu hình PostgreSQL với Postgis để tính toán khoảng cách

Câu trả lời ngắn gọn:

Chỉ cần chuyển đổi x, y của bạn nhanh chóng sử dụng ST_MakePoint (nhớ chi phí!) và tính toán khoảng cách từ một điểm nhất định, SRS mặc định sẽ là WGS84 :

SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
                   ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;

Sử dụng GEOGRAPHY bạn sẽ nhận được kết quả tính bằng mét khi sử dụng GEOMETRY sẽ cung cấp cho nó trong độ. Tất nhiên, biết SRS của các cặp tọa độ là điều bắt buộc để tính toán khoảng cách, nhưng nếu bạn kiểm soát được chất lượng dữ liệu và tọa độ nhất quán (trong trường hợp này là bỏ qua SRS), thì không có gì phải lo lắng. Nó sẽ bắt đầu trở nên phức tạp nếu bạn định thực hiện các thao tác sử dụng dữ liệu bên ngoài, từ đó bạn cũng không biết về SRS và nó có thể khác với của bạn.

Câu trả lời dài:

Chà, nếu bạn đang sử dụng PostGIS, bạn không nên sử dụng x, y trong các cột được phân tách ở vị trí đầu tiên. Bạn có thể dễ dàng thêm cột hình học / địa lý bằng cách làm như thế này.

Đây là bàn của bạn ...

CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);

Chứa dữ liệu sau ..

INSERT INTO places VALUES ('Budva',18.84,42.92),
                          ('Ohrid',20.80,41.14);

Đây là cách bạn thêm cột loại địa lý:

ALTER TABLE places ADD COLUMN geo GEOGRAPHY;

Sau khi cột của bạn được thêm vào, đây là cách bạn chuyển đổi tọa độ của mình thành địa lý / hình học và cập nhật bảng của bạn:

UPDATE places SET geo = ST_MakePoint(lon,lat);

Để tính toán khoảng cách, bạn chỉ cần sử dụng hàm ST_Distance , như sau (khoảng cách tính bằng mét):

SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;

   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)

Nếu bạn có thông số vị trí của mình trong WKT , bạn cũng có thể sử dụng:

SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. COPY hoạt động như thế nào và tại sao nó nhanh hơn INSERT rất nhiều?

  2. PostgreSQL 13:Đừng để các vị trí giết chết vị trí chính của bạn

  3. Làm thế nào để tự động tăng trong PostgreSQL?

  4. Giá trị gia tăng của một ID bảng cho mỗi INSERT

  5. Id tham chiếu cột postgresql không rõ ràng