Tôi đã sử dụng PostGIS từ lâu nhưng chưa bao giờ phải sử dụng LINESTRING
hình học ...! :)
Đây là những gì tôi muốn làm: Tôi có một bảng linestrings (đại diện cho các đường phố của một thành phố nhất định, SRID 3395) và tôi muốn tìm các linestrings gần nhất đến một điểm nhất định (vị trí GPS, SRID 4326).
Giải pháp tôi tìm thấy là chọn tất cả các linestrings trong điểm của tôi bằng expand()
phương thức và xác định khoảng cách giữa mỗi linestring và điểm của tôi bằng ST_Distance()
phương thức.
Đây là SQL:
SELECT myLineId, myLineName, ST_Distance(ST_Transform(GeomFromText('POINT(LON LAT)',4326),3395),myLineGeom) AS myLineDistance
FROM myLines
WHERE myLineGeom && expand(ST_Transform(GeomFromText('POINT(LON LAT)',4326),3395), 100)
ORDER BY myLineDistance;
Kết quả tôi nhận được trông ổn nhưng tôi có cảm giác có gì đó không ổn trong quá trình thực hiện.
1) Các bạn có nghĩ rằng expand()
có thể có được tất cả các linestrings liên quan?
2) Các bạn có nghĩ rằng ST_Distance()
phương pháp này là đúng để sử dụng? Tôi đoán tôi đang làm sai vì khoảng cách tôi muốn có là khoảng cách nhỏ nhất giữa điểm và đường của tôi chứ không phải khoảng cách giữa điểm và một trong những điểm của đường thẳng.
Hình minh họa: