mongodb geohash

news2024/11/27 11:53:27

地理位置索引支持是MongoDB的一大亮点,这也是全球最流行的LBS服务foursquare 选择MongoDB的原因之一。我们知道,通常的数据库索引结构是B+ Tree,如何将地理位置转化为可建立B+Tree的形式,下文将为你描述。

首先假设我们将需要索引的整个地图分成16×16的方格,如下图(左下角为坐标0,0 右上角为坐标16,16):
在这里插入图片描述
单纯的[x,y]的数据是无法建立索引的,所以MongoDB在建立索引的时候,会根据相应字段的坐标计算一个可以用来做索引的hash值,这个值叫做geohash,下面我们以地图上坐标为[4,6]的点(图中红叉位置)为例。

我们第一步将整个地图分成等大小的四块,如下图:
在这里插入图片描述

划分成四块后我们可以定义这四块的值,如下(左下为00,左上为01,右下为10,右上为11):

01 11
00 10
这样[4,6]点的geohash值目前为 00

然后再将四个小块每一块进行切割,如下:
在这里插入图片描述

这时[4,6]点位于右上区域,右上的值为11,这样[4,6]点的geohash值变为:0011

继续往下做两次切分:
在这里插入图片描述
在这里插入图片描述

最终得到[4,6]点的geohash值为:00110100

这样我们用这个值来做索引,则地图上点相近的点就可以转化成有相同前缀的geohash值了。

我们可以看到,这个geohash值的精确度是与划分地图的次数成正比的,上例对地图划分了四次。而MongoDB默认是进行26次划分,这个值在建立索引时是可控的。具体建立二维地理位置索引的命令如下:

db.map.ensureIndex({point : “2d”}, {min : 0, max : 16, bits : 4})
1
其中的bits参数就是划分几次,默认为26次。

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

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

相关文章

Apache Doris简单易用、高性能和统一的分析数据库

Doris 介绍 https://github.com/apache/doris Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,…

认识BACnet协议

一、什么是BACnet? BACnet,Building Automation and Control networks的简称,即楼宇自动化与控制网络。是用于智能建筑的通信协议。 一般楼宇自控设备从功能上讲分为两部分:一部分专门处理设备的控制功能;另一部分专…

设计模式之【代理模式】,有事找我“经纪人”

文章目录 一、什么是代理模式1、代理模式三大角色2、代理、桥接、装饰器、适配器 4 种设计模式的区别3、代理模式使用场景4、代理模式优缺点 二、静态代理1、静态代理的一般写法2、火车站售票案例3、静态代理优缺点 三、动态代理1、静态代理和动态代理的本质区别2、JDK动态代理…

ArcSWAT报错:Error Number :-2147467259; 对 COM 组件的调用返回了错误 HRESULT E_FAIL

文章目录 1 报错内容2 报错解决3 并行处理的设置补充说明 1 报错内容 通常为连续两段报错: Error Number :-2147467259 Error Message :对 COM 组件的调用返回了错误 HRESULT E_FAIL 。 Module name : mSWFlow Function name : createStream Procedure ( error li…

星辰天合参加首届数字驱动创新峰会 强调以 SDS 加速数据基础设施建设

5 月 11 日,2023 数字驱动创新峰会在北京新世纪日航饭店隆重举办。作为赛迪网、《数字经济》杂志社首次主办的数字驱动峰会,本届峰会以“新要素、新生产、新经济”为主题,下设数字金融创新论坛、数字制造创新论坛和数字服务创新论坛三个分论坛…

4 月 NFT 月报:在动荡的 NFT 市场中寻求生存

作者:lesleyfootprint.network 数据来源:Footprint NFT Research 上个月,NFT市场在 4 月 5 日出现了交易量高峰,随后交易量又在月底大幅下降了 50%。近期,NFT 卖家的数量持续超过买家的数量,这表明市场可…

4面华为测试开发,居然挂在这个地方....

说一下我面试别人时候的思路 反过来理解,就是面试时候应该注意哪些东西;用加粗部分标注了 一般面试分为这么几个部分: 一、自我介绍 这部分一般人喜欢讲很多,其实没必要。大约5分钟内说清楚自己的职业经历,自己的核…

基于Docker的深度学习环境NVIDIA和CUDA部署以及WSL和linux镜像问题

基于Docker的深度学习环境部署 1. 什么是Docker?2. 深度学习环境的基本要求3. Docker的基本操作3.1 在Windows上安装Docker3.2 在Ubuntu上安装Docker3.3 拉取一个pytorch的镜像3.4 部署自己的项目3.5 导出配置好项目的新镜像 4. 分享新镜像4.1 将镜像导出为tar分享给…

安卓源码下apk进行platform签名的方法

目录 一 任意目录下创建一个文件夹 二 该目录下需要准备的5个文件 三 执行命令 四 生成结果 一 任意目录下创建一个文件夹 二 该目录下需要准备的5个文件 上述五个文件, 前四个可以从编译好的安卓源码工程目录下复制, 第五个是自己需要签名的apk文件 …

抖音谋局本地生活“大蛋糕”|成都待慕电商

打开抖音APP,“同城”里囊括的美食、休闲娱乐、丽人美发、酒店民宿、周边旅游等让消费者们眼花缭乱,似乎正在打造另一个短视频版本的同城服务商。 4月25日,2023抖音生活服务生态伙伴大会在成都举行。《每日经济新闻》记者看到,活…

基于WiFi的CSI数据做呼吸频率检测-python版(含代码和数据)

一、概述 本Demo无需机器学习模型,Demo功能涉及的理论主要参考了硕士学位论文《基于WiFi的人体行为感知技术研究》,作者是南京邮电大学的朱XX,本人用python复现了论文中呼吸频率检测的功能。Demo实现呼吸速率检测的主要过程为: …

Java面试知识点(全)-设计模式三

Java面试知识点(全) 导航: https://nanxiang.blog.csdn.net/article/details/130640392 注:随时更新 18、责任链模式(Chain of Responsibility) 接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对…

基于stm32mp157 linux开发板ARM裸机开发教程6:ARM 汇编语言程序设计(连载中)

前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) 针对对FS-MP1A开发板&…

Scrapy 框架介绍

一、Scrapy是什么 Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。…

索引有哪些优缺点?索引有哪几种类型?

目录 一、什么是索引? 二、索引的优点 三、索引的缺点 四、索引有哪几种数据类型? 一、什么是索引? 索引是一种能够帮组Mysql高效的从磁盘上检索数据的一种数据结构。在MySQL中的InnoDB引擎中,采取了B树的结构来实现索引和数据…

matlabR2021b启动很慢和初始化时间很长解决

工具:MatlabR2021b。 问题记录,在网上下载安装包后,安装后,发现软件启动时间很长。进入界面后软件需要较长时间的初始化。才能就绪。 查询原因为软件需要在启动是查询licence。 首先在安装文件夹中启动Activate MATLAB R2021b。…

python画直线的方法

python画直线的方法,下面介绍三种: 1、使用列表解析法,只需要添加一个数据类型的变量,然后在上面添加一系列的直线,即可得到一条直线。 5、使用循环解析法和 for循环解析法两种方法相结合来画直线,即可得到…

软件测试之jmeter性能测试让你打开一个全新的世界

一、Jmeter简介 1 概述 jmeter是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ(现在称为如 Apache Tomcat…

IDEA入门使用

IDEA概述 ​ IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境: ​ 把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 为什么要…

Java基础-判断和循环

1 流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 1.1 流程控制语句分类 ​ 顺序结构 ​ 判…