空间搜索geohash概述;redis的geo命令

news2025/6/26 7:28:33

概述

通常在一些2C业务场景中会根据用户的位置来搜索一些内容。通常提供位置搜索的都是直接通过redis/mongodb/es等中间件实现的。

但是这些中间件又是怎么实现位置搜索的呢;
查了一番资料,发现背后一个公共的算法Geohash

搜索的时候可以根据距离对应的位数,对Geohash值进行模糊搜索

Geohash

经度和纬度是2个值,如果能变成一个值,那对搜索莱索就方便很多了。

geohash本质其实是一个二分法,将定位的经纬度,在整个经纬度刻度中不断地二分。

经度和纬度的二进制编码转换

目标经纬度为 123.123456, 12.123456

地球纬度区间是[-90,90]

  1. 区间[-90,90]进行二分为[-90,0),[0,90],称为左右区间,可以确定12.123456属于右区间[0,90],给标记为1
  2. 然后再将区间[0,90]进行二分, [0,45),[45,90],可以确定12.123456属于左区间 [0,45),给标记为0
  3. 递归上述过程12.123456总是属于某个区间[a,b]。 随着每次迭代区间[a,b]总在缩小,并越来越逼近12.123456

定的纬度x(12.123456)属于左区间,则记录0,如果属于右区间则记录1,序列的长度跟给定的区间划分次数有关;

经度的计算也是同理;

在这里插入图片描述

交叉合并经度和纬度的二进制编码

从第 0 位开始,偶数位放经度,奇数位放纬度,得到完整的二进制编码;
然后将二进制编码分组并计算出对应的 Base32 编码

在这里插入图片描述

在这里插入图片描述

geohash长度和km误差对照

在这里插入图片描述

redis的geo命令

redis中的geohash值是存在zset中的,所以删除可以用zrem

  1. GEOADD 添加经纬度坐标到集合中
  2. GEODIST 获取集合中两个成员的距离
  3. GEOHASH 获取成员的geohash
  4. GEOPOS 获取集合中成员的经纬度坐标
  5. GEORADIUS 根据经纬度获取给定半径内的成员列表
  6. GEORADIUSBYMEMBER 根据成员获取给定半径内的成员列表

在这里插入图片描述

参考文案
https://segmentfault.com/a/1190000042971576
https://segmentfault.com/a/1190000038529554

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

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

相关文章

认识Redis 主从同步、事务和Memcached的区别

08- 什么是 Redis 主从同步? Redis 的主从同步(replication)机制,允许 Slave 从 Master 那里,通过网络传输拷贝到完整的数据备份,从而达到主从机制。 主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从…

Spring Boot:Java 应用开发高效之道

Spring Boot 是一种革命性的框架,旨在简化 Java 应用的创建和部署过程。通过自动化配置和简化项目搭建流程,Spring Boot 大大加速了开发周期,让 Java 应用开发变得更加高效和便捷。 核心优势: 快速启动和简化配置:Spr…

【C++】STL中list的使用

前言:在前面学习的 过程中我们学习了STL中的string,vector,今天我们来进一步的学习STL中的list的使用方法。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C学习 👈 💯代…

设置sqlserver management的字体大小

在用sqlserver management的时候,总感觉怪怪的,然后发现是字体太小的原因。 1)设置一下字体,工具--选项: 2)环境--字体和颜色--显示其设置(环境) 3)选择微软雅黑&#xf…

【Linux】从零开始配置新的服务器的机器学习环境

终端远程登录 ssh -p [端口号] [服务器用户名][服务器IP]或者 ssh [用户名][主机地址]第二种的前提是在.ssh\config中配置了host 安装文本编辑器vim 主要用于后续的文本编辑,个人比较习惯用vim,根据自己喜好选择 更新apt sudo apt update安装文本编辑…

额定值高于 1 kW 的电机驱动应用使用 GaN 逆变器 IC

GaN 技术的三个重要的参数是更高的带隙、临界场和电子迁移率。当这些参数结合起来时,由于 GaN 晶体的临界场高 10 倍,因此与硅 MOSFET 相比,电端子之间的距离可以近 10 倍。这导致了 GaN 和硅之间的明显区别:中压 GaN 器件可以基于…

【C++】类的默认成员函数

类的默认成员函数 类的六个默认成员函数构造函数构造函数的概念构造函数的特性 析构函数析构函数的概念析构函数的特性 构造函数与析构函数的调用顺序拷贝构造拷贝构造的概念拷贝构造的特性赋值运算符重载运算符重载赋值运算符重载前置与后置重载输入输出流重载 const修饰成员实…

STM32开发过程中碰到的问题总结 - 2

文章目录 前言1、Hex文件和Bin文件的区别2. STM32的boot0 在0和1有什么区别3. keil下的translate和builder有什么区别4. 为什么RTOS中区分中断内调用和中断外调用5. STM32中中断内运行的代码应该注意哪些事项6. STM32的定时器中断中 使用printf没有任何输出7. 将makefile编译的…

浅谈C++基本框架内涵及其学习路线

目录 一.C的内涵本质 1. 面向对象编程(OOP) 2. 低级控制 3. 模板编程 4. 标准库(STL) 5. 多范式支持 二.学习路线 1. 基础阶段 C基础语法 函数 数组和指针 2. 面向对象编程 类和对象 继承和多态 运算符重载 3. 高级…

【elementui源码解析】如何实现自动渲染md文档-第二篇

目录 1.概要 2.引用文件 1)components.json 2)json-template/string 3)os.EOL 3.变量定义 4.模版填充 5.MAIN_TEMPLATE填充 6.src下的index.js文件 1)install 2)export 7.总结 1.概要 今天看第二个命令no…

Blender骨骼创建

骨骼系统 建立 使用Shift A添加骨骼或在添加|骨架中添加一段骨骼 骨骼的三种模式 -物体模式:做动画,摆人物pose时在该模式 -编辑模式:进行骨骼搭建(选择一段骨骼,然后按E挤出一段骨骼并进行调整) -姿…

解析ISP许可证:构建安全可靠的网络空间

在当今数字化时代,互联网已成为人们生活和工作中不可或缺的一部分。作为连接世界的纽带,互联网服务提供商(ISP)承担着重要的责任,为用户提供稳定、高效的网络接入和服务。而ISP许可证,则是保障这些服务合法…

Python学习打卡:day05

day5 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day538、函数的初体验39、函数的基础定义语法函数的定义注意事项 40、函数的基础定义案例练习41、函数的传入参数42、函数的传入参数案例练习——升…

【智能家居控制系统项目】一、项目系统镜像烧录与系统登录

前言 完成本章节将可以获得本项目的系统UI界面功能。本章节主要介绍如何烧录项目系统镜像以及进入系统。配套的视频介绍可以点击跳转到智能家居项目复刻配套视频 1.系统功能页面介绍 完成本章全部步骤,我们将可使用以下项目系统功能界面。 1.1 家居总览界面 主界面…

2分钟用手机开发一个ChatBot

前言: 在上一期,我们测评了CodeFlying,用它开发出了一个复杂推文管理系统,然后体验了一下它的热门应用:AI智能机器人。今天咱就继续用CodeFlying来开发一个属于我们自己的聊天机器人。 老规矩,我们先在手机…

【elementui源码解析】如何实现自动渲染md文档-第一篇

文章目录 目录 背景 获取源码 代码分析 背景 之前基于vant3的源码开发过二次开发过组件,其中vant实现了将md文档渲染到界面上,有天突发奇想想知道这是如何实现的将md文档渲染到界面上的,因为平时开发中使用elementui占多数,所…

并发、多线程、HTTP连接数有何关系?

在计算机领域,"并发"、"多线程"和"HTTP连接数"是三个重要的概念,它们之间存在着密切的关系。本文将探讨这三者之间的联系以及它们在现代计算机系统中的作用。 一、并发的概念 并发是指系统能够同时处理多个任务或事件的能…

thinkphp6 入门(23)--如何给上传图片的服务器目录授权

开发网站,上传图像时提示”上传图片失败,Impossible to create the root directory /var/www/html/xxxxx/public/uploads/avatar/20240608.“ 在Ubuntu上,你可以通过调整文件夹权限来解决这个问题。首先,确保Web服务器&#xff08…

填报志愿选大学专业,文科生如何选专业?

读文科的同学接触的专业知识相对广泛,往往被认为是“万金油”,他们仿佛什么都能做,但是和专业技能类知识不同,缺乏技术支持,从而使得文科专业的就业方向和前景远远比不上理科专业那么明朗,对于众多文科生而…

带头+双向+循环链表的实现

目录 1. 链表1.1 带头双向循环链表 2. 链表的实现2.1 结构体2.2 初始化2.3 打印2.4 判断空不能删2.5 尾插2.6 头插2.7 尾删2.8 头删2.9 查找2.10 在pos之前插入2.11 删除pos位置的值2. 12 销毁2.13 创建节点 3. test主函数4. List.c文件5. List.h文件 1. 链表 1.1 带头双向循环…