基于 GeoHash 实现“查找附近 5 公里的人”是一个非常经典的地理位置服务(LBS)面试题和实战场景。 核心思路可以概括为:将二维的经纬度映射为一维的字符串(GeoHash),利用字符串的前缀匹配特性快速筛选出大致范围内的用户,最后通过精确计算距离进行过滤。 以下是详细的实现步骤和逻辑: --- 1. 理解 GeoHash 的核心特性 区域划分:GeoHash 将地球划分为一个个矩形(Bucket)。 前缀特性:两个 GeoHash 字符串的公共前缀越长,代表这两个点在地理位置上越接近。 精度与长度:字符串越长,表示的矩形区域越小(精度越高)。 2. 确定 GeoHash 的精度(长度) 首先,我们需要选择一个合适的 GeoHash 长度,使其覆盖的区域大小略大于或接近 5 公里。 根据 GeoHash 的精度对照表(近似值,随纬度变化): 长度 4:约 39km × 19km 长度 5:约 4.9km × 4.9km 长度 6:约 1.2km × 0.6km 结论:选择 长度 5 是最合适的。虽然单个长度为 5 的格子(约 5km 宽)可能无法完全覆盖以用户为圆心的 5k...