Llevo mucho tiempo utilizando PostGIS pero nunca he tenido que utilizar el LINESTRING
¡geometría ...! :)
Lo que me gustaría hacer es lo siguiente: tengo una tabla de líneas (que representan las calles de una ciudad determinada, SRID 3395) y me gustaría encontrar las líneas más cercanas a un punto determinado (posición GPS, SRID 4326).
La solución que he encontrado es seleccionar todas las cadenas de líneas dentro de mi punto utilizando el expand()
y determinar la distancia entre cada línea y mi punto utilizando el método ST_Distance()
método.
Aquí está el 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;
Los resultados que obtengo se ven bien pero tengo la sensación de que algo está mal en mi implementación.
1) ¿Creen ustedes que el expand()
¿puede obtener todas las líneas en cuestión?
2) ¿Creen ustedes que el ST_Distance()
¿es el método correcto a utilizar? Supongo que lo estoy haciendo mal ya que la distancia que me gustaría obtener es la menor distancia entre el punto y mi línea y no la distancia entre el punto y uno de los puntos de la cadena de líneas.
Ilustración: