GeoHash分享

2023-10-23 14:36
文章标签 分享 geohash

本文主要是介绍GeoHash分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前边

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

START

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

一、坐标系

经纬度🌏

  • 经度
    • 0°经线:本初子午线
    • 东经:0~180°
    • 西经:0~180°
  • 纬度
    • 北纬: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公式

📚 参考资料

  • GIS专业知识~地理坐标系(GCS)
  • 国内常用地图坐标系
  • 【推荐】GIS专业知识~火星坐标系
  • 为什么需要空间索引?
  • 空间索引之GeoHash
  • Elasticsearch 在地理信息空间索引的探索和演进
  • geohash-java
  • 讲讲KD-Tree
  • Lucene系列(16)工具类之kdb Bkd树原理概述 - 腾讯云开发者社区-腾讯云
  • K-D树、K-D-B树、B-K-D树_bkd树_Holmofy的博客-CSDN博客

这篇关于GeoHash分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/268477

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

分享5款免费录屏的工具,搞定网课不怕错过!

虽然现在学生们不怎么上网课, 但是对于上班族或者是没有办法到学校参加课程的人来说,网课还是很重要的,今天,我就来跟大家分享一下我用过的几款录屏软件=,看看它们在录制网课时的表现如何。 福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/ 这款软件给我的第一印象就是界面简洁,操作起来很直观。它支持全屏录制,也支持区域录制,这对于我这种需要同时录制PPT和老师讲

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

图书管理系统系统分享

分享一个图书管理系统,Java、SpringBoot、Vue和MySQL开发的图书馆管理系统 gitee项目地址:https://gitee.com/yuanmomoya/open-source-project/tree/master/books-management-system GitHub项目地址:https://github.com/yuanmomoya/open-source-pro

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节

1:MSSQL SQL语法篇: BULK INSERT      [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]         FROM 'data_file'        [ WITH       (      [ [ , ] BATCHSIZE = batch_siz

分享一个基于uniapp科技馆服务微信小程序 博物馆管理小程序(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流! 💕💕学习资料、程序开发、技术解答、文档报告 💕💕如需要源码,可以扫取文章下方二维码联系咨询 💕💕Java项目 💕💕微信小程序项目 💕💕Android项目 �

2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享

期刊介绍 《Biomedical Signal Processing and Control 》期刊旨在为临床医学和生物科学中信号和图像的测量和分析研究提供一个跨学科的国际论坛。重点放在处理在临床诊断,患者监测和管理中使用的方法和设备的实际,应用为主导的研究的贡献。 生物医学信号处理和控制反映了这些方法在工程和临床科学的界面上被使用和发展的主要领域。期刊的范围包括相关的评论论文(review p