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

Den mest effektive måde at finde punkter inden for en bestemt radius fra et givet punkt

Oprettelse af en buffer for at finde punkterne er et klart nej-nej på grund af (1) overheaden ved at skabe den geometri, der repræsenterer bufferen, og (2) punkt-i-polygon-beregningen er meget mindre effektiv end en simpel afstandsberegning.

Du arbejder tydeligvis med (længdegrad, breddegrad) data, så du bør konvertere dem til et passende kartesisk koordinatsystem, som har samme måleenhed som din afstand på 10.000. Hvis afstanden er i meter, så kan du også kaste punktet fra tabellen til geography og regn direkte på de (lange, lat) koordinater. Da du kun ønsker at identificere de punkter, der er inden for den angivne afstand, kan du bruge ST_DWithin() funktion med beregning på kuglen for øget hastighed (gør ikke dette på meget høje breddegrader eller med meget lange afstande):

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


  1. Installation af mysql på leopard:Kan ikke oprette forbindelse til lokal MySQL-server via socket

  2. Sådan får du sidste post i hver gruppe i MySQL

  3. Multi level for loop i PHP

  4. Oracle PL/SQL HTTP-anmodningssvar-kodningsproblem