erlang 实现geohash算法

需求:实现查找附近 200、 500、 1000米范围的好友

关于 geohash 介绍 http://blog.csdn.net/pi9nc/article/details/11401679

×× 这里忽略球面的误差,因为像千米之内的数据可以看作是二维平面

扩展:将经度线和纬度线切割

切割规则:按轮来解释吧

第一轮 (-180, 0) 0    (0, 180)1

第二轮 (-180, -90) 0    (-90, 0) 1   (0, 90) 0  (90, 180) 1

.......

规律:

   每一轮切分得到的块数都是上一轮的两倍

   上一轮的任何节点都切分到下一轮的两个节点

推论1:在某一轮,任何一个节点,从根节点到该节点的二进制编码都是唯一的

推论2:同一轮节点的编码,可以由相邻节点的二进制编码加或者减1得到

综上扩展思考得:方可把经度和纬度各自看做一颗满二叉树,每一轮进行组合,那么则可以把世界切分满二叉树的块,

假设一个玩家在一个块中,那么可以通过经度和纬度进行二进制的加减,再组合得到附近八个块的二进制编码,

所以每一个玩家附近的人所在的块都得到了独有二进制码

再度分析:如果把二进制码压缩成整数,那么由中心位置O(X, Y),由 O 中心,将X,Y 进行左右移动便可获取附近8个位置

代码:

-module(radar_misc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值