我在 PostgreSQL/PostGIS 中有一个trip
以两个几何列命名的表:(source_geom
)POINT
和destination_geom
(POINT
)表示旅程的开始和结束位置。
我还有一个单独的表格,以business
几何列office_geom
( POINT
) 命名,指示办公室的位置。
我的目标是从表中选择trip
目的地在距离任何办公地点1000 米以内的记录。
我需要触发什么查询才能获得所需的结果?
我在 PostgreSQL/PostGIS 中有一个trip
以两个几何列命名的表:(source_geom
)POINT
和destination_geom
(POINT
)表示旅程的开始和结束位置。
我还有一个单独的表格,以business
几何列office_geom
( POINT
) 命名,指示办公室的位置。
我的目标是从表中选择trip
目的地在距离任何办公地点1000 米以内的记录。
我需要触发什么查询才能获得所需的结果?
可以使用子查询或连接来完成。使用子查询的示例:
SELECT * FROM business
WHERE EXISTS(
SELECT 1 FROM trip
WHERE ST_Distance_Sphere(trip.destination_geom, business.office_geom) < 1000
)
但是这个查询不会使用索引,并且在大数据集上可能需要很长时间。如果需要,可以geography
从 创建列geometry
,在地理列上创建空间索引,并使用ST_DWithin:
select *
from business b
join trip t on ST_DWithin(trip.destination_geogr, business.office_geogr, 1000)