GeoHash分享

GeoHash介绍及使用 参考 GeoHash核心原理解析 GeoHash算法学习讲解、解析及原理分析 1、geohash是什么 通常我们使用一对(x,y)坐标来表示一个点的坐标。在地图上会有很多点、线、面等空间要素。如果我们要查询在自己位置附近1km以内的公交站。传统的想法是遍历所有的公交站,获取距离在1km以内的结果。然而这种方法太耗费时间和性能,没次都要计算点之间的距离。 可以理解geohash是一种算... 阅读详情

写在前边

复制的一个内部分享,所以可能更偏向PPT性质,本文提出的问题,在末尾参考材料中都会有所提及,包括更深层次的实现原理和各大API对于GeoHash的优化。感兴趣的读者可以拓展看一下。

START

GeoHash是一种地址编码,可以将二维的经纬度编码成遵循“最左匹配原则”的字符串,在LBS(Location Based Services)服务中具有非常广泛的用途。

一、坐标系

经纬度🌏

  • 经度:
  • 纬度:
    • 北纬:0~90°
    • 南纬:0~90°
  • 纬度相同的情况下
    • 经度每隔0.00001度,距离相差约1米;
    • 每隔0.0001度,距离相差约10米;
    • 每隔0.001度,距离相差约100米;
    • 每隔0.01度,距离相差约1000米;
    • 每隔0.1度,距离相差约10000米。
  • 经度相同的情况下
    • 纬度每隔0.00001度,距离相差约1.1米;
    • 每隔0.0001度,距离相差约11米;
    • 每隔0.001度,距离相差约111米;
    • 每隔0.01度,距离相差约1113米;
    • 每隔0.1度,距离相差约11132米。

地理坐标系

定义

是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。

单位

经纬度,如:东方明珠电视塔的经纬度是121.499718,31.239698

分类
  • 大地水准面
    • 用平静的海面描述地球
  • 地心坐标系
    • 以地球质心为旋转椭球面的中心的坐标系
  • 参心坐标系:挪移质心,使局部的表面与某一地区的地形更加吻合。
  • 投影坐标系:地理坐标系按照一定的数学法则将地球椭球面的经纬网投影到平面上,称为投影坐标系。

常见的地理坐标系

名称

简介

应用范围

WGS-84坐标系

World Geodetic System-1984,既1984年的全球坐标系统。是目前应用最为广泛的坐标系统,只要跟GPS定位相关,使用的都是WGS84坐标系.

GPS、谷歌、OSM、前端脚本库(leaflet、mapbox、openlayer)

CGCS2000坐标系

2000国家大地坐标系,是我国当前最新的国家大地坐标系。非高精度的大多数情况下,我们可以认为WGS84坐标系=CGCS2000坐标系。

GCJ02

火星坐标系

为了数据安全和保密,通过地形图非线性保密处理算法(俗称火星加密)加密过的WGS84坐标系,与WGS84坐标系之间的偏差大概在50-700m左右。

国内大部分地图底图(高德、腾讯)和矢量数据(图商的LBS服务和Android手机的定位数据)

BD09坐标系

百度地图使用的地心坐标系,在GCJ02的基础上,做了二次加密。

百度地图

小工具⚙️

地图坐标系转换 - 在线工具

高德地图API


二、设计题👀

某APP和某品牌签订了广告合同,要求如下:

双11期间,用户打开APP时,如果当前定位所在地附近3公里内有品牌体验门店存在,开屏广告展示该品牌的广告素材。

相关信息:

  1. 全国100家品牌体验店的经纬度信息(火星坐标系);
  2. 开屏广告素材;

请给出你的设计思路:

... ...

进阶:假如门店数量达到1000、1W、10W。现有的设计会有什么问题,怎么解决?

尝试设计一个适用于此类场景,数据检索的索引?


三、GeoHash

是什么?空间索引Base32

GeoHash是一种地址编码,可以将二维的经纬度编码转换成一维字符串,每一个字符串代表了一块矩形区域,表示某一个点的大概位置。该区域内所有的点共享相同的GeoHash。

算法

1.切分区间

以纬度为例,按照初始区间范围纬度[-90,90],分为左右区间,计算目标纬度分别落在左区间还是右区间,左0右1;

循环上述步骤

序号

纬度范围

编码:0

编码:1

31.239698的区间编码

1

(-90, 90)

(-90, 0.0)

(0.0, 90)

1

2

(0.0, 90)

(0.0, 45.0)

(45.0, 90)

0

3

(0.0, 45.0)

(0.0, 22.5)

(22.5, 45.0)

1

4

(22.5, 45.0)

(22.5, 33.75)

(33.75, 45.0)

0

5

(22.5, 33.75)

(22.5, 28.125)

(28.125, 33.75)

1

6

(28.125, 33.75)

(28.125, 30.9375)

(30.9375, 33.75)

1

7

(30.9375, 33.75)

(30.9375,32.34375)

(32.34375,33.75)

0

8

(30.9375,32.34375)

(30.9375,31.640625)

(31.640625,32.34375)

0

9

(30.9375,31.640625)

(30.9375,31.2890625)

(31.2890625,31.640625)

0

10

(30.9375,31.2890625)

(30.9375,31.11328125)

(31.11328125,31.2890625)

1

...

...

...

...

...

由上表得出东方明珠纬度(31.239698)产生的编码为:

101011000110111

同理可得经度产生的编码为:

110101100110011

2.合并经纬度编码

按照经度占偶数位,纬度占奇数位的原则,合并经纬度的二进制编码;

111001100111100000111100011111

3.Base32编码

按照每5位一组,分成6组,每组计算其对应的十进制数值,按照Base32进行编码;

Base32编码表的其中一种如下,是用0-9、b-z(去掉a, i, l, o)这32个字母进行编码

编码过程:

11100 11001 11100 00011 11000 11111
28(w) 25(t) 28(w) 3(3)  24(s) 31(z)

由此可得,东方明珠的GeoHash值为:wtw3sz(12ktu1)

优点

  1. 使用字符串表示经纬度,展示效果会更好一些;
  2. 在数据库中给坐标点提供了另一种存储方式。在数据存储时可以简化为只为一列做索引;
  3. Geohash是一种前缀编码,前缀相同的坐标点,位置相近。通过前缀提供了高性能的邻近位置POI查询,而邻近位置POI查询是LBS服务的核心能力。
  4. Geohash表示的是一个矩形区域。使用者既能表明自己大致位置,又不至于暴露精确坐标,有助于隐私保护;
    1. 相应的,字符串越长,表示的范围就越精确;

小工具⚙️

Geohash Converter

经纬度距离计算 - 开发工具箱

Geohash Explorer


四、存在的问题

精度问题

GeoHash长度与精度之间的对应关系如下:

如何实现附近LBS检索


五、相关API

Redis GEO | 菜鸟教程

Geohash 单元查询 | Elasticsearch: 权威指南 | Elastic

Geospatial Queries — MongoDB Manual

如何选择?

六、应用场景

附近的“人”

将用户位置与商家、酒店等地理位置信息匹配,提供推荐服务;

地理围栏

对某个区域进行监控,当有物体进入或离开该区域时进行警报;

地理位置索引

将地理位置信息编码为字符串,可以在数据库中快速检索某个范围内的地理位置信息;

地图导航、位置服务;

地理位置可视化

地图展示、热力图等;

数据分析、数据挖掘等

借贷业务中,通过地理位置信息透视用户群特征及分析借贷风险;

七、总结

  1. 了解GeoHash的原理
  2. 熟悉相关API
  3. 了解GeoHash的应用场景

Haversine公式

📚 参考资料

【Redis实战】GeoHash实现原理与基本使用 现在很多APP上都有依赖基于附近搜索的需求,也就是根据一组经纬度,检索其相邻范围内的经纬度,而GeoHash就是一种可以用来解决检索相邻区域的地理空间算法。我们不妨先从最原始的需求开始分析,也就是根据某个经纬度获取其附近一定范围内的其他目标信息,我们可以先尝试通过使用像MySQL这样的关系型数据库来实现,比如表中记录了longitude表示经度,latitude 表示纬度。现在有个用户当前处于的经纬度分别为X、Y,请查询其M范围内的相关信息。根据经纬度距离计算公式可以写出如下SQL,即可按记录由近到远得到想 阅读详情

相关推荐

基于WMS的仓库智能优化:从数据导出到波次路径的落地实践

仓库管理系统(WMS)已成为企业数字化运营的基础,但库存账目准确之后,如何进一步压缩拣货距离、提升作业效率,往往取决于系统之上是否具备决策优化能力。智能优化并非遥不可及的算法黑箱,而是从WMS中导出历史订单、库位与库存数据,通过ABC分类识别高周转商品,再借助波次聚合与路径规划生成可执行的调度方案。整个过程遵循“数据清洗—基线仿真—策略计算—结果回写”的工程路径,兼顾电商仓与原料仓的不同业务约束。本文以真实项目经验为基础,解析波次批量参数、S形与最近邻路径的适用场景,并介绍中间表对接WMS的落地方式,为已经

weixin_34014555的博客 100

GeoHash算法简介

一. 基本原理 GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串。 我们知道,经度范围是东经180到西经180,纬度范围是南纬90到北纬90,我们设定西经为负,南纬为负,所以地球上的经度范围就是[-180, 180],纬度范围就是[-90,90]。如果以本初子午线、赤道为界,地球可以分成4个部分。 如果纬度范围[-90°, 0°)用二进制0代表,(0°, 90°]用二进制1代表,经度范围[-180°, 0°)用二进制0代表,(0°, 180°]用二进制1代表,那么地球可以

罗布泊coding 2万+

遥感目标检测数据集汇总

文章目录1. 光学数据集1.1 DIOR1.2 LEVIR1.3 DOTA1.4 RSOD1.5 NWPU VHR-101.6 VEDAI1.7 COWC1.8 ITCVD1.9 DIUx xView 20181.10 HRSC20161.11 TAS1.12 SZTAKI‐INRIA1.13 UCAS AOD1.14 DLR 3K Vehicle2. SAR2.1 SSDD2.2 SSDD+2....

quanwei的博客 6万+

Geohash算法

用户附近位置计算 经纬度与物理距离介绍 经纬度是经度与纬度的合称组成一个坐标系统,称为地理坐标系统,它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。 在一定误差范围内,通常情况下,经纬线和米的换算为:经度或者纬度0.00001度,约等于1米。以下表格列出更细致的换算关系: 在纬度相等的情况下 在经度相等的情况下 经度每隔0.00001度,距离相差约1米;每隔0.0001度,距离相差约10米;每隔0.001度,距离相差约100米;每隔0.01度,距离

Usher_Ou的博客 2万+

科研绘图避坑指南:用PyMol制作期刊级蛋白-配体相互作用图(含氢键显示技巧)

本文是一份专业的科研绘图避坑指南,详细讲解如何利用PyMol软件制作符合期刊发表标准的蛋白-配体相互作用图。文章重点分享了从构图逻辑、精准选择到氢键等相互作用的艺术化表达技巧,并提供了视觉优化与期刊适配的终极参数设置,帮助科研人员产出兼具科学严谨性与视觉美感的专业图表。

weixin_29292431的博客 269

3D Slicer中安装MedSAM插件

大家应该都读过这篇论文:《Segment Anything in Medical Images》这个插件便是该论文团队推出的在3D Slicer上使用的插件,可以分割医学图像的任何感兴趣区域。

m0_73719342的博客 2329

利用Geohash算法,快速检索周边兴趣点

需要一个需求,查找某小区附近的超市,如果该小区和超市距离在500米以内,则查找成功。实现该功能按照传统方式,需要获取小区中心点坐标,然后500米半径做缓冲,然后对所有的超市点位和生成的缓冲区做空间分析,在缓冲区内的就是符合条件的超市。但是超市数据量很大,有什么方式能快速过滤超市数据呐?geohash是不错的方式,下面这种介绍geohash算法的原因和实现方式。

我哎GIS博客 3727

一文看懂英伟达A100、H100、A800、H800、H20

想要Deepseek私有化部署吗?无论是训练大型AI模型,还是进行高性能计算(HPC),还是Deepseek私有化部署,都需要强大的GPU支持。而英伟达(NVIDIA)作为全球领先的AI芯片制造商,推出了一系列高性能GPU,包括等,广泛应用于AI训练、推理、科学计算等领域。如果想搭建一个属于自己的算力中心,该如何选择合适的GPU?本文将带你详细了解这些GPU的特性,并指导你如何搭建算力中心。一、英伟达算力GPU系列解析1. A100:数据中心AI计算的奠基石:Ampere:6912:432。

【可全包】本人程序员,不需要做任何吹嘘,只是实在写点程序,写点文档,熟悉各类主流框架,SSM,SpringBoot,Flask,Djiango,Mysql,Sqlite,VUE,Uniapp等,各类程序设计专家,优质作者 2万+

geohash的简单分享

geohash算法的简单分享  昨天和今天都在研究定位的问题,查找附近的地理点,需要用到一个比较好的算法,于是就想起了以前同事分享过的算法,geohash算法。  昨天本来已经基本实现了,不过写完都已经到第二天了,就没更新了,今天继续调试,完成了优化,更新一下。  geohash是什么呢?简单讲一下,你现在有个需求,要做定位,获取了一个经纬度,然后要找出附近的符合条件的点,然而数据库里只有这些点的经

香辣薯片 908

【异常】OpenAI提示内容有误 Invalid prompt: your prompt was flagged as potentially violating our usage policy.

用户需优先调整提示内容,确保符合OpenAI的使用政策。若问题持续,建议结合请求ID和具体代码示例联系官方支持。同时,可参考腾讯云、Microsoft Q&A等平台提供的错误处理实践(如重试机制、日志记录)优化代码健壮性。

奶爸的编程之路,也就一周冷个三天 2057

如何利用Dpabi,AFNI,FSL软件计算种子点的功能连接?

fsl_glm 得到的是线性回归系数(beta coefficient),由于在自变量和因变量标准化(均值为 0,标准差为 1)的情况下,简单线性回归的回归系数和皮尔逊相关系数是相同的,因此这是一种间接的方法。(3)上一步得到的 PCC.nii.gz 文件是 Harvard-Oxford 概率模板中的后扣带回,每个体素中的数值(1-100)表示该体素属于 PCC 的概率,反映 PCC 在不同被试中的变异大小,也表示我们对于某个体素属于PCC 的信心。接下来,我们来聊聊功能连接在数据处理里的具体应用。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 7841

JAVA实现空间索引编码(GeoHash)

https://blog.youkuaiyun.com/xiaojimanman/article/details/50358506 https://github.com/kungfoo/geohash-java

Hello World 609

C# MES通信从入门到精通(10)——C#使用HTTP的Post和Get方法和Mes系统通信

本文详细介绍了如何利用C#完成与HTTP协议的MES系统进行通信,通过POST和GET方法实现与MES系统的交互,由高级工程师的实战经验总结,实属C#与MES通信领域的葵花宝典!

qq_34059233的博客 3410

geohash 得到块的区间坐标

一个geohash的 值是对应的一个地图区域的,然后我需要的这个区域的坐标区间 ,即经纬度的最大最小值。 那么在geohash 的wiki主页上找到c的实现,赞一个。 在我的机器上还不能直接编译通过,做了如下改变: 1 geohash.c 文件改成geohash.cpp 2 去掉 stdbool.h 这是C99 的头文件,vs2005 不支持,stdbool的全文如下,实现

雨翔的专栏 2695

【Android面试八股文】Android Application为什么是单例?

这道题相对简单,就是考察大家是否了解application的创建流程。的实例,它用来存储和处理整个全局变量的一些事情,它同时还是一个。为空的时候,才会创建,从而保证了它是一个单例对象。一样有自己的生命周期,但是它并没有那么复杂,因为。对象的创建过程,找出它为什么是单例的原因。全局进行一些配置,比如配置插件。的时候才会创建,所以说可以在。凭什么是单例,我们查看下。启动的时候都会创建一个。是怎么一步步创建的。是一个单例,即每一个。

字节卷动 531

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

geohash网格图_空间索引 - GeoHash算法及其实现优化

前言上篇博客中提到了空间索引的用途和多种数据库对空间索引的支持情况,那么在应用层以下,好学的小伙伴应该会考虑空间索引的实现原理了。目前空间索引的实现有 R树和其变种GIST树、四叉树、网格索引等。 网格索引不再多提,使用普通的hash表存储地点和风格之间的映射来实现。今天要介绍的GeoHash算法实现的空间索引,虽然是以B树实现,但我认为它也借用网格索引的一部分思想。GeoHash原理GeoHas...

weixin_39796752的博客 840

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

geohash解码的matlab实现

引子:因为做到李雷老师给的2017数模模拟题“共享单车问题”时,用了“2017摩拜杯大赛”的数据(说起来很幸运正好遇到这么个比赛,才可以比较轻松找到数据,一共300w条,我们取了其中2w条),里面单车出发点和目的地用的是一坨字母和数字组成的编码,作为一个菜鸡我自然是不晓得这是啥玩意的,后来百度之后看了一些博客才明白,后面找到了解码的c语言代码,但是想用matlab,于是把c的解码部分转换...

weixin_30252709的博客 406

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

快速GeoHash算法

基于快速GeoHash,如何实现海量商品与商圈的高效匹配基于快速GeoHash,如何实现海量商品与商圈的高效匹配? 阿里妹导读:闲鱼是一款闲置物品的交易平台APP。通过这个平台,全国各地“无处安放”的物品能够轻松实现流动。这种分享经济业务形态被越来越多的人所接受,也进一步实现了低碳生活的目标。 今天,闲鱼团队就商品与商圈的匹配算法为我们展开详细解读。 摘要 闲鱼app根据交通条件、商场分布情况、住宅区分布情况综合考虑,将城市划分为一个个商圈。杭州部分区域商圈划分如下图所示。 ..

lizz2276的博客 604

GeoHash:程序员如何用一串代码让地球“缩水”成二维码?

各位代码法师、键盘侠客们!今天我们要解锁一个让地球瞬间变成“俄罗斯方块”的神技——GeoHash!这玩意儿能把经纬度变成的神秘字符串,堪称“地理位置的摩斯密码”。(温馨提示:学会后千万别用来定位前女友的现男友,容易违法!

十年磨一剑,java开发各种业务系统 859

基于快速GeoHash,如何实现海量商品与商圈的高效匹配?

小叽导读:闲鱼是一款闲置物品的交易平台APP。通过这个平台,全国各地“无处安放”的物品能够轻松实现流动。这种分享经济业务形态被越来越多的人所接受,也进一步实现了低碳生活的目标。 今天,闲鱼团队就商品与商圈的匹配算法为我们展开详细解读。 摘要闲鱼app根据交通条件、商场分布情况、住宅区分布情况综合考虑,将城市划分为一个个商圈。杭州部分区域商圈划分...

weixin_33739646的博客 146

组队学习|DCIC2021算法分析题学习分享

组队学习|DCIC2021算法分析题学习分享赛题分析思路难点数据预处理停车点处理方法一:基于geohash的停车点匹配潮汐点计算原理实现过程方法二:基于距离匹配计算潮汐点Nearestneighbors & hnsw近似搜索实现过程 本次主要针对学习baseline过程中未曾想到的方法与代码技巧进行分享 赛题分析 思路 通过共享单车订单数据与共享单车停车点数据进行匹配,可以获得不同时间共享单车在何处打开与关闭的数据。针对二者计算差值可以获得不同停车点的潮汐值,对比停车点的面积可以获得潮汐密度。 难

纯路人的博客 327

腾讯笔试:geohash编码解析

@[TOC]腾讯面试题:eohash编码 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:...

orange_zero的博客 243

根据经纬度确定行政区域_java,经纬度转换行政区域

第1页共11页竭诚为您提供优质文档/双击可除java,经纬度转换行政区域篇一:geohash算法经纬度转换geohash算法经纬度转换geohash在查找周围朋友,lbs中有很多的应用,在网上查找到geohash算法实现分享给大家。importjava.util.hashmap;importjava.util.map;publicclassgeohashkit{//geohashscharmap/...

weixin_39928940的博客 890

Geohash编码实战:从原理到MySQL空间索引优化

本文深入探讨Geohash编码原理及其在MySQL空间索引优化中的应用。通过将经纬度转换为Base32编码字符串,Geohash实现了高效的地理位置检索。结合MySQL空间函数和索引优化,查询性能提升显著,特别适合车辆调度、物流系统等场景。文章还分享了精度控制、边界问题解决方案及实战调优经验。

nginx7reverse的博客 497

task01:比赛全流程体验

赛题提交截图 由于提交之后需要等待一段时间才能获得提交记录,所以打卡时并未获得提交记录截图,之后会补,下面是一张filezilla的截图以证明自己。 遇到的一些问题 引用geohash的时候遇到了找不到包的问题,可以将文件夹改一下然后将_init_.py中的geohash改为.geohash。 在分析数据部分可以自己在做的更深入一些,观察并挖掘数据的更多的信息。 过程 具体内容都是baseline的实现,用了一个jupter notebook所生成的代码文件所做的。 ...

qq_38942569的博客 165
上一篇: 联合主键NULL值过多,ON DUPLICATE KEY UPDATE不更新的问题
life is ftc
博客等级 码龄9年 19粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值