首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Geohash原理

    GeoHash缺陷 上文讲了GeoHash的计算步骤,仅仅说明是什么而没有说明为什么?为什么分别给经度和维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...输入围栏点坐标集合List points和指定的geohash长度length 2. 计算围栏的外包矩形的左上角和右下角坐标lat_min、lat_max、lng_min、lng_max 3....以外包矩形中心点为圆心,以d/2为半径做一个圆,计算圆覆盖范围内的geohash 4.1 获取圆的外包矩形左上角和右下角定点坐标经纬度,存储到double[] locs 4.2 根据geohash字符长度计算该长度...geohash编码对应的经纬度间隔(latA,lngA) 4.3 根据latA和lngA,计算出locs组成的矩形的左上角和右下角定点的经纬度,在geohash划分的网格的索引(也就是第几个),分别记为...剔除sets中geohash编码对应矩形的中心点不在points围栏范围内的geohash,得到最终的geohash结果集 未经允许不得转载:肥猫博客 » Geohash原理

    3.7K40

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

    我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆中,一个下班的夜晚,她从人群中轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近的其他数据,按照距离排序,如何下手呢?...” 我们可以通过区域来过滤出有限「女神」坐标数据,再对矩形区域内的数据进行全量距离计算再排序,这样计算量明显降低。 “如何划分矩形区域呢?...” 多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的附近的人。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j

    1.7K10

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

    我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆中,一个下班的夜晚,她从人群中轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近的其他数据,按照距离排序,如何下手呢?...” 我们可以通过区域来过滤出有限「女神」坐标数据,再对矩形区域内的数据进行全量距离计算再排序,这样计算量明显降低。 “如何划分矩形区域呢?...” 多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的附近的人。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j

    1.4K20

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

    我该如何实现发现附近的人?我也希望通过这个 App邂逅女神…… 记忆中,一个下班的夜晚,她从人群中轻盈的移动着,那高挑苗条的身材像漂浮在空间中的一个飘逸的音符。...MySQL 实现 “计算「附近的人」,通过一个坐标计算这个坐标附近的其他数据,按照距离排序,如何下手呢?...” 我们可以通过区域来过滤出有限「女神」坐标数据,再对矩形区域内的数据进行全量距离计算再排序,这样计算量明显降低。 “如何划分矩形区域呢?...” 多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的附近的人。...实战 根据经纬度和距离获取外接矩形最大、最小经纬度以及根据经纬度计算距离使用了一个第三方类库: com.spatial4j

    1.2K50

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

    如何精确定位一个地址?由经度、纬度和相对高度组成的地理坐标系,能够明确标示出地球上的任何一个位置。地球上的经度范围[-180, 180],纬度范围[-90,90]。...通常以本初子午线(经度为0)、赤道(纬度为0)为分界线。对于大多数业务场景,由经纬度组成的二维坐标已经足以应对业务问题,可能重庆山城会有些例外。2. 如何计算两个地址距离?...这个公式非常简单,只需用到arcsin和cos两个高中数学公式。其中φ和λ表示两个点纬度和经度的弧度制度量。...简单总结一下要点: 利用中心点坐标和半径确定矩形区域边界。 利用Bool查询综合两个NumericRangeQuery查询,实现矩形区域初筛。...利用Haversine公式计算中心点和矩形区域内每个坐标点距离,进行第二阶段过滤操作,筛选出最终符合条件的docId集合。方案虽然简单,但是毕竟实现了geo_distance的能力。

    1.5K30

    使用Redis实现附近的人及打车服务

    : 当一组经纬度值都编完码后,我们再把它们的各自编码值组合在一起,组合的规则是:最终编码值的偶数位上依次是经度的编码值,奇数位上依次是纬度的编码值,其中,偶数位从0开始,奇数位从1开始。...刚计算的经纬度(116.37,39.86)各自编码值11010、10111,组合后,第0位是经度的第0位1,第1位是纬度的第0位1,第2位是经度的第1位1,第3位是纬度的第1位0,以此类推,就能得到最终编码值...比如下图展示了北京 9 个区域的 GeoHash 字符串,分别是 WX4ER,WX4G2、WX4G3 等,每一个字符串代表了某一矩形区域。...GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)。...GEORADIUS 使用输入的经度和纬度来决定中心点 指定成员的位置被用作查询的中心 使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。

    1.3K20

    利用Redis的Geo功能实现查找附近的位

    从3.2版本开始它开始提供了GEO能力,用来实现诸如附近位置、计算距离等这类依赖于地理位置信息的功能。...GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素的位置(经度和纬度) GEODIST 返回两个给定位置之间的距离...然后我们就可以借助于其他命令来进行地理位置的计算了。 有效的经度从-180 度到 180 度。有效的纬度从-85.05112878 度到 85.05112878 度。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。距离的单位和查询单位一致,非必选。...例如,我们在 cities:locs 中查找以(115.03,38.44)为中心,方圆200km的城市,结果包含城市名称、对应的坐标和距离中心点的距离(km),并按照从近到远排列。

    1.5K30

    Redis GeoHash核心原理解析

    小麦的计算思想很朴素,就是通过过滤的方法来减小参与计算的餐馆数目,从某种角度上讲,机机在使用索引技术。...但是对于空间上的一个点(二维,包括经度和纬度),如何排序呢?又如何索引呢?解决的方法很多,下文介绍一种方法来解决这一问题。...GeoHash算法 上文讲了GeoHash的计算步骤,仅仅说明是什么而没有说明为什么?为什么分别给经度和维度编码?为什么需要将经纬度两串编码交叉组合成一串编码?本节试图回答这一问题。...每个POI都有经纬度信息,用图1b的SQL语句在mySQL中建立了POI_spatial的表,其中lat和lng两个字段来代表纬度和经度。为后续分析方便起见,我人造了40万个POI数据。...根据这个思路我们执行SQl查询(图5)(注:经度或纬度每隔0.001度,距离相差约100米,由此推算出矩形左下角和右上角坐标),发现过滤后正好剩下两个POI。

    1.6K20

    利用Redis的Geo功能实现查找附近的位置

    从3.2版本开始它开始提供了GEO能力,用来实现诸如附近位置、计算距离等这类依赖于地理位置信息的功能。...GEO相关的命令如下: Redis 命令 描述 GEOHASH 返回一个或多个位置元素的 Geohash 表示 GEOPOS 从 key 里返回所有给定位置元素的位置(经度和纬度) GEODIST 返回两个给定位置之间的距离...然后我们就可以借助于其他命令来进行地理位置的计算了。 有效的经度从-180 度到 180 度。有效的纬度从-85.05112878 度到 85.05112878 度。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。 距离的单位和查询单位一致,非必选。...例如,我们在 cities:locs 中查找以(115.03,38.44)为中心,方圆200km的城市,结果包含城市名称、对应的坐标和距离中心点的距离(km),并按照从近到远排列。

    2.4K50

    一口气说出 4种 LBS “附近的人” 实现方式,面试官笑了

    ** 我们来分析一下,多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的“附近的人...2、利弊分析 利用GeoHash算法实现“附近的人”有一个问题,由于geohash算法将地图分为一个个矩形,对每个矩形进行编码,得到geohash字符串。...GEOADD:将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS:从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST:返回两个给定位置之间的距离; GEOHASH...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...ASC | DESC:从近到远返回位置对象元素 | 从远到近返回位置对象元素。 COUNT count:选取前N个匹配位置对象元素。

    1.5K30

    一口气说出 4种 “附近的人” 实现方式,面试官笑了!

    我们来分析一下,多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的“附近的人”...2、利弊分析 利用GeoHash算法实现“附近的人”有一个问题,由于geohash算法将地图分为一个个矩形,对每个矩形进行编码,得到geohash字符串。...GEOADD:将给定的位置对象(纬度、经度、名字)添加到指定的key; GEOPOS:从key里面返回所有给定位置对象的位置(经度和纬度); GEODIST:返回两个给定位置之间的距离; GEOHASH...距离的单位和用户给定的范围单位保持一致。 WITHCOORD:将位置对象的经度和维度也一并返回。...ASC | DESC:从近到远返回位置对象元素 | 从远到近返回位置对象元素。 COUNT count:选取前N个匹配位置对象元素。

    2.2K20

    redis常用命令和数据类型

    语法: geoadd key 经度 纬度 地名 经度 纬度 地名 ... ... 2、geopos:获取地理位置的坐标(经度,纬度) geopos key 地名 3、geodist:计算两个位置之间的距离...WITHCOORD: 将位置元素的经度和纬度也一并返回。 WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。...georadiusbymember 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点...来获取指定区间的个数 bitcount key start end bitop:可以进行符合操作,它可以对多个Bitmaps进行and,or,not,xor操作并将结果保存在destkey中 Redis 突然变慢了如何排查并解决...例如:20220526这天访问网站的用户id是:1、2、5、9 20220527这天访问网站的用户id是:0、1、4、9 计算出这两天都访问过网站的用户数量 and:与操作,都为1的时候才为1 or

    90710

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

    11101 00100 01111,这里的偶数为是从0开始的。...GeoHash编码的好处 查询复杂度高,通过计算位置的距离来查询与当前位置距离近的位置计算成本高,采用GeoHash编码后可以将二维坐标点转换为一维数据,进行排序,实现空间索引来进行查找。...但是如果现在不仅仅是三个位置,如果是几十万甚至是更多的位置,我们应该如何处理呢?如果还是求任意两个位置的欧式距离显然那是灾难性的。...而GeoHash对这些位置进行编码,通过前缀匹配,匹配度越高的位置就越相近,但是仔细想想如果两个位置被分到两个不同的矩形区域中,它们的匹配度很低,但是两个位置距离很近,比如下面的和红点距离近的绿点显然和红点是在一个矩形区域中...,而和红点匹配度高的显然是和它在一个矩形区域中的另外一个绿点,这样就尴尬了。

    3.5K20

    Polar坐标投影(C++)

    double lat) {         centerLongitude = lon;         centerLatitude  = lat;         //中心经纬度或仰角发生改变,必须重新计算经向和纬向的...90.0 : 270.0;         }         else {             //注:由于经向和纬向的球面距离不等(华南,经向>纬向),故点(1,1)与中心点(0,角不等45度,...(根据目标点的经向球面距离来计算,雷达南面和北面的值略有差别),与雷达仰角有关。  ...) / perDegreeX);     } /**  * 功能:获得屏幕坐标对应的纬度值(根据极坐标中心点的纬向球面距离来计算),与雷达仰角有关。  ...//8、获得极坐标中心点的经度     double  getCenterLongitude();     //9、获得极坐标中心点的纬度     double  getCenterLatitude()

    95210

    如何高效率地实现它?

    技术难点主要包括: 1)如何高效地进行两点距离的计算,对于高并发服务端来说,像上一节中的代码那样,一个一个计算,还是有点不高效; 2)如何高效地进行地理围栏的圈定(难道是把所有当前在线的用户,离我的距离都一一算一遍...Redis Geo模块的6个指令用途说明: 1)GEOADD:将给定的位置对象(纬度、经度、名字)添加到指定的key; 2)GEOPOS:从key里面返回所有给定位置对象的位置(经度和纬度); 3...距离的单位和用户给定的范围单位保持一致。 - WITHCOORD:将位置对象的经度和维度也一并返回。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。

    1.9K00
    领券