geospatial 地理空间
朋友的定位,附近的人,打车距离的计算
Redis的Geo,3.2版本推出,可以推算地理位置的信息,两地之间的距离
城市经纬度查询:http://www.jsons.cn/lngcode/
geoadd
# geoadd 先经度后维度(官方文档疑似写错了) 127.0.0.1:6379[1]> geoadd china:city 39.9 116.4 beijing (error) ERR invalid longitude,latitude pair 39.900000,116.400000 经纬度反了会报错 # 两极无法直接添加!南北极,而且我们一般会下载城市数据通过java程序一次性导入 127.0.0.1:6379[1]> geoadd china:city 116.4 39.9 beijing # 批量 geoadd china:city 116.4 39.9 beijing 121.4 31.2 shanghai 114.1 22.5 shenzhen 113.3 23.1 guangzhou 114.2 22.3 xianggang 113.5 22.2 aomen 121.9 29.5 xiangshan (integer) 1 127.0.0.1:6379[1]> geoadd china:city 121.4 31.2 shanghai (integer) 1 127.0.0.1:6379[1]> geoadd china:city 114.1 22.5 shenzhen (integer) 1 127.0.0.1:6379[1]> geoadd china:city 113.3 23.1 guangzhou (integer) 1 127.0.0.1:6379[1]> geoadd china:city 114.2 22.3 xianggang (integer) 1 127.0.0.1:6379[1]> geoadd china:city 113.5 22.2 aomen (integer) 1 127.0.0.1:6379[1]> geoadd china:city 121.9 29.5 xiangshan (integer) 1
geopost
# 获取地理位置 127.0.0.1:6379[1]> GEOPOS china:city beijing shanghai shenzhen xianggang 1) 1) "116.39999896287918091" 2) "39.90000009167092543" 2) 1) "121.40000134706497192" 2) "31.20000061483705878" 3) 1) "114.09999936819076538" 2) "22.50000113800319212" 4) 1) "114.19999748468399048" 2) "22.29999896492555678"
geodist
两人之间的直线距离
- m 表示单位为米。
- km 表示单位为千米。
- mi 表示单位为英里。
- ft 表示单位为英尺。
127.0.0.1:6379[1]> GEODIST china:city beijing xianggang "1968579.6084" 127.0.0.1:6379[1]> GEODIST china:city beijing xianggang m "1968579.6084" 127.0.0.1:6379[1]> GEODIST china:city beijing xianggang km "1968.5796" 127.0.0.1:6379[1]> GEODIST china:city beijing xianggang ft "6458594.5159" 127.0.0.1:6379[1]> GEODIST china:city beijing xianggang mi "1223.2217"
georadius
以给定的经纬度为中心,找出某一半径内所有的元素
实现附近的人:
1、获取所有附近的人的地址(GPS)
# 范围查找 经度110 纬度 30为圆心 半径100km内所有的城市 127.0.0.1:6379[1]> GEORADIUS china:city 110 30 100 km (empty list or set) # 范围查找 经度110 纬度 30为圆心 半径1000km内所有的城市 127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km 1) "aomen" 2) "xianggang" 3) "shenzhen" 4) "guangzhou" # 范围查找 经度110 纬度 30为圆心 半径100km内所有的城市 带上经纬度和城市距离该点的直线距离 127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km withcoord withdist 1) 1) "aomen" 2) "935.1758" 3) 1) "113.49999994039535522" 2) "22.19999914574732003" 2) 1) "xianggang" 2) "953.3433" 3) 1) "114.19999748468399048" 2) "22.29999896492555678" 3) 1) "shenzhen" 2) "928.8366" 3) 1) "114.09999936819076538" 2) "22.50000113800319212" 4) 1) "guangzhou" 2) "834.6077" 3) 1) "113.29999834299087524" 2) "23.10000005307264104" # count 控制个数 127.0.0.1:6379[1]> GEORADIUS china:city 110 30 1000 km withcoord withdist count 2 1) 1) "guangzhou" 2) "834.6077" 3) 1) "113.29999834299087524" 2) "23.10000005307264104" 2) 1) "shenzhen" 2) "928.8366" 3) 1) "114.09999936819076538" 2) "22.50000113800319212" # GEORADIUSBYMEMBER 根据给定的元素确定中心点,再进行查找 127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city shanghai 1000 km withdist 1) 1) "xiangshan" 2) "195.0791" 2) 1) "shanghai" 2) "0.0000" 127.0.0.1:6379[1]> GEORADIUSBYMEMBER china:city shanghai 2000 km withdist 1) 1) "aomen" 2) "1271.1657" 2) 1) "xianggang" 2) "1220.4023" 3) 1) "shenzhen" 2) "1207.9869" 4) 1) "guangzhou" 2) "1205.0747" 5) 1) "xiangshan" 2) "195.0791" 6) 1) "shanghai" 2) "0.0000" 7) 1) "beijing" 2) "1067.7424" # GEOHASH 将二维的经纬度转换为一维的字符串,经过hash之后的结果 # # 如果两个字符串越像,则代表越接近! # 127.0.0.1:6379[1]> GEOHASH china:city beijing shanghai 1) "wx4fbxxfke0" 2) "wtw36xbc1j0"