Geospatial地理空间,Redis 在 3.2 版本中加入了地理空间(geospatial)以及索引半径查询的功能,主要用在需要地理位置的应用上。将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中,这些数据将会存储到 sorted set。
经度:longitude,有效返围[-180,180],正的表示东经,负的表示西经
纬度:latitude,有效返围[-85.05112878,85.05112878],正的表示北纬,负的表示南纬
地点经纬度查询添加链接描述
1.geoadd key longitude latitude member [longitude latitude member …]
将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中
127.0.0.1:6379> geoadd city 116.405285 39.904989 beijing
(integer) 1
127.0.0.1:6379> geoadd city 121.472644 31.231706 shanghai
(integer) 1
127.0.0.1:6379> geoadd city 113.280637 23.125178 guangzhou
(integer) 1
127.0.0.1:6379> geoadd city 114.085947 22.547 shenzhen
(integer) 1
2.geopos key member [member …]
geopos 获取指定城市的地理位置经纬度,可以从 key 里返回所有给定地理位置的经纬度
127.0.0.1:6379> geopos city beijing
1) 1) "116.40528291463851929"
2) "39.9049884229125027"
127.0.0.1:6379> geopos city shanghai guangzhou
1) 1) "121.47264629602432251"
2) "31.23170490709807012"
2) 1) "113.28063815832138062"
2) "23.12517743834835215"
3.geodist key member1 member2 [m | km | ft | mi]
获取两个目的地之间的距离
- m 表示单位为米(默认)
- km 表示单位为千米
- mi 表示单位为英里
- ft 表示单位为英尺
127.0.0.1:6379> geodist city beijing shanghai km
"1067.5980"
127.0.0.1:6379> geodist city beijing shanghai
"1067597.9668"
4.georadius key lopngitude latitude radius [m | km | ft | mi] [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC] […]
以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素
127.0.0.1:6379> geodist city beijing shenzhen km #北京到深圳距离
"1943.0240"
127.0.0.1:6379> geodist city beijing guangzhou km #北京到广州距离
"1889.3706"
127.0.0.1:6379> geodist city beijing shanghai km #北京到上海距离
"1067.5980"
127.0.0.1:6379> georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [ST 127.0.0.1:6379> georadius key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [ST 127.0.0.1:6379> georadius city 116.405285 39.904989 1890km
(error) ERR wrong number of arguments for 'georadius' command
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km #(116.405285,39.904989)距离1890km以内的地方
1) "guangzhou"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km WITHCOORD #(116.405285,39.904989)距离1890km以内的地方带经纬度
1) 1) "guangzhou"
2) 1) "113.28063815832138062"
2) "23.12517743834835215"
2) 1) "shanghai"
2) 1) "121.47264629602432251"
2) "31.23170490709807012"
3) 1) "beijing"
2) 1) "116.40528291463851929"
2) "39.9049884229125027"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km
1) "guangzhou"
2) "shanghai"
3) "beijing"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withdist #(116.405285,39.904989)距离1890km以内的地方带距离
1) 1) "guangzhou"
2) "1889.3707"
2) 1) "shanghai"
2) "1067.5979"
3) 1) "beijing"
2) "0.0002"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 2 #(116.405285,39.904989)距离1890km以内的地方只显示2个
1) 1) "beijing"
2) "0.0002"
3) 1) "116.40528291463851929"
2) "39.9049884229125027"
2) 1) "shanghai"
2) "1067.5979"
3) 1) "121.47264629602432251"
2) "31.23170490709807012"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 3
1) 1) "beijing"
2) "0.0002"
3) 1) "116.40528291463851929"
2) "39.9049884229125027"
2) 1) "shanghai"
2) "1067.5979"
3) 1) "121.47264629602432251"
2) "31.23170490709807012"
3) 1) "guangzhou"
2) "1889.3707"
3) 1) "113.28063815832138062"
2) "23.12517743834835215"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 3 asc
1) 1) "beijing"
2) "0.0002"
3) 1) "116.40528291463851929"
2) "39.9049884229125027"
2) 1) "shanghai"
2) "1067.5979"
3) 1) "121.47264629602432251"
2) "31.23170490709807012"
3) 1) "guangzhou"
2) "1889.3707"
3) 1) "113.28063815832138062"
2) "23.12517743834835215"
127.0.0.1:6379> georadius city 116.405285 39.904989 1890 km withcoord withdist count 1
1) 1) "beijing"
2) "0.0002"
3) 1) "116.40528291463851929"
2) "39.9049884229125027"
5.georadiusbymember key member radius [m | km | ft | mi] [WITHCOORD] [WITHDIST] [COUNT count] [ASC|DESC] […]
返回给定元素位置给定距离范围以内的元素
127.0.0.1:6379> georadiusbymember city beijing 2000 km withcoord #返回距离北京2000km以内的地方带经纬度
1) 1) "shenzhen"
2) 1) "114.08594459295272827"
2) "22.54699993773966327"
2) 1) "guangzhou"
2) 1) "113.28063815832138062"
2) "23.12517743834835215"
3) 1) "shanghai"
2) 1) "121.47264629602432251"
2) "31.23170490709807012"
4) 1) "beijing"
2) 1) "116.40528291463851929"
2) "39.9049884229125027"
127.0.0.1:6379> georadiusbymember city beijing 2000 km withdist #返回距离北京2000km以内的地方带距离
1) 1) "shenzhen"
2) "1943.0240"
2) 1) "guangzhou"
2) "1889.3706"
3) 1) "shanghai"
2) "1067.5980"
4) 1) "beijing"
2) "0.0000"
6.geohash key member [member …]
获取给定元素hash计算结果
127.0.0.1:6379> geohash city beijing
1) "wx4g0b7xrt0"
127.0.0.1:6379> geohash city beijing shanghai
1) "wx4g0b7xrt0"
2) "wtw3sjt9vg0"
7.总结
常用于推算地理位置的信息,两地之间的距离,朋友定位,附近的人,打车距离计算…