首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GeoHash 经纬度坐标编码与解码算法

关于GeoHash的了解是我在做爬虫时发现一些网站比如美团、饿了么都会把一些地理位置进行编码,在检索时能够更快的进行地理空间上的检索,找到距离相近的位置。...这样纬度二分结束,可以得到一串0-1编码,纬度产生的编码为10111 00011,经度也是这样组码,经度产生的编码为11010 01011 偶数位放经度,奇数位放纬度,把2串编码组合生成新串:11100...11101 00100 01111,这里的偶数为是0开始的。...但是如果现在不仅仅是三个位置,如果是几十万甚至是更多的位置,我们应该如何处理呢?如果还是求任意两个位置的欧式距离显然那是灾难性的。...我们在前面组码经纬纬度时就是这样的,经度纬度经度纬度的间隔组码,因此会出现上面所说的情况,匹配度很低,但是距离很近的情况。

3.2K20

实践:了解Redis Geo范围查询,获取当前位置最近的经纬度

Redis3.2+版本开始对Geo的支持进行了增强,提供了可以根据给定经纬度点位置作为中心点,在指定范围内进行检索距离最近的经纬度点。...key:geo集合的唯一键 longitude:新增GPS位置的经度 latitude:新增GPS位置的纬度 member:该GPS位置的唯一标识 georadius 命令 georadius key...GPS经度 latutude:待检索的GPS纬度 radius:检索的范围,单位可选择:米(m)、千米(km)、英里(mi)、英尺(ft) withcoord:将匹配的经纬度输出 withdist...:将匹配经纬度的距离输出 count:输出匹配的数量 asc|desc:根据距离排序,asc:由近到远,desc:由远到近 georadius指令会将给定的经纬度作为检索的中心点,在指定范围内进行检索匹配的经纬度点的位置...检索实现 在实践的过程,使用了两种方式来进行测试,发现在检索的效率上有着轻微的差异,下面通过代码实践来进行比对。

2.9K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学术大讲堂 |(七)如何应用大数据技术秒杀一个貌似不可能的任务

    好,任务的内容我们基本介绍清楚了,那么我们初始的解决方案是如何的呢? 首先,最基础的,就是我们的栅格划分,直接看代码,可以有最直观的理解。这是我们判断某个经纬度点归属哪一个栅格的函数。...简单地说就是以某个点为原点,然后根据指定经纬度计算与原点的差值跨了多少个栅格,并且把经度方向的编码纬度方向的编码串起来。 栅格的划分是整理栅格化展示的理论基础,有了它,我们就可以进行数据预处理了。...设某栅格:[经度编号m][纬度编号n],其对应的KEY=(floor(m/64)+ m%64)*100000+(floor(n/64)+ m%64) 可以看出合并后,需要检索的KEY量大幅减少为:2...优化6——构建纬度到象素坐标的快速映射矩阵 经纬度到象素坐标的标准转换过程: 经纬度--》墨卡托投影坐标--》当前屏幕象素坐标,转换公式可以看出,这是个非线性转换,需要比较复杂的计算。...逐个点转换,1920*1080=200多万个点,比较耗时(实测开销大约为2-3秒) 我们构建纵向横向映射矩阵,只需转换1920+1080=3000次,其他栅格直接映射矩阵检索出转换结果(开销可压缩为小于

    71520

    redis | 九、redis之Geospatial

    中国诚实坐标经纬度查询,进行查询中国城市具体坐标! 1. geoadd 添加经纬元素 将指定的地理空间位置(纬度经度、名称)添加到指定的key。...key里返回所有给定位置元素的位置(经度纬度)。...返回值 GEOPOS 命令返回一个数组, 数组的每个项都由两个元素组成:第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。 当给定的位置元素不存在时, 对应的数组项为空值。...由两个元素组成的坐标,分别为经度纬度。...GEOADD 命令 将指定的地理空间位置(纬度经度、名称)添加到指定的key Redis GEORADIUSBYMEMBER 命令 找出位于指定范围内的元素,中心点是由给定的位置元素决定

    66620

    交友系统设计:哪种地理空间邻近算法更快?

    1、SQL 邻近算法 我们可以将用户经、纬度直接记录到数据库纬度记录在 latitude 字段,经度记录在longitude 字段,用户当前的纬度经度为 X,Y,如果我们想要查找当前用户经、纬度距离...那么如何选择网格大小?如何根据用户位置得到其所在的网格?又如何得到当前用户位置周边的其他网格呢?我们看 下实践更常用的动态网格 GeoHash 算法。...,分别针对经度纬度,求取当前区间(对于纬度而言,开始的区间就是[-90, 90], 对于经度而言,开始区间就是[-180, 180])的平均值,将当前区间分为两个区间。...如此不断重复,可以在经度纬度方向上,得到两个二进制数。这个二进制数越长,其所在的区间越小,精度越高。...合并规则是,第一位开始,奇数位为经度,偶数位为纬度,上面例子合并后的结果为 01101 11111 11000 00100 00010,共 25 位二进制数。

    23010

    如何在附近商户查找离你最近的商家?

    前提背景用户位置按照经纬度获取用户可选范围内的商家查询后的结果按顺序返回给用户商户位置以经纬度存储常用方法数据库查询筛选 根据用户当前位置用户所选择范围, 在数据库查询后将结果在数据库中排序或者在内存中排序..., 返回给用户--longitude 表中经度字段--latitude 表维度字段--lat1 指定点维度--lon1 指定点经度-- radius_in_km为用户所选择的范围select business_id...[-180,180],[90, -90],这里我们以经度为例,将经度分为[-180,0],[0,180],有一个点经纬度为[-121,34],用1表示在[-180,0]区间,0表示[0,180]区间,那么这个点表示为...25次后,geohash位数经过编码后为10,这时候误差为0.6米,几乎不影响使用,如果需要更高精度,可以继续划分 另外geohash检索时常见的边缘问题,因为geohash是按矩形块检索的,如果一个矩形块内有...a,b两点,b与a的距离为10km,相邻矩形块有c点,c与a的距离为5km,由于a与b前缀编码相同位数更多,将会认为a与b的距离更近,因此为了避免边缘问题,我们在检索时,还要将相邻矩形块也一起遍历,,也就是看似在第三层矩形找距离最近的点实际上由于边缘问题

    9210

    视频融合平台EasyCVR设备经纬度信息填写的细节优化

    在上期文章,我们介绍了关于当通道填写为非法经纬度信息时,设备将定位在电子地图上的某个固定位置。我们发现在目前的项目中,仍然存在有很多用户填写非法的经纬度信息,从而导致地理位置信息错乱。...为了进一步提升平台的操作体验、保障平台功能的正常使用以及约束用户的填写操作,我们对设备经纬度信息填写进行了优化。在用户填写经纬度信息时,增加了一定的限制。经度纬度的最大值分别是180°、90°。...经度的数值是0°~ 180°,纬度的数值是 0°~90°,所以我们在用户填写经纬度的代码中新增了限制:如上图所示,经度在用户填写0以下时,左侧的按钮会将不允许再进行点击,并且用户输入的值小于0时会自动变为...0;同理,纬度左右按钮限制在-90 ~ 90。...平台可提供视频监控直播、录像、云存储、检索与回看、智能告警、服务器集群、平台级联、数据共享等能力,可应用在多场景,如:智慧工地、智慧校园、智慧社区、智慧工厂等等。

    48520

    Elasticsearch 在地理信息空间索引的探索演进

    如何精确定位一个地址?由经度纬度相对高度组成的地理坐标系,能够明确标示出地球上的任何一个位置。地球上的经度范围[-180, 180],纬度范围[-90,90]。...通常以本初子午线(经度为0)、赤道(纬度为0)为分界线。对于大多数业务场景,由经纬度组成的二维坐标已经足以应对业务问题,可能重庆山城会有些例外。2. 如何计算两个地址距离?...这个公式非常简单,只需用到arcsincos两个高中数学公式。其中φλ表示两个点纬度经度的弧度制度量。...它是分别获取符合纬度范围条件的文档集合符合经度范围条件的文档集合然后进行交集,初筛了太多无效的文档集合。...而ES 5.0版本开始,彻底优化了数值查询(从一维到N维),其底层是Lucene 6.0版本实现的BKD tree的独立索引。其实现不仅降低了内存开销,而且提升了检索索引速度。

    1.4K30

    如何在Redis快速推算两地之间的距离?——Geo篇

    无论是推送附近的餐馆还是对全国范围内的服务点进行分析,快速而准确地处理检索地理位置信息都至关重要。Redis,作为一种高性能的内存数据库,为我们提供了这样的解决方案。...有效的经度 -180 度到 180 度。有效的纬度 -85.05112878 度到 85.05112878 度,如果超过此范围,redis 会直接报错。...添加地理位置数据首先,我们需要向 Redis 添加一些中国城市的地理位置数据:你可以通过这个网站 http://www.jsons.cn/lngcode/ 来查询一下一些城市的经纬度。...每条记录包括经度纬度以及位置的名称。你是否会好奇 geo 是通过什么类型在 Redis 存储的?...china:city shanghai1) 1) "121.47000163793563843" 2) "31.22999903975783553"geopos 命令用于获取一个或多个成员的地理位置信息(经度纬度

    26710

    如何使用AngularJSPHP为任何位置生成短而独特的数字地址

    第2步 - 创建数据库 本教程描述的Web应用程序接受来自用户的地址,并为其生成地图代码以及指定位置的纬度经度。您将把这些数据存储在MySQL数据库,以便稍后通过输入相应的数字地址来检索它。...然后,生成的映射代码以及纬度经度物理地址将存储在您在步骤2创建的数据库。db.php充当此操作的帮助程序。...然后添加以下代码,结果获取纬度经度信息,并使用我们在步骤5的index.php文件创建的两个HTML标签显示它: . . ....第9步 - 添加数据库凭据测试地图代码生成 回想一下,此应用程序将在表单输入的每个地址 - 以及其纬度经度地图代码 - 存储在您在步骤2创建的数据库。...您现在可以为世界上的任何位置创建唯一的地图代码,然后使用该地图代码检索位置的物理地址。 结论 在本教程,您使用Google Maps API固定位置并获取其经度纬度信息。

    13.2K20

    空间索引-geohash算法实现

    ,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度检索 通过对经纬度的分割,将地球分割成无数的小正方形,每个区域,就是个geohash编码 Geohash...其实就是将整个地图或者某个分割所得的区域进行一次划分,由于采用的是base32编码方式,即Geohash的每一个字母或者数字(如wx4g0e的w)都是由5bits组成(2^5 = 32,base32...$limit_1:$limit_0);     } } 由此,纬度24.88849可得字符串为10100011011001011001 经度118.6197800000,经度分为东经西经,区间为[-...180,180],由此可得字符串11010100010110100001 组合2个字符串,偶数放经度位,奇数放纬度位,php代码实现 /**  * @param $latitude_str 纬度  *...for ($i = 0; $i =经度         $str .= $longitude_str{$i}

    1.6K20

    Redis 实战篇:Geo 算法教你邂逅附近女神

    我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆,一个下班的夜晚,她人群轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度的编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推:...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?

    1.6K10

    Redis 应用实践-地理位置

    每个元素都是一个带有经度纬度信息的地理位置。地理位置集合的元素是按照它们的距离近到远排序的。...地理位置集合的每个元素都有一个唯一的成员名,成员名用于标识该元素,而元素的经度纬度信息则通过一个坐标对(longitude, latitude)来表示。...在地理位置集合,可以使用以下命令进行操作:geoadd命令:向地理位置集合添加一个元素。geopos命令:获取地理位置集合中指定元素的经度纬度。...三、Python应用中使用地理位置数据结构下面我们将介绍如何在Python应用中使用Redis的地理位置数据结构。假设我们有一个城市的商家列表,每个商家都有一个唯一的ID、名称、经度纬度信息。...添加商家信息到地理位置集合首先,我们需要将商家信息添加到地理位置集合。我们可以使用Redis的geoadd命令将商家的经度纬度信息添加到地理位置集合

    91020

    Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

    我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆,一个下班的夜晚,她人群轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度的编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推: ?...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?

    1.3K20

    NASA数据集:大气红外探测器(AIRS)是第二个地球观测系统(EOS)极轨道平台 EOS Aqua 上表层温度(陆地海洋表面)、表层气温、气温和水汽剖面、对流层顶特征、柱状可降水量等数据

    地球物理参数已被平均化,并按 1 x 1 度的网格单元分档,经度 -180.0 度到 +180.0 度,纬度 -90.0 度到 +90.0 度。...痕量气体参数包括一氧化碳、甲烷臭氧的总量垂直分布。数据文件变量的实际名称应从处理文件说明文件推断。...扫描线穿过日期线的两个部分根据日期分别包含在不同的 L3 文件,因此网格框的数据点在时间上总是重合的。AIRS 3 级网格单元的边缘位于日期线(180E/W 经纬度边界)处。...地球物理参数已被平均化并划分为 1 x 1 度的网格单元,经度 -180.0 度到 +180.0 度,纬度 -90.0 度到 +90.0 度。...痕量气体参数包括一氧化碳、甲烷臭氧的总量垂直分布。数据文件变量的实际名称应从处理文件说明文件推断。

    9700

    Geohash原理

    以GeoHash方式建立空间索引,可以提高对空间poi数据进行经纬度检索的效率。...合并:偶数位放经度,奇数位放纬度,把2串编码组合生成新串如下图 g....Geohash的0、1串序列是经度0、1序列纬度0、1序列的数字交替进行排列的,偶数位对应的序列为经度序列,奇数位对应的序列为纬度序列,在进行第一次划分时,Geohash0、1序列的前5个bits...(11100),那么这5bits中有3bits是表示经度,2bits表示纬度,所以第一次划分时,是将经度划分成8个区段(2^3 = 8),将纬度划分为4个区段(2^2 = 4),这样就形成了32个区域。...为什么分别给经度维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。

    3.1K40

    Redis 实战篇:通过 Geo 类型实现附近的人邂逅女神

    我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆,一个下班的夜晚,她人群轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...能不能将经纬度转换成一个浮点数呢? ” 思路对了,为了实现对经纬度比较,Redis 采用业界广泛使用的 GeoHash 编码,分别对经度纬度编码,最后再把经纬度各自的编码组合成一个最终编码。...将[90, 180] 分为[90, 135) [135, 180],这次落在左分区,编码 ‘0’。 如此,最后我们就得到一个 4 位的编码。 而纬度的编码思路跟经度也是一样的,不再赘述。...合并经纬度编码 假如计算的经纬度编码分别是 11011 00101`,目标编码第 0 位则从经度第 0 位的值 1 作为目标值,目标编码的第 1 位则从纬度第 0 位值 0 作为目标值,以此类推: ?...,如何查找以这个经纬度为中心的一定范围内的其他用用户呢?

    1.1K50

    redis常用命令和数据类型

    语法: geoadd key 经度 纬度 地名 经度 纬度 地名 ... ... 2、geopos:获取地理位置的坐标(经度纬度) geopos key 地名 3、geodist:计算两个位置之间的距离...WITHCOORD: 将位置元素的经度纬度也一并返回。 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。...这个选项主要用于底层应用或者调试, 实际的作用并不大。 COUNT: 指定半径范围内显示的目标数量(半径内有100个,可以只显示50个) ASC: 查找结果根据距离近到远排序。...georadiusbymember GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度纬度来决定中心点...destkey Redis 突然变慢了如何排查并解决?

    90010

    是什么能让 APP 快速精准定位到我们的位置?

    本文包含以下内容,阅读完需要约10分钟: 我们日常生活遇到哪些定位的场景 简单复习一下经纬度 geohash原理解析 geohash存在的边界问题 如何解决边界问题 计算两点距离的计算 geohash...在redis的实现 我们日常生活遇到哪些定位的场景 我们上下班经常会用APP打车共享单车,下面2张图,应该都很熟悉,打开定位,查找我附近的车,那么,这个是怎么实现的呢?...地球铺平面图 以赤道本初子午线为界,将地球分为经度纬度。赤道是在0度,本初子午线也在0度。以赤道作为经度X横坐标,以本初子午线作为纬度 Y 竖坐标。...经纬度经度(longitude)``纬度(latitude)`简称 `lng`  `lat 其中,本初子午线向东划分180度称为东经,用”E”表示:(0, 180];向西划分180度为西经,...指定一个位置的经纬度坐标值。 根据十字坐标图二分法,将纬度经度划分成10的二进制数字串。 按照“偶数位放经度,奇数位放纬度”算法,合并经度纬度这2个二进制数字串。

    1.6K30

    根据两点的经纬度计算距离_经纬度两点距离

    地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极地球中心的假想线),在地球腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”。...纬度的高低也标志着气候的冷热,如赤道纬度地地区无冬,两极纬度地区无夏,中纬度地区四季分明。...我们很容易地图上查出来是东经116度24分,北纬39度54分。在大海中航行的船只,只要把所在地的经度测出来,就可以确定船在海洋的位置前进方向。 纬度共有90度。...横线是纬度,竖线是经度。 当然可以计算,四元二次方程。 经度纬度都是一种角度。经度是个两面角,是两个经线平面的夹角。...经纬度单位换算 ---- 经纬度互换 ---- 度(DDD):E 108.90593度 N 34.21630度 如何将度(DDD):: 108.90593度换算成度分秒(DMS)东经E 108度54分22.2

    2.2K20
    领券