redis之地理空间geo实战以及选项详解

redis之地理空间geo实战以及选项详解

Redis GEO
Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

geoadd:添加地理位置的坐标。
geopos:获取地理位置的坐标。
geodist:计算两个位置之间的距离。
georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
geohash:返回一个或多个位置对象的 geohash 值。

GEOADD

GEOADD key [NX|XX] [CH] longitude latitude member [longitude latitude member …]
summary: Add one or more geospatial items in the geospatial index represented using a sorted set
since: 3.2.0

# 添加元素 返回添加的个数
> geoadd test:geo 116 39 shanghai
1
> geopos test:geo shanghai
116.00000113248825073
38.99999918434559731
# nx:纯新增,不修改,如果存在,则不作任何操作
> geoadd test:geo nx 116 39 shanghai
0
> geopos test:geo shanghai
116.00000113248825073
38.99999918434559731
# xx:纯修改,不新增,如果存在则修改,不存在则不作任何操作,返回添加的个数0,只有加了ch才会返回修改的个数
> geoadd test:geo xx 116 40 shanghai
0
> geopos test:geo shanghai
116.00000113248825073
39.99999991084916218
  1. [NX|XX]

    • NX:表示“Not Exists”。纯新增,不修改 Don’t update already existing elements. Always add new elements.
    • XX:表示“exists”。纯修改,不新增,Only update elements that already exist. Never add elements.
    • 默认情况,有就修改没有就新增。
  2. [CH]

    • CH:表示“Changed”。返回新增元素总数+修改元素总数,不加ch只返回新增元素的个数。

      # 不加ch只返回新增元素总数
      > geoadd test:geo 116.11111 40.11111 bj
      1
      # 不加ch修改元素总数不算在内
      > geoadd test:geo 116.11111 50.11111 bj
      0
      > geopos test:geo bj
      116.11110895872116089
      50.11110907374093415
      # 加上ch返回新增元素和修改元素的总数
      > geoadd test:geo ch 116.11111 60.11111 bj
      1
      > geopos test:geo bj
      116.11110895872116089
      60.1111087346130688
      

GEODIST

GEODIST key member1 member2 [m|km|ft|mi]
summary: Returns the distance between two members of a geospatial index
since: 3.2.0

# 原始百度坐标BD-09
> geoadd test:geo 116.7882 39.540622 爱民东道华祥路口 116.782931 39.559824 新源道华祥路口
2
> geopos test:geo 爱民东道华祥路口
116.78820043802261353
39.54062225625752802
> geopos test:geo 新源道华祥路口
116.7829325795173645
39.55982276903952055
> geodist test:geo 爱民东道华祥路口 新源道华祥路口 km
2.182
# 将百度坐标系转为WGS84坐标
> geoadd test:geo 116.77571551835673 39.53331705056734 爱民东道华祥路口 	116.7704850498911 39.55243330632807 新源道华祥路口
0
> geopos test:geo 爱民东道华祥路口
116.77571743726730347
39.53331718987630694
> geopos test:geo 新源道华祥路口
116.77048712968826294
39.55243405686004365
> geodist test:geo 爱民东道华祥路口 新源道华祥路口 km
2.1731

说明:

  1. WGS84坐标系

  2. GCJ-02(中国火星坐标系)在WGS84基础上做了偏移和加密

  3. BD-09(百度坐标系) 在GCJ-02基础上做了偏移和加密

  4. 由于各种原因中国国内不让使用WGS84坐标系

  5. 通过结论可以看出用redis geo计算两个位置之间的距离 有所偏差,好像也并不是很大

    微信截图_20240824170652

  6. 百度坐标拾取地址https://api.map.baidu.com/lbsapi/getpoint/index.html

  7. 坐标在线转换工具https://tool.lu/coordinate/?ivk_sa=1021577i

GEOHASH

GEOHASH key member [member …]
summary: Returns members of a geospatial index as standard geohash strings
since: 3.2.0

> Geohash test:geo 爱民东道华祥路口
wx50ckc6r20

GEOPOS

GEOPOS key member [member …]
summary: Returns longitude and latitude of members of a geospatial index
since: 3.2.0

GEORADIUS

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point
since: 3.2.0

  • [WITHCOORD] 查询结果显示坐标
  • [WITHDIST] 查询结果显示距离
  • [WITHHASH] 查询结果显示hash
  • [COUNT count [ANY]] 只显示 count个,[ANY],找到count个就不再继续找了
  • [ASC|DESC] 排序
  • [STORE key] 将查询结果报错到key里面.数据结构zset score为hash
  • [STOREDIST key] 将查询结果报错到key里面.数据结构zset score为到中心点的距离
> geoadd test:geo 116.77230566740036 39.544611907362324 新奥大学 116.78676813840866 39.5384297224547 大官地村 116.78331345319748 39.534402050532506 观锦城 116.76229566335678 39.553546799448995 大长亭村 116.75371259450912 39.559171345701564 小长亭村 116.73862248659134 39.57108200042931 万达学院 116.7310693860054 39.52131021574452 北华航天工业学院 116.76123887300491 39.60063684914719 北京联合大学 116.70570105314255 39.51458306578764 廊坊北站 116.70827597379684 39.50895345009274 廊坊站
10
> georadius test:geo 116.78676813840866 39.5384297224547 5 km
大长亭村
小长亭村
新源道华祥路口
大官地村
爱民东道华祥路口
观锦城
> georadius test:geo 116.78676813840866 39.5384297224547 5 km WITHCOORD WITHDIST WITHHASH count 3 asc
大官地村
0.0000
4069241163792491
116.78676813840866089
39.53842972245470122
观锦城
0.5371
4069229686821146
116.78331345319747925
39.53440205053250622
爱民东道华祥路口
1.1054
4069229683961546
116.77571743726730347
39.53331718987630694
> georadius test:geo 116.78676813840866 39.5384297224547 5 km count 3 asc STORE  test:geo:radius:store
3
# STORE选项与WITHDIST, WITHHASH and WITHCOORDS不兼容
> georadius test:geo 116.78676813840866 39.5384297224547 5 km WITHCOORD WITHDIST WITHHASH count 3 asc STORE  test:geo:radius:store
ERR STORE option in GEORADIUS is not compatible with WITHDIST, WITHHASH and WITHCOORDS options
> type test:geo:radius:store
zset
> ZRANGE test:geo:radius:store 0 -1 WITHSCORES
爱民东道华祥路口
4069229683961546
观锦城
4069229686821146
大官地村
4069241163792491
> type  test:geo:radius:sstoredist
zset
> ZRANGE test:geo:radius:sstoredist 0 -1 WITHSCORES
大官地村
0
观锦城
0.53712926544788142
爱民东道华祥路口
1.1054155718829237

GEORADIUSBYMEMBER

GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STOREDIST key]
summary: Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member
since: 3.2.0

> georadius test:geo 116.77230566740036 39.544611907362324 5 km asc
新奥大学
新源道华祥路口
爱民东道华祥路口
大长亭村
大官地村
观锦城
小长亭村
万达学院
北华航天工业学院
> GEORADIUSBYMEMBER test:geo 新奥大学 5 km asc
新奥大学
新源道华祥路口
爱民东道华祥路口
大长亭村
大官地村
观锦城
小长亭村
万达学院
北华航天工业学院

GEOSEARCH

GEOSEARCH key [FROMMEMBER member] [FROMLONLAT longitude latitude] [BYRADIUS radius m|km|ft|mi] [BYBOX width height m|km|ft|mi] [ASC|DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH]
summary: Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle.
since: 6.2

从指定的起点(成员或经纬度)开始,按照指定的范围(半径或矩形框)搜索地理位置。

除了根据半径搜索还能根据矩形框搜索

> GEOSEARCH test:geo FROMMEMBER 新奥大学 BYRADIUS 5 km asc
新奥大学
新源道华祥路口
爱民东道华祥路口
大长亭村
大官地村
观锦城
小长亭村
万达学院
北华航天工业学院
> GEOSEARCH test:geo FROMMEMBER 新奥大学 BYBOX 5 3 km asc
新奥大学
新源道华祥路口
爱民东道华祥路口
大长亭村
大官地村
观锦城

GEOSEARCHSTORE destination source [FROMMEMBER member] [FROMLONLAT longitude latitude] [BYRADIUS radius m|km|ft|mi] [BYBOX width height m|km|ft|mi] [ASC|DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST] [WITHHASH] [STOREDIST]
summary: Query a sorted set representing a geospatial index to fetch members inside an area of a box or a circle, and store the result in another key.
since: 6.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523405.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MongoDB之MongoDB Compass工具

MongoDB Compass 是 MongoDB 官方提供的一款图形化用户界面 (GUI) 工具,用于与 MongoDB 数据库进行交互和管理。Compass 提供了丰富的功能,能够帮助开发者、数据库管理员以及数据分析师轻松管理和分析 MongoDB 数据。以下是对 MongoDB Compass 的详细介绍…

Elasticsearch之储存原理和优化

存储原理 上篇介绍了在 ES 内部索引的写处理流程,这个流程是在 ES 的内存中执行的,数据被分配到特定的分片和副本上之后,最终是存储到磁盘上的,这样在断电的时候就不会丢失数据。 具体的存储路径可在配置文件 ../config/elastics…

多维空间:理解复杂认知的关键

TLDR: 这篇综述讨论了如何通过多种降维技术揭示认知科学中的潜在表征空间,并探讨了选择适合研究目标的嵌入算法时需要考虑的关键因素。看完后发现,除了图结构、排序数据的降维让人印象深刻外,其它部分似乎缺乏新意。许多内容(比如模型表现、如…

AUTO TECH 2025 广州国际新能源汽车功率半导体技术展览会

AUTO TECH 2025 广州国际新能源汽车功率半导体技术展览会 The 12th China Guangzhou EVs Power Electronics technology Expo 时间:2025年11月20日-22日 地点:广州保利世贸博览馆 (PWTC Expo) 亚洲领先的车用功率半导体技术专业展;是与…

C++面向对象详解(上)

类的定义 class 类名{ //成员变量 //成员方法 } C实现的第一个小案例 通过这个案例我们可以了解到C独有的特点,优点:方法和变量放在了一起,优化了代码的调用,如果在C语言中我们函数调用还要写上函数的返回类型,在C中&…

手把手教你对接旺店通旗舰版API拉取国内电商店铺订单数据

前言 做国内电商的公司通常会使用比如旺店通这类ERP拉取和分析自己店铺的订单数据,并且可能需要进一步将ERP的订单数据拉取到公司自己做的后台做更个性化的数据分析和需求。这篇博客我以旺店通旗舰版为例,讲解如何通过他们API拉取订单数据到本地。 准备…

热点王炸模型!准确率高达100%!Transformer+GASF+RP-1D-2D-GRU 小白也能发一区!创新性拉满!

适用平台:Matlab2023b版及以上 参考文献一:中文EI期刊 《西安交通大学学报》 文献:《采用格拉姆角场-卷积神经网络-时序卷积网络混合模型的锂离子电池健康状态估计》中的①时序图像融合模型;②一维时序转格拉姆角场模型。参考文献…

如何用 Typed.js 制作炫酷的打字效果?

前言 在前端开发的世界中,动态和交互性是用户体验的关键。 Typed.js 是一个轻量级的 JavaScript 库,它能够以编程方式模拟打字效果,为网页增添动态的文本展示。 这篇文章将带你深入了解 Typed.js 的魔力,探索它如何为前端开发带…

【PyTorch】深入解析 `with torch.no_grad():` 的高效用法

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、with torch.no_grad(): 的作用二、with torch.no_grad(): 的原理三、with torch.no_grad(): 的高效用法3.1 模…

IOS 21 发现界面(UITableView)单曲列表(UITableView)实现

发现界面完整效果 本文实现歌单列表效果 文章基于IOS 20 发现界面(UITableView)歌单列表(UICollectionView)实现 继续实现发现界面单曲列表效果 单曲列表Cell实现 实现流程: 1.创建Cell,及在使用UITable…

如何使用 Mistral 和 Llama2 构建 AI 聊天机器人

开始使用 Mistral 让我们从 Mistral 7B Instruct 的 GGUF 量化版本开始,并使用 AutoClasses ‘AutoModelForCausalLM’ 之一来加载模型。AutoClasses 可以帮助我们自动检索给定模型路径的模型。AudoModelForCausalLM 是具有因果语言建模的模型类之一,这…

【STM32+HAL库】---- 驱动DHT11温湿度传感器

硬件开发板:STM32F407VET6 软件平台:cubemaxkeilVScode1 DHT11工作原理 1.1 简介 DHT11温湿度传感器是一种数字式温湿度传感器,其工作原理基于集成了湿度感测元件和NTC温度感测元件的传感器模块。以下是DHT11温湿度传感器的工作原理&#x…

SQL - SQL优化

在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考 一、查询SQL尽量不要使用select *,而是具体字段 // 建议 SELECT id,user_name,age,tel FROM user// 不建议…

同城便民信息生活小程序源码系统 求职招聘+房产出租+相亲交友 带完整的安装代码包以及搭建部署教程

系统概述 同城便民信息生活小程序源码系统是一款专为满足城市居民多元化需求而设计的综合性服务平台。该系统通过整合求职招聘、房产出租、相亲交友等核心功能模块,旨在打造一个集信息发布、查询、交流于一体的闭环生态系统。用户可以在小程序内轻松发布或浏览各类…

【STM32+HAL库】---- 驱动MAX30102心率血氧传感器

硬件开发板:STM32F407VET6 软件平台:cubemaxkeilVScode1 MAX30102心率血氧传感器工作原理 MAX30102传感器是一种集成了红外光源、光电检测器和信号处理电路的高度集成传感器,主要用于心率和血氧饱和度的测量。以下是MAX30102传感器的主要特点…

使用光敏电阻设计照度计

照度计是一种使用 SI 单位勒克斯测量照度和光发射度的设备。它有效地测量落在给定面积单位上的光的功率量,不同之处在于功率测量被加权以反映人眼对不同波长的光的敏感度。描述照度计的一种更简单的方法是,它测量落在传感器上的光的亮度。市售照度计的价…

使用PyTorch从零构建Llama 3

我们上次发了用PyTorch从零开始编写DeepSeek-V2的文章后,有小伙伴留言说希望介绍一下Llama 3。那么今天他就来了,本文将详细指导如何从零开始构建完整的Llama 3模型架构,并在自定义数据集上执行训练和推理。 [图1]:Llama 3架构展示…

Linux/Ubuntu服务器 screen 安装与使用

一、screen简单介绍 在Linux系统中,screen是一个非常强大的终端仿真器,它允许用户在一个终端窗口中创建多个子窗口,每个子窗口都可以运行一个独立的会话。screen的主要特点包括: 会话分离:screen允许用户在终端会话中运…

宝宝护眼灯哪个牌子好?2024年热门宝宝护眼灯款式推荐

宝宝护眼灯哪个牌子好?在日常生活的点点滴滴中,适宜的灯光扮演着至关重要的角色,无论是学习还是办公等环境,皆需要恰当的照明。为此,人们通常会备上一款台灯,特别是对于长期与电脑为伴的设计师、影像绘图专…

爆改YOLOv8|利用yolov10的C2fCIB改进yolov8-高效涨点

1,本文介绍 本文介绍了一种改进机制,通过引入 YOLOv10 的 C2fCIB 模块来提升 YOLOv8 的性能。C2fCIB 模块中的 CIB(Compact Inverted Bottleneck)结构采用了高效的深度卷积进行空间特征混合,并使用点卷积进行通道特征…