Redis地理位置GEO命令

火热的生活服务类软件

  • 微信/陌陌
  • 美团/饿了么
  • 携程/马蜂窝
  • 高德地图/百度地图
  • .....

基本操作

  • 添加坐标点
geoadd key longitude latitude member [longitude latitude member ...]
  • 获取坐标点
geopos key member [member ...]
  • 计算坐标点距离
geodist key member1 member2 [unit]

如果两个位置之间的其中一个不存在,那么命令返回空值。
指定单位的参数unit必须是以下单位的其中一个:
m表示单位为米
km表示单位为千米
mi表示单位为英里
ft表示单位为英尺
如果用户没有显式地指定单位参数,那么geodist默认使用米作为单位。
geodist命令在计算距离时会假设地球为完美的球形,在极限情况下,这一假设最大会造成0.5%的误差。

  • 根据坐标求范围内的数据
georadius key longitude latitude radius m|km|ft|mi [withcoord][withdist][withhash][asc|desc] [count count]

以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
m 表示单位为米。
km 表示单位为千米。
mi 表示单位为英里。
ft 表示单位为英尺。
在给定以下选项时,命令会返回额外的信息:
withdist:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回.距离的单位和用户给定的范围单位保持一致。
withcoord:将位置元素的经度和纬度也一并返回。
withhash:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。这个选项主要用于底层应用或者调试,实际中的作用不大。
命令默认返回未排序的位置元素。通过以下两个参数,用户可以指定被返回位置元素的排序方式:
asc:根据中心的位置,按照从近到远的方式返回位置元素
desc:根据中心的位置,按照从远到近的方式返回位置元素。
在默认情况下,georadius命令会返回所有匹配的位置元素.虽然用户可以使用count选项去获取N个匹配元素,但是因为命令在内部
可能会需要对所有被匹配的元素进行处理,所以在对一个非常大的区域进行搜索时,即使只使用count选项去获取少量元素,
命令的执行速度也可能非常慢。但从另一方面说,使用count选项去减少需要返回的元素数量,对于减少带宽来说仍然是非常有用的。

  • 根据点求范围内数据
georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [count count]
  • 获取指定点对应的坐标hash值
geohash key member [member ...]

部分实例

geoadd cities 117.12 39.08 tianjin 114.29 38.02  shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding
#withdist 返回位置名称和中心距离
georadius cities 117 39 200 km withdist
#withcoord 返回位置名称和经纬度
georadius cities 117 39 200 km withcoord
#withdist withcoord 返回位置名称 距离 和经纬度
georadius cities 117 39 200 km withdist withcoord

geoadd cities 117.12 39.08 tianjin 114.29 38.02  shijiazhuang 118.01 39.38 tangshan 115.29 38.51 baoding
georadiusbymember cities tianjin 100 km

geohash cities tangshan 

  • GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以可以借用zrem命令实现对地理位置信息的删除.
zrem cities tianjin

posted @ 2020-02-18 14:38  if年少有为  阅读(567)  评论(0编辑  收藏  举报