Я давно использую PostGIS, но никогда не использовал LINESTRING
геометрию ...! :)
Вот что я хотел бы сделать: у меня есть таблица линий линий (представляющих улицы данного города, SRID 3395), и я хотел бы найти ближайшие строки линий к данной точке (позиция GPS, SRID 4326).
Решение, которое я нашел, состоит в том, чтобы выбрать все линии линий в моей точке, используя expand()
метод, и определить расстояние между каждой строкой и моей точкой, используя ST_Distance()
метод.
Вот 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;
Результаты, которые я получаю, выглядят нормально, но я чувствую, что что-то не так в моей реализации.
1) Вы, ребята, думаете, что expand()
можете получить все заинтересованные строки?
2) Ребята, вы считаете, что ST_Distance()
это правильный метод? Думаю, я делаю это неправильно, поскольку расстояние, которое я хотел бы получить, - это наименьшее расстояние между точкой и моей линией, а не расстояние между точкой и одной из точек линейной линии.
Иллюстрация: