2012-10-10 23 views
5

Mam tabelę w PostgreSQL/PostGIS o nazwie "trip" z dwiema kolumnami geometrii: "source_geom" ("POINT") i "destination_geom" ("POINT") wskazującą początek i zakończenie podróży.PostGIS: Znajdowanie punktów w określonym promieniu z innych punktów

Mam jeszcze jedną osobną tabelę o nazwie „biznes” z kolumny geometrii „office_geom” („punkt”), która wskazuje lokalizację biura.

Moim celem jest wybranie rekordów z tabeli "podróż", której miejsce docelowe znajduje się w odległości 1000 metrów od w dowolnej lokalizacji biura.

Jakie zapytanie należy wysłać, aby uzyskać wyniki, których wymagam?

Odpowiedz

2

Można to zrobić za pomocą podkwerendy lub łączenia. Przykład użycia podzapytania:

SELECT * FROM business 
WHERE EXISTS(
    SELECT 1 FROM trip 
    WHERE ST_Distance_Sphere(trip.destination_geom, business.office_geom) < 1000 
) 

Ale to zapytanie nie będzie używać indeksów i może zająć dużo czasu na dużych zbiorach danych. Jeśli to potrzebne, można utworzyć geography kolumny z geometry, tworzenie indeksów przestrzennych na temat geografii kolumn i używać ST_DWithin:

select * 
    from business b 
    join trip t on ST_DWithin(trip.destination_geogr, business.office_geogr, 1000)