2012-10-10 9 views
5

Ho una tabella in PostgreSQL/PostGIS denominata "trip" con due colonne geometriche: "source_geom" ("POINT") e "destination_geom" ("POINT") che indicano l'avvio e punto finale di un viaggio.PostGIS: trovare punti all'interno di un certo raggio da altri punti

Ho un'altra tabella separata denominata 'business' con la colonna geometrica 'office_geom' ('POINT') che indica la posizione degli uffici.

Il mio obiettivo è quello di selezionare i record dalla tabella 'viaggio' la cui destinazione è entro 1000 metri da qualsiasi ufficio posizione.

Quale query è necessario attivare per ottenere i risultati richiesti?

risposta

2

Può essere eseguito utilizzando subquery o join. Esempio con subquery:

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

Ma questa query non utilizzerà gli indici e può richiedere molto tempo su grandi insiemi di dati. Se avete bisogno di questo, è possibile creare geography colonne geometry, creare indici spaziali su colonne di geografia, e utilizzare ST_DWithin:

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