Uso PostGIS da molto tempo ormai ma non ho mai dovuto usare la LINESTRING
geometria ...! :)
Ecco cosa mi piacerebbe fare: ho una tabella di linee di linea (che rappresentano le strade di una determinata città, SRID 3395) e vorrei trovare le linee di linea più vicine a un determinato punto (posizione GPS, SRID 4326).
La soluzione che ho trovato è selezionare tutte le stringhe di linea all'interno del mio punto utilizzando il expand()
metodo e determinare la distanza tra ciascuna stringa di linea e il mio punto utilizzando il ST_Distance()
metodo.
Ecco l'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;
I risultati che ottengo sembrano OK, ma ho l'impressione che qualcosa non vada nella mia implementazione.
1) Pensi che sia expand()
possibile ottenere tutti i linestrings interessati?
2) Pensi che ST_Distance()
sia il metodo giusto da usare? Immagino che lo stia facendo in modo sbagliato poiché la distanza che vorrei ottenere è la distanza minima tra il punto e la mia linea e non la distanza tra il punto e uno dei punti della stringa lineare.
Illustrazione: