Estou usando o PostGIS há muito tempo, mas nunca tive que usar a LINESTRING
geometria ...! :)
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: