设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 运营中心 > 产品 > 正文

产品功能解读:「附近的人」是按什么规则计算的(2)

发布时间:2017-04-17 07:43 所属栏目:30 来源:程序员和产品经理
导读:GeoHash算法将二维的经纬度(x,y)转换成一维信息(字符串),同时解决了隐私问题。 以下图为例,把某个区域划分为 9 个格子, 9 个给格子分别命名为WX4ER,WX4G2、WX4G3 等这样的字符串,每一个字符串是某个格子的代

GeoHash算法将二维的经纬度(x,y)转换成一维信息(字符串),同时解决了隐私问题。

以下图为例,把某个区域划分为 9 个格子, 9 个给格子分别命名为WX4ER,WX4G2、WX4G3 等这样的字符串,每一个字符串是某个格子的代号,用这个代号来代表被划分的子区域。

也就是说,每个格子(子区域)内所有的点(经纬度坐标)都共享相同的GeoHash字符串,大家表示自己的所在位置时,只需要说出该字符代号(比如我们在做自我介绍时说我是广州天河人,“天河”就是广州被划分的其中一个格子),这样既可以保护隐私(只表示大概区域位置而不是具体的点),一维的信息也比较容易计算和做缓存,只要格子划分地越小,距离就越精确。

那GeoHash字符串如何表示自己的精确等级呢?

GeoHash字符串越长,表示的范围越精确。如图所示, 5 位的编码能表示 10 平方千米范围的矩形区域,而 6 位编码能表示更精细的区域(约0. 34 平方千米)

GeoHash字符串相似的表示距离相近,比如上图中的:

  • WX4G0 9 和
  • WX4G0 8 较近,和
  • WX4FBX较远

这样可以利用字符串的前缀匹配来查询附近的POI信息(POI信息表示一栋房子、一个商铺、一个邮筒、一个公交站等),在地图程序中找附近的医院、加油站等都有应用。

同样地,我们可以用此方法来圈到同一区域(格子)或者附近区域的人群,再计算大概的距离,而不用把与所有人的距离计算出来,再做排序。

再来回顾一下两种计算方法:

(1)只保存了每个人的坐标,要找出某个用户附近的人

  • 把所有人的坐标与当前用户的坐标计算一次,算出距离
  • 按找算出的距离升序排列,返回附近的人

(2)保存了用户的坐标+GeoHash字符串,要找出附近的人

  • 按区域字符串相似度划出该区域的人群,区域划分越小,距离越近。

很明显, 2 方法要快一些。

GeoHash字符串在位置接近矩形边界时不太准确。

比如红色的点是A用户,绿色的两个点从上到下分别是B用户和C用户,但在圈定人群时会发现距离A较远的C用户的GeoHash编码与A一样(因为在同一个GeoHash区域块上),而较近的B用户的GeoHash编码与A不一样,算起来好像C与A较近。

  • A:WX4G0
  • B:WX4G2
  • C:WX4G0

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读