空间搜索geohash概述

概述

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

但是这些中间件又是怎么实现位置搜索的呢;
查了一番资料,发现背后一个公共的算法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 编码

在这里插入图片描述

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BL104网关钡铼技术多协议设备互操作简单一键接入

在工业环境中,设备之间的通信和互操作性是实现智能化生产的关键。为了满足这一需求,钡铼技术推出了PLC物联网关BL104,一款专为工业环境设计的多协议设备,简化了设备互操作的复杂性,实现了一键接入的便捷性。 PLC物联网…

Git介绍及应用

1.简介 Git是一个分布式版本控制器,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库远程仓库:远程服务器上的Git仓库 2.执行流程 3.Git代码托管服务…

New Work-flow of Circuit Bootstrapping

参考文献: [CGGI17] Chillotti I, Gama N, Georgieva M, et al. Faster packed homomorphic operations and efficient circuit bootstrapping for TFHE. ASIACRYPT 2017 (1): 377-408.[CDKS21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion be…

计算机组成结构—IO接口(IO控制器)

目录 一、I/O 接口的功能 二、I/O 接口的基本结构 1. 总线连接的数据通路 2. I/O 接口的基本组成 三、I/O 端口及其编址 1. 统一编址 2. 不统一编址 四、I/O 接口的类型 两个系统或两个部件之间的交接部分,一般就称为 接口。接口可以是硬件上两种设备间的连…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:医疗健康智能服务

作为国产运动医学的领导者,致力于提供运动医学的整体临床解决方案,公司坐落于北京经济技术开发区。应用于肩关节、膝关节、足/踝关节、髋关节、肘关节、手/腕关节的运动医学设备、植入物和手术器械共计300多个品规通过NMPA的批准,临床应用于国…

docker构建java项目镜像

资料参考 参考自黑马教程:10.Docker基础-自定义镜像_哔哩哔哩_bilibili 初步准备 打包好java项目jar包,和Dockerfile文件一起放到指定目录下,后续操作都是在该目录下操作, 我这边是:/usr/local/src/train-ticket/ …

React -- memo允许你的组件在 props 没有改变的情况下跳过重新渲染。

memo(Component, arePropsEqual?) 使用 memo 将组件包装起来,以获得该组件的一个 记忆化 版本。通常情况下,只要该组件的 props 没有改变,这个记忆化版本就不会在其父组件重新渲染时重新渲染。但 React 仍可能会重新渲染它:记忆化…

vue3路由详解,从0开始手动配置路由(vite,vue-router)

创建一个不含路由的vue项目 (查看路由配置可以直接跳过这一段) 输入npm指令,然后写一个项目名称,之后一路回车即可 npm create vuelatest 注意这里我们不选引入vue router,成功后可以 查看目录 然后按提示信息输入指…

PLC通过Profinet转Modbus网关与流量计通讯案例

1、案例背景 在工业自动化系统中,PLC(可编程逻辑控制器)与流量计之间的通信是保证以后设备生产数据准确传输和实现控制功能的关键。但是,由于PLC和流量计可能使用不同的通信协议(如Profinet和Modbus),因此需要一种转换机制来实现它们之间的通…

Telnet发邮件的功能如何实现?有哪些限制?

Telnet发邮件有哪些步骤?使用Telnet发送邮件安全吗? 虽然大多数人使用图形化的电子邮件客户端发送和接收邮件,但了解如何通过Telnet发邮件依然是有益的。AokSend将详细介绍Telnet发邮件的功能如何实现,帮助读者掌握这种基础但有用…

问题:材料题请点击右侧查看材料问题 查看材料 #学习方法#经验分享#学习方法

问题:材料题请点击右侧查看材料问题 查看材料 A.Colleges may reduce their enrollment. B.Top universities become increasingly competitive. C.Universities become selective in student admission. D.Colleges invest less in academy and infrastructure…

模拟超市收银系统

题目 模拟超市收银系统 内容要求:使用文本命令行窗口设计模拟超市收银系统。要求由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从文件中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有…

「动态规划」如何求地下城游戏中,最低初始健康点数是多少?

174. 地下城游戏https://leetcode.cn/problems/dungeon-game/description/ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由m x n个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士…

Node.js环境搭建

背景 想接触下node开发, 打算做个node环境 一、安装包获取 我喜欢使用压缩包解压然后配置的方式进行 地址为: Index of /download/release/ ,可按需选择自己的版本,我选择了如下版本 二、解压配置 将压缩包解压只自己想要安装的文件加下,配置环境变量,解压如下所示: …

Polar Web【中等】写shell

Polar Web【中等】写shell Contents Polar Web【中等】写shell思路&探索EXP运行&总结 思路&探索 初看题目,预测需要对站点写入木马,具体操作需要在过程中逐步实现。 打开站点(见下图),出现 file_put_contents 函数,其…

HarmonyOS开发-鸿蒙UiAbility 组件间跳转

前言 随着春节假期结束各行各业复产复工,一年一度的春招也持续火热起来。最近,有招聘平台发布了《2024年春招市场行情周报(第一期)》。总体来说今年的就业市场还是人才饱和的状态,竞争会比较激烈。 但是,…

算法学习笔记(7.6)-贪心算法(霍夫曼编码)

目录 1.什么是霍夫曼树 2.霍夫曼树的构造过程 3.霍夫曼编码 3.1具体的作用-频率统计 ##实战题目 1.什么是霍夫曼树 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也…

计算机组成结构—IO方式

目录 一、程序查询方式 1. 程序查询基本流程 2. 接口电路 3. 接口工作过程 二、程序中断方式 1. 程序中断基本流程 2. 接口电路 3. I/O 中断处理过程 三、DMA 方式 1. DMA 的概念和特点 2. DMA 与 CPU 的访存冲突 3. DMA 接口的功能 4. DMA 接口的组成 5. DMA 的…

STCunio数字电源带PID数字闭环(带详细的代码说明文档)

STCunio,即 system on chip unusual i/o,采用类似 arduino 构架设计,即使没有单片机知 识的设计师和艺术家们能够很快地通过它学习电子和传感器的基础知识,并应用到他们的设 计当中。设计中所要表现的想法和创意才是最主要的,至于…

Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境

文章大纲 IDE 选择纯开源首选 Codeblocks 跨平台开发IDE其次选择 visual studio 社区版 or visual studio code包管理MSYS2pacmanconda & mambavcpkgNuGetapt-get其他手动配置 Visual studio 开发环境下载 visual studio基本配置基本测试:打开图片,打开摄像头读取图片读取…