GeoHash编码原理和代码演示
1. 背景
1.1 概述
- 在大数据领域中,时常需要进行海量数据的映射检索,其中GPS转换为地理位置以及IP地址转换为地理位置就是一种很常见需求。
- 由于数据量很大,如何进行快速查询就需要使用到各种算法。
- 在大数据领域,常见的快速匹配如布隆过滤器,bitmap算法,hyperloglog算法这些是位图算法。
- 今天要说的geohash算法,则是二分法结合编码的一种地理位置信息算法。
1.2 原理
- 经度范围是东经180到西经180,纬度范围是南纬90到北纬90,我们设定西经为负,南纬为负,所以地球上的经度范围就是[-180, 180],纬度范围就是[-90,90]。如果以本初子午线、赤道为界,地球可以分成4个部分
- 纬度范围[-90°, 0°)用二进制0代表,(0°, 90°]用二进制1代表,经度范围[-180°, 0°)用二进制0代表,(0°, 180°]用二进制1代表,那么地球可以分成如下4个部分
- 更小范围二分划分
- 转换计算方法步骤
- 将经纬度变成二进制。
- 将经纬度合并
- 按照Base32进行编码
参考自:https://www.jianshu.com/p/2fd0cf12e5ba
2. 案例
- 环境
- idea 2020
- jdk 1.8
- maven 3.6.3
- pom文件
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>