乐趣区

关于后端:如何在大众点评或高德地图上找到附近的餐馆

如何在公众点评或高德地图上找到左近的餐馆?

咱们如何在公众点评或高德地图上找到左近的餐馆?


这里须要设计两个要害服务 (见下图):

  1. 业务服务
  2. 增加、删除和更新餐厅信息
  3. 顾客查看餐厅详细信息
  4. 定位服务 (LBS, Location-Based Service)
  5. 给定半径和地位,返回左近的餐馆列表

那么咱们如何在数据库中 存储餐厅的地位,以便定位服务能够高效地返回后果呢?

在数据库中间接存储餐厅的经度和纬度?
这样咱们须要计算与每家餐厅之间的间隔,查问效率非常低。

放慢搜寻速度的办法之一是应用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 多平台公布

退出移动版