在我的应用程序中,我将所有用户的 Geohash 存储在一个表中,并希望使用这些 Geohash 查找用户的邻居。
根据我在Wiki上收集的有关 Geohash 的信息:
在数据库中使用时,geohashed 数据的结构有两个优点。首先,由 geohash 索引的数据将在连续切片中包含给定矩形区域的所有点(切片数量取决于所需的精度和 geohash“断层线”的存在)。这在单个索引查询比多索引查询更容易或更快的数据库系统中特别有用。其次,这种索引结构可用于快速而肮脏的邻近搜索——最近的点通常在最近的地理哈希中。
因此,例如要找到“sj8101b085”的邻居,我只是计划通过执行以下操作来搜索哈希:
SELECT * FROM Users WHERE Geohash LIKE 'sj8101b085%'
然后通过一一减少哈希长度来触发相同的查询,即“sj8101b08%”、“sj8101b0%”等等,直到我得到所需数量的邻居。我的印象是这就是我需要做的。
但后来我发现同一篇文章底部提到的这个 C 库libgeohash 。该库有一个名为的函数GEOHASH_get_adjacent
,它为我们提供给定散列的相邻散列。geohash 字符串表示地球上的一个矩形区域。这个函数返回代表相邻矩形的地理哈希。这意味着我必须以递归方式运行此函数(邻居,然后是邻居的邻居等等),直到获得所需数量的邻居。
现在我真的很困惑我该如何编写我的搜索算法?使用第一种方法还是使用第二种方法?