Redis地理坐标距离查询怎么做?经纬度间的空间距离怎么精准计算?

文章导读
在 Redis 中查询地理坐标距离主要使用 GEO 相关命令。首先通过 GEOADD 命令将地点的经纬度及名称存储到有序集合(ZSET)中,底层采用 Geohash 编码。计算两点间精准空间距离使用 GEODIST 命令,支持米、千米、英里等单位,其内部基于 Haversine 公式计算球面距离。此外,还可利用 GEORADIUS 或 GEOSEARCH 命令查询指定半径范围内的地点,实现附近搜索
📋 目录
  1. 如何在 Redis 中快速推算两地之间的距离?——Geo 篇
  2. 使用 Redis 查询地理坐标点之间的距离 (redis 经纬度距离查询)
  3. Redis GEO 地理位置搜索:实战示例 + 底层原理解析
  4. 基于 Redis 的经纬度计算距离实现
  5. 使用 Redis 计算两点经纬度距离
  6. Redis 7 的地理信息命令太太太牛了!一文教你如何使用
  7. FAQ
A A

在 Redis 中查询地理坐标距离主要使用 GEO 相关命令。首先通过 GEOADD 命令将地点的经纬度及名称存储到有序集合(ZSET)中,底层采用 Geohash 编码。计算两点间精准空间距离使用 GEODIST 命令,支持米、千米、英里等单位,其内部基于 Haversine 公式计算球面距离。此外,还可利用 GEORADIUS 或 GEOSEARCH 命令查询指定半径范围内的地点,实现附近搜索功能。Redis 的 GEO 功能高效且便捷,适用于各类地理位置服务场景。

如何在 Redis 中快速推算两地之间的距离?——Geo 篇

有效的经度从 -180 度到 180 度。有效的纬度从 -85.05112878 度到 85.05112878 度,如果超过此范围,redis 会直接报错。你可以通过这个网站 http://www.jsons.cn/lngcode/来查询一下一些城市的经纬度。127.0.0.1:6379>geoadd china:city116.4039.90beijing(integer)1127.0.0.1:6379>geoadd china:city121.4731.23shanghai(integer)1127.0.0.1:6379>geoadd china:city106.5029.53chongqing114.0522.52shengzhen(integer)2127.0.0.1:6379>geoadd china:city120.1630.24hangzhou108.9634.26xian(integer)2 每条记录包括经度、纬度以及位置的名称。我们可以看到,其实 geo 底层实现原理就是 zset,这表明 Redis 内部使用了有序集合存储地理空间信息,每个地点的名称是有序集合的成员,而其经纬度则用于计算分数,以确保成员的有序性。当信息存入数据库后,我们可以执行各种查询:查询单个城市位置 127.0.0.1:6379>geopos china:city shanghai1)1)"121.47000163793563843"2)"31.22999903975783553" geopos 命令用于获取一个或多个成员的地理位置信息 (经度和纬度),这个命令返回上海的经纬度。km 表示单位为千米。ft 表示单位为英尺。127.0.0.1:6379>geodist china:city shanghai chongqing"1447673.6920" geodist 命令用于计算两个位置之间的距离,默认单位是米。(截至 2026 年 4 月 13 日)

使用 Redis 查询地理坐标点之间的距离 (redis 经纬度距离查询)

使用 Redis 查询地理坐标点之间的距离 Redis 是一个开源的内存数据库,它支持各种数据结构,并且拥有丰富的命令集合。其中,Redis 支持地理坐标点上的操作,让用户可以保存和查询地理坐标点之间的距离和信息。通过 geo 命令,用户可以使用 zadd 命令将地理坐标点及其相关信息添加到有序集合中,使用 geopos 命令获取地理坐标点的经纬度信息,使用 geohash 命令获取地理坐标点的哈希值,使用 geodist 命令获取两个地理坐标点之间的距离等等。geodist 命令可以计算两个给定地理坐标之间的距离,单位可以是米、千米或英里。如果没有指定 unit,则默认使用米作为单位。 "1067.8046"georadius 命令可以从有序集合中获取指定地理坐标点范围内的成员,然后使用 geodist 命令计算它们之间的距离。其中,key 是有序集合的名称,longitude 和 latitude 是中心点的经度和纬度,radius 是范围半径,unit 是距离的计量单位,可以是 m(米)、km(千米) 或 mi(英里)。ASC 和 DESC 控制返回成员的顺序,COUNT 指定返回成员的数量,STORE 和 STOREDIST 可以将返回的成员及其距离保存到另一个有序集合中。(2025 年 5 月 24 日的资料)

Redis GEO 地理位置搜索:实战示例 + 底层原理解析

Redis 不仅是高性能的键值数据库,还内置了地理位置 (GEO) 功能,支持存储经纬度并快速查询附近的地点。存储带经纬度的地理位置 查询某个点附近的对象 (半径范围) 计算两点距离 GEO 命令适用于 Redis 5.x:GEOADD、GEORADIUS、GEORADIUSBYMEMBER、GEODIST、GEOPOS、GEOHASH。2.1 添加城市地理位置 GEOADD city_geo114.30539330.593099"武汉·江汉路" GEOADD city_geo113.62536834.746599"郑州·二七塔" 一键获取完整项目代码 2.2 查询某城市周边范围 GEORADIUSBYMEMBER city_geo"上海·外滩"500km WITHDIST WITHCOORD ASC GEORADIUS city_geo114.05786822.543099300km WITHDIST WITHCOORD ASC 一键获取完整项目代码 2.3 计算城市间距离 GEODIST city_geo"北京·天安门""上海·外滩"km 一键获取完整项目代码 GEOPOS city_geo"广州·天河" 一键获取完整项目代码 GEOADD 实际上就是把地理坐标转换为 52 位整数 geohash,然后存入 ZSET 的 score。通过 ZSET 的有序特性,Redis 可以快速查找范围内的元素。在 ZSET 内,成员名称保留原名 score 是压缩后的 geohash 编码(资料日期为 2025 年 10 月 27 日)

Redis地理坐标距离查询怎么做?经纬度间的空间距离怎么精准计算?

基于 Redis 的经纬度计算距离实现

1.将地理位置存储到 Redis 中 首先我们需要将地理位置存储到 Redis 中。Redis 提供了 geo 相关命令,可以方便地将地理位置存储到 Redis 中。以下是存储地理位置的示例代码:geoadd places 116.404, 39.915, "place1" geoadd places 116.418, 39.917, "place2" geoadd places 116.368, 39.898, "place3" 这里我们以北京市的三个地点为例,将三个地点的经纬度和名称存储到了一个名为"places"的键中。2.计算两点之间的距离 有了地理位置的存储,我们就可以方便地计算两点之间的距离。Redis 提供了多个 geo 相关命令,可以方便地实现计算距离的功能。其中,最重要的是"geodist"命令。以下是计算两点之间距离的示例代码:geodist places place1 place2 这里我们以刚刚存储的"places"键中的"place1"和"place2"两个地点为例,计算了它们之间的距离。3.代码实现 下面是完整的基于 Redis 的经纬度计算距离的示例代码:import redis r = redis.Redis(host='localhost', port=6379, db=0) r.geoadd("places", 116.404, 39.915, "place1") r.geoadd("places", 116.418, 39.917, "place2") r.geoadd("places", 116.368, 39.898, "place3") res = r.geodist("places", "place1", "place2") print(res) 这里我们首先连接 Redis,然后将三个地点的经纬度和名称存储到了一个名为"places"的键中。我们使用"geodist"命令计算了"place1"和"place2"两个地点之间的距离,并打印了结果。运行代码,你会看到输出的结果是大约 2.7 千米。(发布时间是 2025 年 9 月 25 日)

使用 Redis 计算两点经纬度距离

步骤 1:添加地理位置数据 使用 GEOADD 命令向 Redis 添加地理位置数据。例如,我们添加两个城市的经纬度:GEOADD locations 13.361389 38.115556"Palermo" GEOADD locations 15.087269 37.502669"Catania" AI 写代码 bash 这里,locations 是有序集合的名称,13.361389 38.115556 和 15.087269 37.502669 分别是 Palermo 和 Catania 的经纬度,而"Palermo"和"Catania"是对应的名称。步骤 2:计算距离 使用 GEODIST 命令计算两个地理位置之间的距离。你可以指定距离的单位,如千米 (km)、米 (m)、英里 (mi) 或英尺 (ft)。以下是计算 Palermo 和 Catania 之间距离的命令:GEODIST locations Palermo Catania km AI 写代码 bash 这将返回 Palermo 和 Catania 之间的距离,单位为千米。如果你想以米为单位,可以这样操作:GEODIST locations Palermo Catania m AI 写代码 bash 步骤 3:查看结果 执行上述 GEODIST 命令后,Redis 将返回一个浮点数,表示两个地点之间的直(搜索结果收录于 2024 年 6 月 8 日)

Redis 7 的地理信息命令太太太牛了!一文教你如何使用

GEOADD:将指定的地理位置添加到指定的键中。GEODIST:计算两个位置之间的距离。GEOHASH:获取指定位置的地理哈希值。GEOPOS:获取一个或多个位置的经度和纬度。GEORADIUS:根据指定的位置和距离,在指定的键中查找附近的位置。GEORADIUSBYMEMBER:根据指定的位置成员和距离,在指定的键中查找附近的位置。GEOSEARCH:根据指定的查询参数,在指定的键中搜索符合条件的位置。GEOSEARCHSTORE:根据指定的查询参数,在指定的键中搜索符合条件的位置,并将结果存储到新的键中。(来自 2023 年 9 月 6 日的资料)

Redis地理坐标距离查询怎么做?经纬度间的空间距离怎么精准计算?

FAQ

Redis GEO 命令底层是如何实现的?

Redis GEO 底层实现原理是有序集合(ZSET)。地理位置信息被转换为 Geohash 编码,作为 ZSET 的 score 存储,成员名称保留原名,利用 ZSET 的有序性快速查找范围内元素。

GEODIST 命令支持哪些距离单位?

Redis地理坐标距离查询怎么做?经纬度间的空间距离怎么精准计算?

GEODIST 命令支持米(m)、千米(km)、英里(mi)和英尺(ft)等单位。如果不指定单位,默认使用米作为计算结果的单位。

经纬度的有效范围是多少?

有效的经度范围从 -180 度到 180 度。有效的纬度范围从 -85.05112878 度到 85.05112878 度,如果超过此范围,Redis 会直接报错。