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)