Tengo la siguiente tabla llamada locations con las siguientes columnas:
latitudelongitudeahora me gustaría consultar todas las entradas que están dentro de un radio específico desde un punto dado de latitud/longitud.
SELECT * FROM locations WHERE ST_DWithin( ST_MakePoint(longitude, latitude), ST_MakePoint(-0.63098, 51.18291), 100 );La consulta anterior explica qué datos tengo como entrada y los datos que tengo que consultar.
¿Alguna idea?
ST_DWithin puede trabajar con tipos de geografía y geometría. ST_MakePoint devuelve un tipo de geometría. Al usar ST_DWithin con una geometría, utilizará la unidad de distancia definida por el sistema de referencia espacial.
Cuando desee comparar en metros, primero debe convertir los valores a un tipo de geografía. La consulta entonces se convierte en:
SELECT * FROM locations WHERE ST_DWithin( ST_MakePoint(longitude, latitude)::geography, ST_MakePoint(-0.63098, 51.18291)::geography, 100 );Una respuesta que explica más sobre la diferencia entre geografía y geometría está aquí: https://gis.stackexchange.com/questions/6681/what-are-the-pros-and-cons-of-postgis-geography-and-geometry- tipos