【GIS】geohash原理与实现

参考:https://www.cnblogs.com/LBSer/p/3310455.html
https://en.wikipedia.org/wiki/Geohash

引子

考虑一个问题,如何搜索某点附近一定范围内的满足要求的公交站。
(截了个高德的图、并不知道高德地图后台如何搜索的。。。)

  • 无脑思路:把所有的公交站和当前位置都算距离筛选
  • 简单思路:把当前城市/附近行政区的所有公交站和当前位置算距离筛选(天然范围)
  • 优化思路:用格网剖分区域,每次都从附近的格网中搜索,如先找出附近1km的格网,再在格网中找点(人工范围)

人工范围除了要划分区域外,同时希望每个范围的名字(编码)能看出层级关系和一定程度的空间邻近关系

【GIS】geohash原理与实现_第1张图片

感性认识

所以Geohash就是把“经纬度”编码的一种方式,将地球/地图在经纬度坐标下划分网格形成。

  • 标识位置。如wx4g0表示了覆盖天安门附近范围的方格
  • 邻近关系。图中wx4g8、wx4g9、wx4gd….wx4g4都是五位编码,只有最后一位不同
  • 层次关系。刚才所示的9个网格都在四位编码的wx4g的网格范围内,字符串越长,表示的范围越小,越精确
  • 注:(geohash的编码方式存在突变,邻近只能看大概,主要是层次关系)

点击地图查geohash

输入坐标查geohash
【GIS】geohash原理与实现_第2张图片

理性认识

首先明确的是,根据经纬度坐标,划分网格,覆盖全域。

  1. 根据经纬度作二进制编码。二进制编码以经度、纬度轮流平分的方式编码;或经度纬度分别逐级二分,最后交叉合并
  2. 二进制编码转32进制编码。五个二进制字符{0,1}成一组,转换成32进制
  3. 32进制编码排列形成geohash编码

【GIS】geohash原理与实现_第3张图片


  • 二进制编码的平分,先经度,后纬度,轮流;或经度纬度分别逐级二分,后经度在前纬度在后穿插
  • 二进制编码经纬度平分一组等同于对平面四叉分割一次
  • 32进制编码用数字和字母组成,删掉了ailo四个字母
  • 一个编码为5个二进制数,所以每个层次(结点)挂接32个子结点,4*8个

例子:

编码故宫所在位置,7位精度
(原文中用的经度纬度分别计算,然后合并;这里用分别计算)
Lat: 39.92018 Lng: 116.394981
1. 初始化范围为:lon_range=(-180,180);lat_range=(-90,90)
2. 平分经度方向,取得——1
3. 平分纬度方向,取得——1
4. 范围更新为lon_range=(0,180);lat_range=(0,90)
5. 再一轮,经度——1,纬度——0,范围lon_range=(90,180);lat_range=(0,45)
6. 循环至7*5=35个二进制编码,得到

类型 编码
二进制 11100,11101,00100,01111,00000,01101,10000;
十进制 28, 29, 4, 15, 0, 13, 16
32进制 w,x,4,g,0,e,h

其他须知

精度

wiki里给出了不同级别的精度,给定的经纬度误差比例为1:1和2:1轮回,这是由于一次四分为两个二进制数,而一位geohash为5个二进制数
【GIS】geohash原理与实现_第4张图片

坐标系

  1. geohash是在经纬度坐标下进行的网格划分,则纵向(经线方向)相对均匀(近似圆),而横向(纬线方向)变化很大,如同级别的哈尔滨的一个网格和杭州的一个网格,哈尔滨的宽度要小一些(脑补下两个梯形)
  2. 如上述精度问题,由于总共剖分的是360经度和180纬度,每个编码又五次剖分完成,所以第一次长方形->正方形;第二次正方形->长方形。所以geohash的网格是在长方形和方形间切换的
    【GIS】geohash原理与实现_第5张图片
  3. 地图投影的问题,在平面地图上看的话,可能会由于地图投影的原因在高纬度纵方向被拉长,如下图
    【GIS】geohash原理与实现_第6张图片

Peano空间填充曲线

geohash的二进制编码和Peano空间填充曲线一致,用分形空间填充曲线可以按照一套规则填满整个平面,大部分情况下编码相似的距离也相近,但Peano空间填充曲线最大的缺点就是突变性,有些编码相邻但距离却相差很远,比如0111与1000,编码是相邻的,但距离相差很大。
所以看geohash编码时可以发现,数字/字母的递增顺序表现在局部以N字形或倒Z字形呈现。(具体是哪个仍取决于第几级)
(这个配图坐标的比例有点问题。。。)
【GIS】geohash原理与实现_第7张图片

你可能感兴趣的:(GIS)