当前位置: 首页 > article >正文

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.kler.cn/news/289536.html

相关文章:

  • Recyclerview部分列固定部分列滑动学习备忘
  • linux 下转化 ppk 文件 为openssh 文件(private,public)
  • 3600关成语填字APP游戏ACCESS\EXCEL数据库
  • 使用脚本编写 HTTP 查询的更有效方法
  • SprinBoot+Vue高校实验室管理微信小程序的设计与实现
  • 网站如何针对不同的DDOS进行防御?
  • 黑马JavaWeb开发笔记10(前端完结)——Vue路由介绍入门、前端工程打包、nginx前端部署
  • IP SSL证书如何实现IP的https
  • Nginx中间件配置
  • RLHF(带有人类反馈的强化学习)初探
  • 科研绘图系列:python语言制标准差的直方图(STD histogram plot)
  • 模拟登录页,华为账号一键登录
  • Charles抓包全流程(Mac端+iOS端)
  • SpringBoot学习(3)Redis使用
  • blender中获取虚拟相机渲染图片上每像素对应的纹理上的像素值
  • C_深入理解指针(四) —— 回调函数、qsort使用举例、qsort函数的模拟实现
  • idea问题解决:java: -source 7 中不支持 方法引用 (请使用 -source 8 或更高版本以启用 方法引用)
  • zhidianyun01/基于 ThinkPHP+Mysql 灵活用工+灵活用工源码+灵活用工平台源码
  • EF框架中的修改
  • 利用Spring Boot实现服务降级与熔断机制
  • Spring MVC中的DispatcherServlet:核心调度者
  • 行为型设计模式-备忘录(memento)模式
  • Shell编程基础知识
  • Trm理论 2(Word2Vec)
  • 如何通过k8s来降低运营成本?
  • cuda编程[5]:矩阵乘法--使用静态共享内存优化
  • C/C++语言基础--函数基础(函数定义、调用、生命周期、递归)
  • Linux服务器CPU和IO的监控利器-iostat简介
  • 【重学 MySQL】一、数据库概述
  • 一个好用的Maven依赖冲突解决插件:Maven Helper