在 bbox 中获取前 N 个加权 GPS 点

Get top N weighted GPS points in bbox

给定大量 GPS 坐标及其权重,是否有开源软件(database/search 引擎)来获取边界框或圆内的前 N ​​个值?

SELECT * FROM list WHERE IS_IN_BBOX(coords, bbox) ORDER BY weight DESC LIMIT 10;

我希望该列表包含数千万项。边界框可能非常大(整个世界)或非常小(缩放 18),但搜索应该仍然相当快。另外,我们可以为此使用 Elasticsearch 吗?我看到它有基于距离的搜索,但没有基于权重的搜索。 Postgis 怎么样?

您可以使用 ST_MakeEnvelope 和 && 运算符

SELECT *
FROM list
WHERE list.coords && ST_MakeEnvelope(left, bottom, right, top, srid) 
ORDER BY list.weight;

相应地替换 left, bottom, right, top 和 srid 以进行搜索