• 地理空间索引:GeoHash原理


    保持好奇心,想出问题,自己寻找答案!

    1.基于空间位置的服务

    网约车、附近的餐饮

    经纬度坐标 —— 计算距离

    先按照经纬度坐标范围粗略筛选掉距离过远的车辆,然后再计算进行精确筛选。

    大量的时间开销 遍历的解法 时间复杂度高

    哈希散列

    经度、纬度分开处理,形成网格,并且具有层次,由高到低,代表空间范围由大到小。

    采用B树等高效算法实现

    GeoHash的思路

    2.GeoHash基本原理

    地理编码算法

    将地理经纬度坐标编码为由字母和数字所构成的短字符串。

    矩形网格

    采用二分法不断缩小经度和纬度的区间来进行二进制编码,最后将经纬度分别产生的编码奇偶位交叉合并,再用字母数字表示。

    递归二分过程,直到所需的精度,经度得到一串二进制编码11010 01010 11001。

    纬度同理。

    生成新的二进制数,它的偶数位放经度,奇数位放纬度,得到11100 11101 00100 01101 11110 00110。

    使用32个数字和字母(字母去掉a、i、l、o这4个)进行32进制编码。

    每5位转化为十进制,对应编码。

    填充曲线

    Z形曲线

    3.代码实现

    python-geohash

    移位操作代替二分区间

    4.总结

    GeoHash的主要价值在于将二维的经纬度坐标信息编码到一维的字符串中。

    地理位置索引 匹配字符串

    便于缓存、信息压缩

    在使用大数据工具(例如Spark)进行数据挖掘聚类时,GeoHash更加快捷高效。

    Z形曲线,突变。

    适当增加Geohash编码长度,并使用周围8个近邻编码参与。

    参考链接:地理空间索引:GeoHash原理

  • 相关阅读:
    Python学习笔记Day24
    Python学习笔记Day23
    Python学习笔记Day22
    Python学习笔记Day21
    Python学习笔记Day19
    Python学习笔记Day18
    Python学习笔记Day17
    Python学习笔记Day16
    Python学习笔记Day15
    linux普通文件权限和系统目录权限的实践及结论
  • 原文地址:https://www.cnblogs.com/hider/p/12840025.html
Copyright © 2020-2023  润新知