PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Najskuteczniejszy sposób znajdowania punktów w określonym promieniu od danego punktu

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Musisz utworzyć wyzwalacz, który zwiększa wartość w tabeli po wstawieniu

  2. PostgreSQL - Uwierzytelnianie hasłem nie powiodło się po dodaniu ról grupowych

  3. Filtr TypeORM OneToMany w relacjach nie wpływa na wynik

  4. PostgreSQL - jak uruchomić VACUUM z kodu spoza bloku transakcyjnego?

  5. Prześlij dane z tematu Kafki do PostgreSQL w JSON