Vì tọa độ của bạn được lưu trữ trong các cột x, y, bạn phải sử dụng ST_MakePoint
để tạo ra một hình học thích hợp. Sau đó, bạn có thể tạo BBOX bằng hàm ST_MakeEnvelope
và kiểm tra xem tọa độ đầu và cuối có nằm trong BBOX hay không bằng cách sử dụng ST_Contains
, ví dụ:
WITH bbox(geom) AS (
VALUES (ST_MakeEnvelope(-8.68494,41.24895,-8.47569,41.11591,4326))
)
SELECT * FROM trips,bbox
WHERE
ST_Contains(bbox.geom,ST_SetSRID(ST_MakePoint(lon_start,lat_start),4326)) AND
ST_Contains(bbox.geom,ST_SetSRID(ST_MakePoint(lon_end,lat_end),4326));
Lưu ý: CTE
không thực sự cần thiết và nằm trong truy vấn chỉ nhằm mục đích minh họa. Bạn có thể lặp lại ST_MakeEnvelope
hoạt động trên cả hai điều kiện trong WHERE
mệnh đề thay vì bbox.geom
. Truy vấn này cũng giả định SRS WGS84
(4326).