PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Der effizienteste Weg, um Punkte innerhalb eines bestimmten Radius von einem bestimmten Punkt aus zu finden

Das Erstellen eines Puffers zum Auffinden der Punkte ist definitiv ein Tabu, weil (1) der Aufwand für die Erstellung der Geometrie, die den Puffer darstellt, und (2) die Punkt-in-Polygon-Berechnung viel weniger effizient ist als eine einfache Entfernungsberechnung.

Sie arbeiten offensichtlich mit Daten (Längengrad, Breitengrad), also sollten Sie diese in ein geeignetes kartesisches Koordinatensystem umwandeln, das dieselbe Maßeinheit wie Ihre Entfernung von 10.000 hat. Wenn diese Entfernung in Metern angegeben ist, können Sie den Punkt aus der Tabelle auch in geography umwandeln und berechnen Sie direkt auf den (long, lat) Koordinaten. Da Sie nur die Punkte identifizieren möchten, die sich innerhalb der angegebenen Entfernung befinden, könnten Sie den ST_DWithin() Funktion mit Berechnung auf der Kugel für zusätzliche Geschwindigkeit (nicht in sehr hohen Breiten oder bei sehr großen Entfernungen):

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