2012-10-10 18 views
5

PostgreSQL/PostGIS'te iki geometri sütununda 'trip' adlı bir tablo var: 'source_geom' ('POINT') ve 'destination_geom' ('POINT'), başlangıç ​​ve bir yolculuğun bitişi.PostGIS: Diğer noktalardan belirli yarıçaptaki noktaları bulma

Ofislerin konumunu gösteren 'office' geometri sütununa sahip 'office_geom' ('POINT') adlı bir tane daha 'ayrı' tablom var.

Amacım, varış yeri numaralı ofis konumundan adresinden 1000 metre mesafede bulunan 'gezi' tablosundan kayıtları seçmektir.

İstediğim sonuçları almak için hangi sorguyu kullanmam gerekiyor?

cevap

2

Alt sorgu veya birleştirmeler kullanılarak yapılabilir. Örnek kullanarak alt sorgu:

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

Ama bu sorgu dizinleri kullanmaz ve büyük veri kümeleri üzerinde uzun zaman alabilir. Eğer bu gerekiyorsa,, geometry den geography sütunlar oluşturmak coğrafya sütunlar üzerinde kayma dizinler oluşturmak ve kullanabilirsiniz ST_DWithin:

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