我如何在 Yelp 或 Uber 服务中使用 S2?

How would I use S2 in a Yelp or Uber service?

假设我有一份餐馆列表,并且我有一位正在寻找附近餐馆的顾客的位置。我如何使用 S2?

根据我在没有 S2 的情况下的理解,我将维护自己的包含所有餐厅的四叉树,然后获取客户的纬度和经度并查询四叉树以查找节点和相邻四叉树节点。

S2 如何融入这张图片?它会取代我维护自己的四叉树的需要吗?

我对 S2 的理解是,在引擎盖下有四叉树和 Hilber space-填充曲线,给定纬度和经度可以提供 64 位单元 ID,标识四叉树中的节点经纬度属于.

您通常在 S2 中执行此操作的方式是通过现有的 S2 API classes,例如在这里我会使用 S2ClosestPointQuery.

在内部,查询 class 构建了一个内部索引(在本例中 - 使用餐厅的 S2 单元格),当您想要查找客户附近的所有点时,它会计算 S2 的 Hilbert 上的单元格范围距离搜索位置(在本例中为客户位置)给定距离内的曲线,并在索引中查找这些单元格。

这篇来自 Tinder 的文章正是我要找的。

https://medium.com/tinder-engineering/geosharded-recommendations-part-1-sharding-approach-d5d54e0ec77a

如果您正在构建需要分区地理数据的服务,您可以使用 S2 为您提供特定位置的数字编码或特定半径的一系列数字编码。您将自己维护分区方案。