快速体验redis 3.2的GEOAPI
发布于 8 年前 作者 captainblue2013 4909 次浏览 来自 分享

近日 redis 发布了3.2版本,期待已久的GEO Api终于能够使用,我们第一时间体验一下

GEOADD

GEOADD key longitude latitude member [longitude latitude member …]

例子:

GEOADD user_location 103.1123 30.676 "Tom"
参数讲解:
GEOADD 添加地理信息
user_location 定义一个地理信息点的集合,叫做 用户位置
103.1123  经度,X坐标
30.676  纬度,Y坐标
"Tom"   名字,用户名之类
(后3个参数作为一组信息,可以无线重复多个,一次录入多个点)
比如:
GEOADD user_location 103.1123 30.676 "Tom" 111.27 44.566 "Jack"

注意的是,很多时候我们看到的经纬度单位 度|分|秒,GEOADD里要转换成小数。 同时,有效的经度从-180度到180度,有效的纬度从-85.05112878度到85.05112878度。 所以,地球两极是处理不了的。

具体原因是,GEO将球形转换成平面的XY矩形,极点无法转化。 (参考 EPSG:900913 / EPSG:3785 / OSGEO:41001 )

GEODIST

GEODIST key member1 member2 [unit]

例子:

GEODIST user_location Jack Tom km
参数讲解:
GEODIST 计算两点距离
user_location 地理信息集合,目前只能计算同一个集合下的点
Jack Tom 两个点的名字
km 单位,m 表示米,km 表示千米,mi 表示英里,ft 表示英尺。
返回:
"1701.7446"    表示两点距离1701.74 km

GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。

附近的人 GEORADIUS , GEORADIUSBYMEMBER

GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC]

例子:
GEORADIUS user_location 100 35 1000 km 
表示从指定集合里,查找 (100,35)这个点附近1000km的点,
返回: Tom ,说明Jack不在1000km内。

参数说明:
user_location  指定的地理信息集合
100 35 	经纬度
1000	距离
km		距离单位,m|km|ft|mi 
以下可选开关:
WITHCOORD	返回坐标
WITHDIST	返回距离
WITHHASH	返回GeoHash
COUNT count	表示只返回多少个结果,如:COUNT 10 
ASC		按距离正序
DESC	按距离倒序

所以,假如是要获取附近1公里的人,就是
GEORADIUS user_location {X} {Y} 1 km WITHDIST ASC

值得注意的是,使用 WITHDIST 来返回距离时,使用的单位和radius的单位是一致的,所以,尽量使用小单位,给自己更多的操作空间。

5 回复

我装了3.2怎么提示unknown command ‘GEOADD’

@blackjack 一定是你安装的方法不对, 输入 INFO 看看信息

100个赞,我也是做地图相关项目的,有空多交流

这个实用666

回到顶部