PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Le moyen le plus efficace de trouver des points dans un certain rayon à partir d'un point donné

La création d'un tampon pour trouver les points est un non-non définitif en raison (1) de la surcharge de création de la géométrie qui représente le tampon, et (2) le calcul du point dans le polygone est beaucoup moins efficace qu'un simple calcul de distance.

Vous travaillez évidemment avec des données (longitude, latitude), vous devez donc les convertir en un système de coordonnées cartésien approprié qui a la même unité de mesure que votre distance de 10 000. Si cette distance est en mètre, vous pouvez également convertir le point de la table en geography et calculer directement sur les coordonnées (long, lat). Étant donné que vous souhaitez uniquement identifier les points situés à l'intérieur de la distance spécifiée, vous pouvez utiliser le ST_DWithin() fonction avec calcul sur la sphère pour plus de vitesse (ne le faites pas lorsque vous êtes à de très hautes latitudes ou avec de très longues distances) :

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