1、geohash及其性质

一种空间索引技术。

(1)将二维的经纬度位置数据转换为一维的字符串(基本上hash族的算法都是这样);

其优点在于hash编码后的字符串,可以方便查找和索引,从而减少相似计算的计算量(不需要再去两两计算距离,而是缩小了比较的范围,减少了计算量、提高了效率);

(2)字符串越长,表示的范围越小越精确;字符串长度越小,表示的范围越大越宽泛;

(3)字符串越相似表示距离越相近;

这样可以利用字符串的前缀匹配来查询附近的POI信息;

2、应用

将POI位置信息进行GeoHash编码之后,根据字符串前缀匹配来获得附近距离;

3、GeoHash编码算法

(1)算法步骤:

主要是用的二分查找的方法,先根据纬度编码,得到一个二进制序列;然后根据经度编码,又得到一个二进制序列;

然后组码,偶位数放经度,奇位数放纬度,把两串编码组合成新串;最后使用0-9,b-z(去掉a,i,l,o)这32个字母进行base32编码。

同理,将编码转换为经纬度的解码算法与之相反。

(2)算法原理:(就是解释为什么这样的编码能够使得越相近的位置有越相似的编码结果)

空间填充曲线:

Peano

Hilbert

4、注意点

(1)geohash将区域划分为矩形,那么在边界附近的点可能会出现定位点与同一个geohash编码区域内的点的距离大于临近区域内的点距离的情况;

解决办法:查询时,除了匹配定位点本身所在区域的geohash之外,还使用周围8个区域的geohash编码来匹配;

(2)peano空间填充曲线会产生突变,即编码相似但距离可能相差很大,也就是说使得用编码相似性来衡量距离接近成为了充分不必要条件;

解决办法:在使用geohash过滤筛选可能的附近poi 之后,再进一步计算两点之间的实际距离;

此外,

geohash只是空间索引的一种方式,特别适合点数据,而对线、面数据采用R树索引更有优势。

参考:http://www.cnblogs.com/LBSer/p/3310455.html

地理位置编码geohash学习笔记的更多相关文章

  1. [原创]java WEB学习笔记45:自定义HttpFilter类,理解多个Filter 代码的执行顺序,Filterdemo:禁用浏览器缓存的Filter,字符编码的Filter,检查用户是否登陆过的Filter

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. java web 学习笔记 编码问题总结

       java web 学习笔记 编码问题总结 1.非form表单中提交的中文参数---------------------------传递给Servlet服务器时,默认以iso-8859-1解码 ...

  3. 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码

    一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...

  4. UFLDL深度学习笔记 (一)反向传播与稀疏自编码

    UFLDL深度学习笔记 (一)基本知识与稀疏自编码 前言 近来正在系统研究一下深度学习,作为新入门者,为了更好地理解.交流,准备把学习过程总结记录下来.最开始的规划是先学习理论推导:然后学习一两种开源 ...

  5. UFLDL深度学习笔记 (七)拓扑稀疏编码与矩阵化

    UFLDL深度学习笔记 (七)拓扑稀疏编码与矩阵化 主要思路 前面几篇所讲的都是围绕神经网络展开的,一个标志就是激活函数非线性:在前人的研究中,也存在线性激活函数的稀疏编码,该方法试图直接学习数据的特 ...

  6. UFLDL深度学习笔记 (五)自编码线性解码器

    UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...

  7. MySQL学习笔记5——编码

    MySQL学习笔记5之编码 编码 1.查看MySQL数据库编码 *SHOW VARIABLES LIK 'char%'; 2.编码解释 *character_set_client:MySQL使用该编码 ...

  8. Redis:学习笔记-01

    Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...

  9. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)

    managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...

随机推荐

  1. Luogu P1155 双栈排序 图论?模拟吧。。

    今天想做做图论,于是点开了这道题....(是二分图染色然而我没看出来) 四种操作及条件: 1. s1.push() 需满足 待push的元素小于栈顶 && { 若在原序列中,待push ...

  2. Announcing .NET Core 2.1

    Announcing .NET Core 2.1 https://blogs.msdn.microsoft.com/dotnet/2018/05/30/announcing-net-core-2-1/ ...

  3. 网络编程之异步IO,rabbitMQ笔记

    对于网络并发编程而言,多线程与多进程算是最常见的需求场景了.毕竟网站开放就是想要更多的流量访问的. 回顾 回顾下之前学过的关于线程,进程和协程的知识点 IO密集型任务--用多线程更好计算密集型任务-- ...

  4. PHP开发环境及搭建

    自学PHP中,很多东西都不熟悉,在此做个记录,方便以后再次搭建PHP环境.这篇文章基本按照原文  ThinkPHP5开发环境安装和配置 ,在此感谢该作者 一.实验目的 1.掌握ThinkPHP5(简称 ...

  5. 事务的隔离级别和mysql事务隔离级别修改

    A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据 但是 在A事务中查询的话 查到的都是操作之后的数据 没有提交的数据只有自己看得到,并没有update到数据库. 查看InnoD ...

  6. zeplin 登录效果实现

    zeplin 登录效果实现 zeplin 登录页有个效果不错,https://app.zeplin.io/login 可以看看. 主要是输入框的字会随着状态变化而变化. 我这里实现了一个自己的效果 实 ...

  7. logback整合Logstash

    1.依赖 <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logsta ...

  8. centos 安装 rtmp nginx 视频流服务器

    ---恢复内容开始--- 1.使用yum安装git yum -y install git 2.下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服 ...

  9. java uuid第一次性能

    在java中产生uuid的方式是使用java.util.UUID. UUID.randomUUID().toString(); 我在测试redis性能时,使用uuid产生测试数据,发现多线程测试red ...

  10. SQL 字符串函数

    http://www.w3cschool.cn/sql/sql-string-functions.html SQL 字符串函数 序号 Name Description 备注 1 ASCII() 返回最 ...