2012-10-10 139 views
5

我在PostgreSQL/PostGIS中有一個名爲'trip'的表,它具有兩個幾何列:'source_geom'('POINT')和'destination_geom'('POINT'),結束旅程的位置。PostGIS:從其他點搜索特定半徑內的點

我還有一個單獨的名爲'business'的表,其中幾何列'office_geom'('POINT')表示辦公室的位置。

我的目標是從任何辦公室位置的目的地在1000米以內的表'旅行'中選擇記錄。

爲了得到我需要的結果,我需要激發什麼查詢?

回答

2

它可以使用子查詢或連接來完成。例如,使用子查詢:

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

但這個查詢不會使用索引,可以採取大的數據集很長一段時間。如果你需要這個,你可以從geometry創建geography列,創建地理列的空間索引,並使用ST_DWithin

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