Я вже давно використовую 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()
це правильний метод використання? Я думаю, що я роблю це неправильно, оскільки відстань, яку я хотів би отримати, - це найменша відстань між точкою та моєю лінією, а не відстань між точкою та однією з точок лінії рядка.
Ілюстрація: