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

news2024/9/22 11:41:17

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.coloradmin.cn/o/2102830.html

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

相关文章

【时时三省】(C语言基础)指针进阶6

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题1: sizeof(数组名)-数组名表示整个数组的-计算的是整个数组的大小 &数组名-数组名表示整个数组,取出的是整个数组的地址 …

SprinBoot+Vue宠物领养救助微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

Windows如何恢复已删除文件?电脑数据恢复完整指南!

无论你是要释放磁盘空间还是因为其他原因删除或误删重要文件或文件夹后,现在一定想知道怎么还原。其实不用担心,在你删除文件时,你的电脑并没有完全删除它们,只是将它们标记为已删除,等待新数据覆盖。所以你还有很多方…

论文速读|BiGym:一款基于演示的移动双手操作机器人基准

项目地址:BiGym: A Demo-Driven Mobile Bi-Manual Manipulation Benchmark BiGym 是一个针对移动双手操作的机器人学习基准,包含 40 个在家庭环境中进行的任务,如简单的目标接近到复杂的厨房清洁。这些任务涵盖了从固定的目标接近到需要与各种…

监控平台之rollup打包

设计思路 1.根据模块,通过index.js去调用执行调用 2.WebEyeSDK.js暴露方法,同时定义init方法,去初始化config里的上报参数 3.rollup/build里入口文件为WebEyeSDK.js进行打包 4.打包编译用babel,同时安装babel/preset-env智能预…

SQL 编程基础

SQL(结构化查询语言)广泛应用于数据库操作,是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门,了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言,结合实际示例,帮助你轻松理…

(纯JS)图片裁剪

前言 不同的展示平台或印刷尺寸对图片的比例和尺寸有特定要求。通过裁剪,可以将照片调整为适合社交媒体、网站、相框或画册等不同输出渠道的尺寸和比例。工作上,有些人可能不方便上网,需要离线完成图片的裁剪.无意中发现,纯JS也可以制作出这样一个工具. 目录 功能 优点 主页…

亚信安全荣获“2024年网络安全优秀创新成果大赛”优胜奖

近日,由中央网信办网络安全协调局指导、中国网络安全产业联盟(CCIA)主办的“2024年网络安全优秀创新成果大赛”评选结果公布。亚信安全信舱ForCloud荣获“创新产品”优胜奖,亚信安全“宁波市政务信息化网络数据安全一体化指挥系统…

记:子线程实现QTcpSocket读写的问题

最近在改进考勤系统客户端多线程实现时遇到了线程异步和野指针问题 client:多线程实现ui界面显示(主线程)、人脸检测(检测线程)、socket网络通信(通信线程)三个任务。 主线程: TimerEvent实时…

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词 1、下载docker的Windows版本。 docker下载地址: https://docs.docker.com/desktop/install/windows-install/https://docs.docker.com/desktop/install/windows-install/ 2、设…

知识点复习3

Linux文件 索引节点inode 存放的是数据在磁盘中的位置 以及文件的一些基本信息比如说文件大小还有权限,目录项纪录的是文件的名字,索引节点指针,目录项是由内核维护的一个数据结构,存在内存中。 Linux命令 (1) Linux Top命令参数详…

东北买房除了房子便宜外,还可能省下数十万,给孩子美好未来

由于鹤岗的影响,如今人们纷纷在全国寻找实惠房子,不过对于购房者来说,其实在东北买房除了房子便宜之外,还有额外的好处,这是其他省份仅有便宜房子一个条件比不上的。 对于如今的大众来说,除了买房实现人生的…

【Python】按格式输出指定内容至新的Excel表中

优化之前写的文档更新工具,输出指定列的数据到公式表中,且确保数值单元格不会被识别为文本,导致Excel文档数值计算公式失效 ExcelTool.py import os import pandas as pd from openpyxl import load_workbook import json### Excel表指定shee…

论文《Improving your graph neural networks:A High-Frequency Booster》笔记

【CLAR 2022 ICDMW】作者指出,现有的GNN模型主要关注于消息传递机制,但这些模型往往受限于低通滤波器的局限,导致在多层堆叠时性能下降。为了解决这个问题,论文提出了一种新的正则化方法,称为补全拉普拉斯正则化&#…

PP强酸强碱氮气柜和普通氮气柜的区别及共同点

PP强酸强碱氮气柜通常采用聚丙烯(PP)材料制成,聚丙烯是一种耐腐蚀性强的塑料材质,能有效抵抗强酸、强碱、盐溶液等腐蚀性物质的侵蚀,不易老化,使用寿命长。因其优秀的化学稳定性和耐腐蚀性,特别…

2024第三届大学生算法大赛 真题训练一 解题报告 | 珂学家

前言 题解 这是第三届大学生算法大赛(第二届为清华社杯)的赛前练习赛一. 这是上界比赛的体验报告: 2023第二届“清华社杯”大学生算法大赛 解题报告(流水账版) | 珂学家,个人还是非常推荐这个比赛。 难度分布:4 easy/4 mid-hard/2 hard 赛前练习赛一…

15、Django Admin添加自定义字段功能

修改模型类HeroAdmin admin.register(Hero) class HeroAdmin(admin.ModelAdmin):change_list_template "entities/heroes_changelist.html"... # 此处原代码不动,只增加此前后代码def get_urls(self):urls super().get_urls()my_urls [path(immort…

Linux【2】文件目录-ls进阶

目录 ls 组合使用:ls -lha​编辑 ls 通配符 ls .是隐藏文件 ls -a可以显示所有文件包括隐藏文件 ls- l列表形式,详细信息 ls -l -h 大小更详细 组合使用:ls -lha ls 通配符 *任意长度 ?一个字符 带扩展名 可选from…

开源 AI 智能名片 S2B2C 商城小程序在社区团购中的应用与价值

摘要:本文探讨了开源 AI 智能名片 S2B2C 商城小程序在社区团购中的重要作用。社区团购的团长角色多元,包括小区店主、水站与快递站站长、宝妈等,其用户基础广泛。优秀团长的专业引导和良好服务至关重要,而开源 AI 智能名片 S2B2C …

Open3D 曲率下采样

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 三、实现效果 3.1原始点云 3.2曲率下采样后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述 曲…