GeoHash本质上是空间索引的一种方式,其基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。以GeoHash方式建立空间索引,可以提高对空间poi数据进行经纬度检索的效率。
http://www.cnblogs.com/LBSer/p/3310455.html
关于什么是Geohash可以参考这篇文章Java实现空间索引编码(GeoHash),个人觉得写得不错。
最近在做附近定位功能的产品,geohash是一个非常不错的实现方式。查询资料,发现阿里的这篇文章讲解的很好。但文中并没有给出geohash显示的工具。无奈,也没有查到类似的。只好自己简单显示一下,方便自己理解。
GeoHash索引是一种基于B树索引,又结合了格网索引的思想的使用广泛的空间索引算法。GeoHash将空间位置编码为一串字符,通过字符串的比较可以得到空间的大致范围。这种编码方法起初被用于以唯一的URL标识地图上的点实体,而点实体一般是以经纬度标识的,所以问题就转变为如何使用URL标识经纬度坐标。下面举例说明GeoHash编码的具体实现步骤。设定武汉大学的经纬度坐标是(114.360734E, 30.541093N),首先,可以通过如下算法对纬度30.54进行逼近编码: (1)对维度区间[-90,90]进行二分为[-90,0)和[0,90],称为左右区间,可以确定30.541093属于右区间[0,90],给标记为1; (2)接着将区间[0,90]进行二分为 [0,45)和[45,90],可以确定30.541093属于左区间 [0,45),给标记为0; (3)递归上述过程30.541093,如果给定的纬度属于左区间,则记录0,如果属于右区间则记录1,这样随着算法的进行会产生一个序列101010110110111,序列的长度跟给定的区间划分次数有关。 (4)同样的方法,对经度区间[-180, 180]进行编码,可以得到一个二进制序列110100010101001。 (5)合并经纬度编码,偶数位放经度编码(第一位从0开始),奇数位放纬度编码,把两串编码组合生成新串11100 11001 00011 10011 01100 10111。 (6)对合成的新的二进制串,每五位转成十进制数得到28,25,3,19,12,23,然后再进行Base32编码得到该经纬度的GeoHash编码为wt3mdr。
首先,geohash用一个字符串表示经度和纬度两个坐标。某些情况下无法在两列上同时应用索引 (例如MySQL 4之前的版本,Google App Engine的数据层等),利用geohash,只需在一列上应用索引即可。
关于GeoHash的了解是我在做爬虫时发现一些网站比如美团、饿了么都会把一些地理位置进行编码,在检索时能够更快的进行地理空间上的检索,找到距离相近的位置。
最近需要实现一个功能,查找车辆附近的加油站,如果车和加油站距离在200米以内,则查找成功。
小麦同学是个吃货+技术宅,平日里就喜欢拿着手机地图点点按按来查询一些好玩的东西。某一天到北海公园游玩,肚肚饿了,于是乎打开手机地图,搜索北海公园附近的餐馆,并选了其中一家用餐。
工作需要,实现了一下Geo Hash算法。 尽量直接使用位操作,比网上常见的字符串判断位值得写法效率应该高一点。 TODO:循环的写法可以再优雅一点;注释可以再清晰一点。
本文作者:smallyang,腾讯 IEG 开发工程师 什么是geohash?它的原理是什么?它帮助我们解决了哪些痛点,本文为你娓娓道来。 本文包含以下内容,阅读完需要约10分钟: 我们日常生活中遇到哪些定位的场景 简单复习一下经纬度 geohash原理解析 geohash存在的边界问题 如何解决边界问题 计算两点距离的计算 geohash 在redis中的实现 我们日常生活中遇到哪些定位的场景 我们上下班经常会用APP打车和共享单车,下面2张图,应该都很熟悉,打开定位,查找我附近的车,那么,这
在空间索引类问题当中,一个最普遍而又最重要的问题是:”给定你某个点的坐标,你如何能够在海量的数据点中找到他所在的区域以及最靠近他的点”?
最近在做共享单车单车的项目,用户打开APP后,如果根据当前的经纬度坐标获取附近的车辆呢?
你们有没有遇到被面试官嘲讽的场景;之前有位刚毕业的小学弟在上海魔都某某某大公司面试,二面主要是问了关于redis的相关知识点,回答的也是磕磕绊绊的,其中一个问题是如何实现搜索附近人加好友功能;想跟小伙伴们一起分享、一起探讨下。如果有不正确的地方,欢迎指正批评,共同进步~~~
导语 | 我们在使用APP时,是什么能让它快速精准定位我们的具体位置?答案就是geohash。那究竟什么是geohash呢?它的原理是什么?它又帮助我们解决了哪些痛点,本文帮你逐一击破,且听我娓娓道来。 一、日常生活中遇到哪些定位的场景 我们上下班经常会用APP打车和共享单车,下图应该都很熟悉,打开定位,查找我附近的车,那么,这个是怎么实现的呢? 我脑海中第一个实现方式是:实时上报经纬度。在数据库里,把经纬度都标记为索引,通过查找对比经纬度的值,来找到附近1km的车子,但是这种做法第一是索引比较多
geohash是实现空间索引的一种算法,其他实现空间索引的算法有:R树和其变种GIST树、四叉树、网格索引等
本文实例讲述了PHP进阶学习之Geo的地图定位算法。分享给大家供大家参考,具体如下:
各种社交软件里面都有附件的人的需求,在该应用中,我们查询附近 1 公里的食客,同时只需查询出 20 个即可。 这都依赖基于位置信息服务(Location-Based Service,LBS)的应用。LBS应用访问的数据是和人或物关联的一组经纬度信息,而要能查询相邻的经纬度范围,GEO就非常适合应用在LBS服务的场景。
前言 上篇博客中提到了空间索引的用途和多种数据库对空间索引的支持情况,那么在应用层以下,好学的小伙伴应该会考虑空间索引的实现原理了。 目前空间索引的实现有 R树和其变种GIST树、四叉树、网格索引等。
最近想做一个简单的地理位置分析,比如获取一些城市公交站点对应的geohash,geohash其实是将平时常见的经纬度进行了降维,这样可以进行类似附近的餐馆等内容的分析。
本文主要介绍了在Java中如何实现基于地理位置的搜索,包括使用Geocoding API和Spatial4j库,以及如何在Spring Boot应用中集成和实现搜索功能。此外,还介绍了如何对搜索结果进行排序和过滤,以及如何使用Elasticsearch进行全文搜索。
附近的人的位置用经纬度表示,然后通过两点的经纬度计算距离。根据网上的推荐,最终采用geohash。 geohash的实现java版: 1 import java.util.BitSet; 2 import java.util.HashMap; 3 import java.util.Map; 4 5 import org.apache.commons.lang3.StringUtils; 6 7 public class Geohash { 8 9 priva
进入正题,用redis实现地理位置信息,我们可以使用redis(3.2版本以上支持)中的GeoHash的结构去实现。首先我们先看一下geohash的命令与使用:
这只是假设地球是一个球体,因为使用的距离公式是Haversine公式。这个公式仅适用于地球,而不是一个完美的球体。当在社交网站和其他大多数需要查询半径的应用中使用时,这些偏差都不算问题。但是,在最坏的情况下的偏差可能是0.5%,所以一些地理位置很关键的应用还是需要谨慎考虑。
用法:GEOADDkey longitude latitude member [longitude latitude member …]
geoadd key [NX|XX] [CH] longitude latitude member [longitude latitude member ...]
geohash是一种分层的空间数据结构,将空间网格化.并将二维坐标用一个字符串表示.
我们日常电脑美团或者饿了么点外卖,附近的商家几乎都是秒回的,最简单的理解,我们可以用经纬度来计算。
交友与婚恋是人们最基本的需求之一。随着互联网时代的不断发展,移动社交软件已经成为了人们生活中必不可少的一部分。然而,熟人社交并不能完全满足年轻人的社交与情感需求,于是陌生人交友平台悄然兴起。
redis地理位置信息geo的基本操作和使用咱们之前已经聊过,可以看看这篇文章 微信附近的人,用redis也能实现?
实现合并流数据在redis存储的地理位置数据拉宽操作——LocationInfoRedisFunction
”昨夜西风凋碧树。独上高楼,望尽天涯路”,我们先从Redis的特性、用途及数据类型这几个方面介绍下Redis,对其有个总体上的认知。
打造地理位置信息与区块链的关系对象模型,建立一套 人->位置->真实世界->传递信任->价值转移->位置->人 的生态模型,实现用区块链来索引真实世界的愿景。
针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。
针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。
前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。
https://juejin.im/post/5da40462f265da5baf410a11
要提供完整的“附近的人”服务,最基本的是要实现“增”、“删”、“查”的功能。以下将分别进行介绍,其中会重点对查询功能进行解析。
1. Geohash介绍 1.1. 应用场景 POI(Point of Interest):某个地图点周围的美食娱乐等的搜索; 热点分析:统计某个地图区域的热度; 其他,暂时没想到。 1.2. Geohash算法 地图上一般是使用经度和纬度两个维度来唯一的确定一个点,而geohash采用经纬度二维值转为一维的值。 优点: 只需要对一个字段进行索引,提高性能、降低复杂度 可转成可排序,可比较的字符串,满足灵活的需求 具体详细的介绍参考 维基百科: https://en.wikipedi
来源:juejin.im/post/5da40462f265da5baf410a11
前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。
针对“附近的人”这一位置服务领域的应用场景,互联网应用几乎每天都会用到,比如搜附近的美食,周边游等等;常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列 zset 以及 geohash 编码,实现了空间搜索功能,且拥有极高的运行效率。本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。
作者简介:万汨,饿了么资深开发工程师。iOS,Go,Java均有涉猎。目前主攻大数据开发。喜欢骑行、爬山。
算法实现原理请看:http://www.php20.cn/article/125
可以用于基于地理位置的业务场景。比如:查询两地之间的距离,方圆几里存在的地理位置等等。
来源:juejin.cn/post/6844903966061363207 作者简介:万汨,饿了么资深开发工程师。iOS,Go,Java均有涉猎。目前主攻大数据开发。喜欢骑行、爬山。 前言:针对“附近的人”这一位置服务领域的应用场景,常见的可使用PG、MySQL和MongoDB等多种DB的空间索引进行实现。而Redis另辟蹊径,结合其有序队列zset以及geohash编码,实现了空间搜索功能,且拥有极高的运行效率。 本文将从源码角度对其算法原理进行解析,并推算查询时间复杂度。 要提供完整的“附近的人”服务,
针对“附近的人”这一位置服务领域的应用场景,常见的可使用 PG、MySQL 和 MongoDB 等多种 DB 的空间索引进行实现。
记忆中,一个下班的夜晚,她从人群中轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。她的眼睛充满清澈的阳光和活力,她的双眸中印着银河系的星光。
领取专属 10元无门槛券
手把手带您无忧上云