Tworzenie bufora w celu znalezienia punktów jest zdecydowanie nie-nie, ponieważ (1) narzut związany z tworzeniem geometrii reprezentującej bufor oraz (2) obliczanie punktu w wielokącie jest znacznie mniej wydajne niż proste obliczanie odległości.
Oczywiście pracujesz z danymi (długość, szerokość geograficzna), więc powinieneś przekonwertować je na odpowiedni kartezjański układ współrzędnych, który ma tę samą jednostkę miary co odległość 10 000. Jeśli ta odległość jest w metrach, możesz również rzucić punkt z tabeli na geography
i obliczyć bezpośrednio na współrzędnych (długi, łat). Ponieważ chcesz zidentyfikować tylko punkty znajdujące się w określonej odległości, możesz użyć ST_DWithin()
funkcja
z obliczeniami na kuli dla zwiększenia prędkości (nie rób tego na bardzo dużych szerokościach geograficznych lub na bardzo dużych odległościach):
SELECT id, point
FROM my_table
WHERE ST_DWithin(point::geography,
ST_GeogFromText('POINT(-116.768347 33.911404)'),
10000, false);