|NO.Z.00011|——————————|BigDataEnd|——|Hadoop&Redis.V11|——|Redis.v11|数据类型.v06|

一、geohash算法
### --- geohash算法

~~~     # Gustavo在2008年2月上线了geohash.org网站。
~~~     Geohash是一种地理位置信息编码方法。 经过geohash映射后,
~~~     地球上任意位置的经纬度坐标可以表示成一个较短的字符串。
~~~     可以方便的存储在数据库中,附在邮件上,以及方便的使用在其他服务中。
~~~     以北京的坐标举例,[39.928167,116.389550]可以转换成wx4g0s8q3jf9 。
~~~     # Redis中经纬度使用52位的整数进行编码,
~~~     放进zset中,zset的value元素是key,score是GeoHash的52位整数值。
~~~     在使用Redis进行Geo查询时,其内部对应的操作其实只是zset(skiplist)的操作。
~~~     通过zset的score进行排序就可以得到坐标附近的其它元素,
~~~     通过将score还原成坐标值就可以得到元素的原始坐标。
二、常见操作命令如下表:
命令名称 命令格式 描述
geoadd geoadd key 经度 纬度 成员名称1
经度1 纬度1 成员名称2 经度2 纬度 2 ...
添加地理坐标
geohash geohash key 成员名称1 成员名称2...
返回标准的geohash串
geopos geopos key 成员名称1 成员名称2... 返回成员经纬度
geodist geodist key 成员1 成员2 单位 计算成员间距离
georadiusbymember georadiusbymember key
成员 值单位 count 数asc[desc]
根据成员查找附
近的成员
### --- 应用场景:

~~~     1、记录地理位置
~~~     2、计算距离
~~~     3、查找"附近的人"
三、举例:
127.0.0.1:6379> geoadd user:addr 116.31 40.05 zhangf 116.38 39.88 zhaoyun 116.47 40.00 diaochan 
(integer) 3 
127.0.0.1:6379> geohash user:addr zhangf diaochan      # 获得zhangf和diaochan的geohash码
1) "wx4eydyk5m0"
2) "wx4gd3fbgs0"
127.0.0.1:6379> geopos user:addr zhaoyun               # 获得zhaoyun的经纬度
1) 1) "116.38000041246414185"
   2) "39.88000114172373145"
127.0.0.1:6379> geodist user:addr zhangf diaochan      # 计算zhangf到diaochan的距离,单位是m
"14718.6972"
127.0.0.1:6379> geodist user:addr zhangf diaochan km   # 计算zhangf到diaochan的距离,单位是km
"14.7187"
127.0.0.1:6379> geodist user:addr zhangf zhaoyun km
"19.8276"
127.0.0.1:6379> georadiusbymember user:addr zhangf 20 km withcoord withdist
count 3 asc
### --- 获得距离zhangf20km以内的按由近到远的顺序排出前三名的成员名称、距离及经纬度
~~~     # withcoord : 获得经纬度 withdist:获得距离 withhash:获得geohash码

1) 1) "zhangf"
   2) "0.0000"
   3) 1) "116.31000012159347534"
      2) "40.04999982043828055"
2) 1) "zhaoyun"
   2) "19.8276"
   3) 1) "116.38000041246414185"
      2) "39.88000114172373145"
3) 1) "diaochan"
   2) "14.7187"
   3) 1) "116.46999925374984741"
      2) "39.99999991084916218"

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

posted on   yanqi_vip  阅读(87)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示