如何在公众点评或高德地图上找到左近的餐馆?
咱们如何在公众点评或高德地图上找到左近的餐馆?
这里须要设计两个要害服务 (见下图):
- 业务服务
- 增加、删除和更新餐厅信息
- 顾客查看餐厅详细信息
- 定位服务 (LBS, Location-Based Service)
-
给定半径和地位,返回左近的餐馆列表
那么咱们如何在数据库中 存储餐厅的地位,以便定位服务能够高效地返回后果呢?
在数据库中间接存储餐厅的经度和纬度?
这样咱们须要计算与每家餐厅之间的间隔,查问效率非常低。
放慢搜寻速度的办法之一是应用Geohash 算法。
首先,沿本初子午线和赤道将地球划分为四个象限:纬度范畴[-90,0];纬度范畴[-90,0]。
- 纬度范畴 [-90, 0] 用 0 示意
- 纬度范畴 [0, 90] 用 1 示意
- 经度范畴 [-180, 0] 用 0 示意
- 经度范畴 [0, 180] 用 1 示意
其次,将每个网格划分为四个较小的网格。每个网格能够用经度位和纬度位交替编码。
因而,当你想在红色高亮区块中搜寻左近的餐馆时,能够编写如下 SQL 语句
SELECT * FROM geohash_index WHERE geohash LIKE `01%`
Geohash 有一些局限性。一个区域可能有很多餐厅 (比方大城市核心城区),而另一个区域却一家也没有 (比方陆地或农田)。因而,还有其余更简单的算法来优化这一过程。
如果你对细节感兴趣,欢送留言通知我。
【关注公众号:ByteByteGo】
本文由 mdnice 多平台公布