我应该在 PostGIS 中使用什么方法来查找半径与客户相交的所有服务

What approach should I use in PostGIS to find all services that have a radius that intersect a customer

我是 PostGIS 的新手,正在寻找解决以下问题的合理方法的建议。我的服务具有 lat/lng 和服务半径(服务可用的区域)。我有一些客户只有 lat/lng。我想设置一个 table(s) 来支持索引查询 return 所有具有包含用户位置的服务区域的服务。

Service
- latitude
- longitude
- radius
- type
Customer
- latitude
- longitude

您可以在两个表中创建和索引 geography 列,然后您可以使用 ST_DWITHIN(),它使用索引

SELECT service.*
FROM service
JOIN customer
 ON ST_DWITHIN(service.geog, customer.geom, service.radius)
WHERE customer.id=123
 AND service.type='abc';