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. python进阶08 MySQL基础补充

    python进阶08 MySQL基础补充 本次课程都是基于三张表格的使用 一.子查询 #如何找到‘张三’的成绩 #思路:先找到张三的学号,在拿这个张三的学号到成绩表里面去匹配,得出成绩 #如何用一条查 ...

  2. Java EE学习笔记(十)

    MyBatis与Spring的整合 1.整合环境搭建 1).要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只使用这两个框架中所提供的JAR包是不够的,还需要其他的JAR ...

  3. Java输入输出流简单案例

    package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...

  4. Java基础学习_01 概述及环境配置

    一.概述 1.Java语言平台版本 1.1J2SE(Java 2 Platform Standard Edition)标准版 为开发普通桌面和商务应用程序提供的解决方案,该技术体系是其他两者的基础,可 ...

  5. 一起来学Spring Cloud | 第四章:服务消费者 ( Feign )

    上一章节,讲解了SpringCloud如何通过RestTemplate+Ribbon去负载均衡消费服务,本章主要讲述如何通过Feign去消费服务. 一.Feign 简介: Feign是一个便利的res ...

  6. 【Unity3D】3D游戏学习

    1.理解游戏元素,简单回答以下问题: 1.1简单介绍一款上世纪(19XX)出品的计算机游戏,然后按课件的方法描述游戏的五个基本元素.(讲目标.玩法.规则) 1.1.1仙剑奇侠传 <仙剑奇侠传&g ...

  7. Redis、Memcache区别

    Redis.Memcache区别 redis单核 memcahce多核 redis支持数据持久化 redis支持的数据类型比较多 memcache 只有key->value类型 key-> ...

  8. GreenDao 数据库升级 连接多个DB文件 或者指定不同的model&dao目录

    相信很多人都用过greenDao 今天 我抽空总结下使用的时候一些小东西吧 废话不多说 下边就GreenDao 的使用遇到的问题以及解决方案记录一下吧. 1.greendao 指定不同的生成目录: S ...

  9. hdfs校验和

    hdfs完整性:用户希望储存和处理数据的时候,不会有任何损失或者损坏.所以提供了两种校验: 1.校验和(常用循环冗余校验CRC-32). 2.运行后台进程来检测数据块. 校验和: a.写入数据节点验证 ...

  10. LR中变量、参数的使用介绍

    Action(){ char * url = "www.baidu.com"; char arr_url[1024]; //将url变量的值复制给p_url1参数 lr_save_ ...