¡He estado usando PostGIS durante mucho tiempo, pero nunca tuve que usar la LINESTRING
geometría ...! :)
Esto es lo que me gustaría hacer: tengo una tabla de cadenas lineales (que representan las calles de una ciudad determinada, SRID 3395) y me gustaría encontrar las cadenas lineales más cercanas a un punto determinado (posición GPS, SRID 4326).
La solución que encontré es seleccionar todas las cadenas de líneas dentro de mi punto usando el expand()
método y determinar la distancia entre cada cadena de líneas y mi punto usando el 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) ¿Ustedes piensan que expand()
pueden obtener todas las cadenas de líneas en cuestión?
2) ¿Ustedes piensan que ST_Distance()
es el método correcto para usar? Supongo que lo estoy haciendo mal, ya que la distancia que me gustaría obtener es la distancia más pequeña entre el punto y mi línea y no la distancia entre el punto y uno de los puntos de la cadena lineal.
Ilustración: