redis学习之Geospatial地理位置详解

注:该文章的知识和举例来至于狂神b站的redis教学,网站连接

官方文档介绍

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

这些数据将会存储到sorted set(底层原理实际就是Zset,所以可以用Zset命令操作geo)

这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作。

该命令以采用标准格式的参数x,y,所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。具体的限制,由EPSG:900913 / EPSG:3785 / OSGEO:41001 规定如下:

有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。

相关命令:
GEOADD
GEODIST
GEOHASH
GEOPOS
GEORADIUS
GEORADIUSBYMEMBER

GEOADD 添加某城市的经纬度信息

例:geoadd key 经度 维度 城市名
redis学习之Geospatial地理位置详解

GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)

例:GEOPOS key 城市名
redis学习之Geospatial地理位置详解

GEODIST 返回两个给定位置之间的距离

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

redis学习之Geospatial地理位置详解

GEORADIUS 指定某一经纬度为中心,返回某个直径范围内的元素

redis学习之Geospatial地理位置详解

GEORADIUSBYMEMBER

这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点指定成员的位置被用作查询的中心。

redis学习之Geospatial地理位置详解

GEOHASH 返回一个或多个位置元素的 Geohash 表示

该命令将二维的经纬度转换为一维的字符串,如果两个地点越近,字符串越相似。
redis学习之Geospatial地理位置详解

查看所有元素

redis学习之Geospatial地理位置详解

删除元素

redis学习之Geospatial地理位置详解