Estou usando o PostGIS há muito tempo, mas nunca tive que usar a LINESTRINGgeometria ...! :)
Aqui está o que eu gostaria de fazer: Eu tenho uma tabela de cadeias de linhas (representando ruas de uma determinada cidade, SRID 3395) e gostaria de encontrar as cadeias de linhas mais próximas de um determinado ponto (posição GPS, SRID 4326).
A solução que encontrei é selecionar todas as cadeias de linhas no meu ponto usando o expand()método e determinar a distância entre cada cadeia de linhas e meu ponto usando o ST_Distance()método.
Aqui está o 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;
Os resultados parecem bons, mas sinto que algo está errado na minha implementação.
1) Vocês acham que expand()podem obter todas as cadeias de linhas em questão?
2) Vocês acham que ST_Distance()é o método certo para usar? Acho que estou fazendo errado, já que a distância que eu gostaria de obter é a menor distância entre o ponto e minha linha e não a distância entre o ponto e um dos pontos da cadeia de linhas.
Ilustração:
