PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il modo più efficiente per trovare punti entro un certo raggio da un determinato punto

La creazione di un buffer per trovare i punti è un no-no definitivo a causa di (1) il sovraccarico della creazione della geometria che rappresenta il buffer e (2) il calcolo point-in-polygon è molto meno efficiente di un semplice calcolo della distanza.

Ovviamente stai lavorando con dati (longitudine, latitudine), quindi dovresti convertirli in un sistema di coordinate cartesiane appropriato che abbia la stessa unità di misura della tua distanza di 10.000. Se quella distanza è in metri, puoi anche trasmettere il punto dalla tabella a geography e calcola direttamente sulle coordinate (long, lat). Dato che vuoi identificare solo i punti che si trovano entro la distanza specificata, puoi usare ST_DWithin() funzione con calcolo sulla sfera per velocità aggiunta (non farlo a latitudini molto elevate o con distanze molto lunghe):

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