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);