Geohash介绍
Geohash介绍
Geohash是一种地址编码,能把二维的经纬度编码成字符串,某一区域范围内的经纬度是一致的,其中有编码长度控制区域的范围 精度参考
使用场景
实时LBS应用
LBS应用中,搜索某某(地点) 附近 的什么(地点),重点在于附近,如果没有Geohash
算法,你可能需要做。
- 圈定经度在某范围
- 圈定纬度在某范围
- 一般还会加上时间来做匹配
在数据量不多的时候这个方案确实可行,可是一旦数据量上去之后,这个方式别说实时应用甚至连离线场景都不合适。另外基本上应用基于LBS后,数据都是海量的。
所以通过对经纬度做Geohash
成为字符串后,然后对该字符串以及时间在数据库中添加索引,再加上业内最常用的分库分表,即使海量基于LBS方面的数据实时查询也成为可行。
地理位置信息回溯
某打车公司,偶尔需要配合公安破案以及xx方面诉求的数据回溯,要调出某一时间段某一地区所有司机的信息
,由于司机是实时上报坐标,数据量异常之大(日均几百G的,约500亿记录)
如果利用常规的圈定经度,纬度,时间范围的方式来查询根本不可行,所以利用Geohash在Hadoop中去查询的方式使得从大量数据中回溯特定数据方案可行。
当然这种诉求还有更佳的解决方案来做,由于并非高频需求,目前只是简单入Hive
然后离线跑数据
简单使用
下边简单介绍在python
和php
中使用Geohash
,以及遇到的问题
python
推荐使用Google
上边的这个包,Download下来之后,解压到任意位置
1 |
16:02 liujb@localhost /Users/liujb/Dropbox/Didi/python-geohash |
然后在该目录
- 大专栏 Geohash介绍i>输入
- 输入
import geohash
,导入geohash包 print geohash.encode(30.725014, 104.257957)
- 得到
wm6nu3q64mxr
python
,进入python
环境,
整个过程如下
1 |
% python |
看得出 30.725014, 104.257957
和 30.735014, 104.267957
的hash值分别是wm6nu3q64mxr
, wm6nuejs7mzg
两个字符串的前5位相同,两个地点相隔大约2公里左右
注意遇到的坑
1 |
>>> print geohash.encode(104.257957, 30.725014, 5) |
这是因为经纬度弄反了,所以geohash.encode()
第一个参数是纬度,第二个参数是经度,第三个参数是编码长度。这个坑是因为一开始使用的是vinsci这个包,该包经纬度弄反了不会报错,也是会出来一个编码。当时并没有注意到该环节,导致匹配了很多很远的经纬度数据
php
本文参考
Geohash介绍的更多相关文章
- lucene索引文件大小优化小结
http://www.cnblogs.com/LBSer/p/4068864.html 随着业务快速发展,基于lucene的索引文件zip压缩后也接近了GB量级,而保持索引文件大小为一个可以接受的范围 ...
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
- GeoHash原理解析
GeoHash 核心原理解析 引子 一提到索引,大家脑子里马上浮现出B树索引,因为大量的数据库(如MySQL.oracle.PostgreSQL等)都在使用B树.B树索引本质上是对索引字段 ...
- 【转】GeoHash核心原理解析
好久没更新过博客了,先转载一篇文章吧. 源地址:http://www.cnblogs.com/LBSer/p/3310455.html 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按 ...
- GeoHash核心原理解析
http://www.cnblogs.com/LBSer/p/3310455.html 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩, ...
- [转]GeoHash核心原理解析
原文出处: zhanlijun 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐 ...
- 基于GeoHash算法的附近点搜索实现(一)
1. 引入 最近在参加学校的计算机仿真大赛,时间好像有点不够,所以只完成了前面的一部分最基础的功能,中途还是选择了放弃.但是之前的部分的确觉得完成得还不错,在这里分享一下.题目是要完成一个宇宙飞船加油 ...
- GeoHash核心解析
GeoHash核心解析 引子 机机是个好动又好学的孩子,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西.某一天机机到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐馆,并选了其中 ...
- 空间索引 - GeoHash算法及其实现优化
h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0 } body { font-family: "Helvetica Neue&qu ...
随机推荐
- Huffman编码实验
一. 实验目的 熟练掌握哈夫曼树的建立和哈夫曼编码的算法实现. 二. 实验内容 根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求赫夫曼编码,并能把给定的编码进行译码. 三. 实验要求 ...
- spring boot pom demo
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- springMVC的注解@PathVariable是什么?详情及用法解析
在路由中定义变量规则后,通常我们需要在处理方法(也就是@RequestMapping注解的方法)中获取这个URL变量的具体值,并根据这个值(例如用户名)做相应的操作,Spring MVC提供的@Pat ...
- Django框架的前奏(安装及介绍)
几个重要的概念: web的本质: 浏览器中输入网址敲回车发生了几件事? 1.浏览器向服务端发送请求 2.服务端接收请求 3.服务端返回相应的响应 4.浏览器接收响应 根据特定的规则渲染页面展示给用户 ...
- Vue项目中跨域问题解决
后台更改header 使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建) Jquery jsonp 一.后台更改header header('Access-C ...
- Python文件基本操作及上下文管理
文件基本操作 打开文件:f = open(fole_name,mode = 'r'),传入表示文件路径的字符串,会返回一个文件对象,mode是文件打开模式. 关闭文件:f.close(),调用给定文件 ...
- ACM-ICPC Nanjing Onsite 2018 I. Magic Potion
题意:类似二分图匹配给的题目,不过这次在这里给出了k,表示没人可以再多一次匹配机会,这次匹配不能用上一次被匹配的对象 分析:不能用匈牙利做俩次匹配,因为俩次的最大匹配并不等价于总和的匹配,事实证明,你 ...
- python学习笔记(23)-异常处理
#异常处理与调试 #异常:在运行代码过程中遇到的任何错误,带有error字样的都是异常 #异常处理,对代码中所有可能出现的异常进行的处理 #1.处理某个错误 2,处理某个类型的错误 3 有错就抓 一. ...
- iOS渐变视图&动画库、腰杆、音频水滴水波手势、多种对话框、四级展开效果等源码
iOS精选源码 用户行为追踪--无侵入埋点 .终端日志的打印 支持storyboard的渐变视图&动画库 支持圆形.竖直.横向的摇杆 纯swift实现的类似excel表格效果 swift实现自 ...
- Cocos2dx-JS学习01
123456 <body><script src="res/loading.js"></script><canvas id="g ...