在我的应用程序中,我将所有用户的Geohash存储在一个表中,并希望找到使用这些Geohashes的用户的邻居。Geohash:使用libgeohash查找邻居
按照信息,我收集到的有关地理散列上Wiki:
如果在数据库中,geohashed数据的结构有两个 优势。首先,由geohash索引的数据将具有在连续切片中给定矩形区域的 的所有点(切片的数量 取决于所需的精度以及存在地理散列“故障 行”)。这在数据库系统中特别有用,其中单个索引上的查询 比多索引 查询更容易或更快。其次,这个索引结构可以用于 快速和肮脏的邻近搜索 - 最接近的点通常在最接近的地理杂乱之间。
因此对于例如找到“sj8101b085”的邻居,我曾计划在做搜索的哈希值:
SELECT * FROM Users WHERE Geohash LIKE 'sj8101b085%'
由一个即“sj8101b08%”,“sj8101b0%”,降低哈希长度一个发射相同的查询,然后直到我得到所需的邻居数量。我的印象是,这是我需要做的。
但后来我发现这个C库libgeohash在同一篇文章的底部提到。该库有一个叫做GEOHASH_get_adjacent
的函数,它给了我们给定散列的相邻哈希值。 geohash字符串表示地球上的矩形区域。这个函数返回表示相邻矩形的地理杂乱。这意味着我必须在递归中运行这个函数(邻居,然后是邻居的邻居等),直到我得到所需的邻居数量。
现在我很困惑我该如何编写我的搜索算法?使用第一种方法或使用第二种?
您是否正在使用Python等编程语言与数据库进行交互?如果是这样,我很乐意为您提供一种替代方法来搜索给定点和输入点的半径(或输入geohash)。 – abeusher
是的请,如果你想分享:)我使用C++,但仍然想知道。 – Atul