假设我有一个餐馆列表,并且我有一个正在寻找附近餐馆的客户的位置。我怎么能使用 S2?
根据我在没有 S2 的情况下的理解,我将维护自己的包含所有餐厅的四叉树,然后我将获取客户的纬度和经度并查询我的四叉树以找到节点和相邻四叉树节点。
S2 如何融入这张照片?它会取代我维护自己的四叉树的需要吗?
我对 S2 的理解是,引擎盖下有四叉树和 Hilber 空间填充曲线,给定纬度和经度可以提供 64 位单元 ID,用于标识纬度和经度所属的四叉树中的节点。
假设我有一个餐馆列表,并且我有一个正在寻找附近餐馆的客户的位置。我怎么能使用 S2?
根据我在没有 S2 的情况下的理解,我将维护自己的包含所有餐厅的四叉树,然后我将获取客户的纬度和经度并查询我的四叉树以找到节点和相邻四叉树节点。
S2 如何融入这张照片?它会取代我维护自己的四叉树的需要吗?
我对 S2 的理解是,引擎盖下有四叉树和 Hilber 空间填充曲线,给定纬度和经度可以提供 64 位单元 ID,用于标识纬度和经度所属的四叉树中的节点。
您通常在 S2 中执行此操作的方式是通过现有的 S2 API 类,例如在这里我将使用S2ClosestPointQuery
.
在内部,查询类构建了一个内部索引(在这种情况下 - 使用餐厅的 S2 单元格),当您想要查找客户附近的所有点时,它会计算 S2 的希尔伯特曲线上与给定距离内的单元格范围搜索位置(在本例中为客户位置),并在索引中查找这些单元格。
这篇来自 Tinder 的文章正是我想要的。
如果您正在构建需要对地理数据进行分区的服务,则可以使用 S2 为您提供特定位置的数字编码或特定半径的数字编码范围。您将自己维护分区方案。