2012-10-10 45 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)