Od dłuższego czasu korzystam z PostGIS, ale nigdy nie musiałem używać LINESTRING
geometrii ...! :)
Oto, co chciałbym zrobić: mam tabelę linii (reprezentujących ulice danego miasta, SRID 3395) i chciałbym znaleźć najbliższe linie do danego punktu (pozycja GPS, SRID 4326).
Rozwiązaniem, które znalazłem, jest wybranie wszystkich linii wewnątrz mojego punktu za pomocą expand()
metody i określenie odległości między każdym linią i moim punktem za pomocą ST_Distance()
metody.
Oto 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;
Wyniki wyglądają OK, ale mam wrażenie, że coś jest nie tak z moją implementacją.
1) Czy uważasz, że expand()
można uzyskać wszystkie niepokojące linie?
2) Czy uważają Państwo, że ST_Distance()
jest to właściwa metoda? Myślę, że robię to źle, ponieważ odległość, którą chciałbym uzyskać, jest najmniejszą odległością między punktem a moją linią, a nie odległością między punktem a jednym z punktów linii.
Ilustracja: