sql >> Base de Datos >  >> RDS >> PostgreSQL

La forma más eficiente de encontrar puntos dentro de un cierto radio desde un punto dado

La creación de una zona de influencia para encontrar los puntos es definitivamente un no-no debido a (1) la sobrecarga de crear la geometría que representa la zona de influencia, y (2) el cálculo de punto en el polígono es mucho menos eficiente que un simple cálculo de distancia.

Obviamente, está trabajando con datos (longitud, latitud), por lo que debe convertirlos a un sistema de coordenadas cartesiano apropiado que tenga la misma unidad de medida que su distancia de 10,000. Si esa distancia está en metros, entonces también podría proyectar el punto de la tabla a geography y calcular directamente sobre las coordenadas (longitud, latitud). Dado que solo desea identificar los puntos que están dentro de la distancia especificada, puede usar el ST_DWithin() función con cálculo en la esfera para mayor velocidad (no hagas esto cuando estés en latitudes muy altas o con distancias muy largas):

SELECT id, point 
FROM my_table 
WHERE ST_DWithin(point::geography,
                 ST_GeogFromText('POINT(-116.768347 33.911404)'),
                 10000, false);