2012-10-10 5 views
5

Ich habe eine Tabelle in PostgreSQL/PostGIS mit dem Namen 'trip' mit zwei Geometrie-Spalten: 'source_geom' ('POINT') und 'destination_geom' ('POINT') zeigen an und Endpunkt einer Reise.PostGIS: Punkte innerhalb eines bestimmten Radius von anderen Punkten aus finden

Ich habe eine weitere separate Tabelle namens "Geschäft" mit Geometriespalte "office_geom" ("POINT"), die den Standort von Büros angibt.

Mein Ziel ist es, die Datensätze aus der Tabelle 'Reise', deren Ziel innerhalb von 1000 Metern von eines der Büro-Standort.

Welche Abfrage muss ich auslösen, um die gewünschten Ergebnisse zu erhalten?

Antwort

2

Es kann mit Unterabfrage oder Joins getan werden. Beispiel für die Verwendung Unterabfrage:

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

Aber diese Abfrage nicht Indizes verwenden und eine lange Zeit auf große Datensätze nehmen. Wenn Sie diese benötigen, können Sie geography Spalten aus geometry, erstellen von räumlichen Indizes für Geographie Spalten erstellen und verwenden ST_DWithin:

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