当用户登录应用时,或者保持用户登录后用户在使用应用时,客户端是可以时刻获取用户位置信息的(前提是用户要开启位置获取的权限),客户端获取到最新的地理位置后,上传到后端服务器进行更新。...将所有方格的编码值映射到一维空间,相邻方格GeoHash编码值也接近: 所以,使用Sorted Set范围查询得到的相近编码值,在实际地理空间也是相邻方格,即可实现LBS应用“附近的人”。...编码值0111、1000两方格就相距较远: 所以,为避免查询不准确,可同时查询给定经纬度所在的方格周围的4或8个方格。...即这个矩形区域内所有的点(经纬度坐标)都共享相同的 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体点),又容易做缓存。...GEORADIUS 使用输入的经度和纬度来决定中心点 指定成员的位置被用作查询的中心 使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。
)为中心,搜索半径为100千米范围内的位置,并返回最多5个结果以及与中心位置的距离。...WITHCOORD:返回位置的经度和纬度。WITHDIST:返回位置与查询点的距离。ASC|DESC:按距离升序或降序排序。COUNT count:返回最多指定数量的结果。..., 37.502669)为中心,半径为100千米范围内进行搜索,并返回最多5个结果以及与查询点的距离。...,以(15.087269, 37.502669)为中心,半径为100千米范围内进行搜索,并将结果存储到名为results的新键中。...这些地理信息命令允许在Redis中存储和处理地理位置数据,包括添加地理位置、计算距离、获取地理哈希值、获取经度和纬度、搜索附近的位置等操作。这些命令提供了方便而强大的功能,可以在各种应用场景中使用。
)为中心,搜索半径为100千米范围内的位置,并返回最多5个结果以及与中心位置的距离。...WITHCOORD:返回位置的经度和纬度。 WITHDIST:返回位置与查询点的距离。 ASC|DESC:按距离升序或降序排序。 COUNT count:返回最多指定数量的结果。..., 37.502669)为中心,半径为100千米范围内进行搜索,并返回最多5个结果以及与查询点的距离。...,以(15.087269, 37.502669)为中心,半径为100千米范围内进行搜索,并将结果存储到名为results的新键中。...这些地理信息命令允许在Redis中存储和处理地理位置数据,包括添加地理位置、计算距离、获取地理哈希值、获取经度和纬度、搜索附近的位置等操作。这些命令提供了方便而强大的功能,可以在各种应用场景中使用。
MongoDB将位置字段中的二维坐标解释为点,并且可以将这些点编入特殊索引类型以支持基于位置的查询。地理空间索引提供特殊的地理空间查询操作。...有关查询存储在地理空间索引中的数据的信息,请参阅使用2d索引查询地空间。 存储位置数据 要使用2d地理空间索引,您必须在预定的二维坐标系(例如经度和纬度)上对位置数据建模。...没有定义具有这种无效点的地理空间查询的行为。 在创建2d索引时,MongoDB提供了以下选项: 位置范围 所有2d地理空间索引都有由坐标范围定义的边界。...使用 bucketSize的参数ensureIndex)(确定接近。甲 bucketSize的5创建组位置的值是5个单位指定的经度和纬度的范围内的索引。 bucketSize还决定索引的粒度。...Geohash值 要创建地理空间索引,MongoDB会计算 指定范围内坐标对的geohash值,并为该点的地理散列编制索引。 要计算geohash值,请连续将2D地图划分为象限。
语法: geoadd key 经度 纬度 地名 经度 纬度 地名 ... ... 2、geopos:获取地理位置的坐标(经度,纬度) geopos key 地名 3、geodist:计算两个位置之间的距离...单位可以是:m、km、mi(英里)、ft(英尺) geodist key 地名1 地名2 单位 4、georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。...这个选项主要用于底层应用或者调试, 实际中的作用并不大。 COUNT: 指定半径范围内显示的目标数量(半径内有100个,可以只显示50个) ASC: 查找结果根据距离从近到远排序。...DESC: 查找结果根据从远到近排序 5、georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。...georadiusbymember 和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点
前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点。明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了。赶紧去查相关的技术选型。经过一番折腾,终于在晚上十点完成了这个需求。...GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素 GEOADD 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中 GEORADIUSBYMEMBER 找出位于指定范围内的元素...2.1 写入地理信息 那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的GEOADD将这些地理信息转换为 52 位的Geohash写入Redis。...2.2 统计单位半径内的地区 我们可以借助于GEORADIUS来找出以给定经纬度,某一半径内的所有元素。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。 距离的单位和查询单位一致,非必选。
在基于ENVI的栅格遥感影像手动地理配准方法这篇文章中,我们介绍了在ENVI Classic 5.3 (64-bit) 软件中通过“Select GCPs: Image to Image”工具手动指定地面控制点...这一方法因为其地面控制点的寻找需要手动进行,所以较为不方便。本文就介绍一种在ENVI 5.3 (64-bit) 软件中,自动生成地面控制点,从而对遥感影像进行地理配准的方法。 ...这里需要注意,首先,如果大家待配准的两景遥感影像和本文中一样,即一景带有地理参考信息,而另一景不带有地理参考信息的话,就需要先手动选择至少3个地面控制点(这三个点就叫做“种子点”),随后软件将自动生成剩余的地面控制点...其次,如果大家待配准的两景遥感影像都含有地理参考信息,但是二者的空间差距比较大(比如其中一景空间拉伸严重),也需要先手动选择几个地面控制点作为种子点,随后软件将自动生成剩余的地面控制点;这样子可以提高地理配准的精度...此外的其他情况(即待配准的两景遥感影像均含有地理参考信息且空间差异不大),那么就可以不生成任何种子点,直接进入下一步。
前言 老板突然要上线一个需求,获取当前位置方圆一公里的业务代理点。明天上线!当接到这个需求的时候我差点吐血,这时间也太紧张了。赶紧去查相关的技术选型。经过一番折腾,终于在晚上十点完成了这个需求。...GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素 GEOADD 将指定的地理空间位置(纬度、经度、名称)添加到指定的 key 中 GEORADIUSBYMEMBER 找出位于指定范围内的元素...2.1 写入地理信息 那么如何实现目标单位半径内的所有元素呢?我们可以将所有的位置的经纬度通过上表中的GEOADD将这些地理信息转换为 52 位的Geohash写入Redis。...2.2 统计单位半径内的地区 我们可以借助于GEORADIUS来找出以给定经纬度,某一半径内的所有元素。...WITHCOORD 将位置元素的经度和维度也一并返回,非必选。 WITHDIST 在返回位置元素的同时, 将位置元素与中心点的距离也一并返回。距离的单位和查询单位一致,非必选。
Redis GEO 可以在需要处理地理位置数据的场景中使用,例如近邻查询、地理位置路由、基于地理位置的服务等。...使用 Redis GEO 可以高效地处理大量的地理位置数据 基本命令 geoadd 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。...geopos 从key里返回所有给定位置元素的位置(经度和纬度) geodist 返回两个给定位置之间的距离 georadius 以给定的经纬度为中心, 找出某一半径内的元素 georadiusbymember...找出位于指定范围内的元素,中心点是由给定的位置元素决定 geohash 返回一个或多个位置元素的 Geohash 表示 geoadd 命令 将指定的地理空间位置(纬度、经度、名称)添加到指定的key...georadiusbymember 命令 这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像
当用户登录应用时,或者保持用户登录后用户在使用应用时,客户端是可以时刻获取用户位置信息的(前提是用户要开启位置获取的权限),客户端获取到最新的地理位置后,上传到后端服务器进行更新。...即这个矩形区域内所有的点(经纬度坐标)都共享相同的 GeoHash 字符串,这样既可保护隐私(只表示大概区域位置而非具体点),又容易做缓存。...GEORADIUS 使用输入的经度和纬度来决定中心点 指定成员的位置被用作查询的中心 ?...使用GEOADD添加地理位置信息时,用标准格式的参数 x,y, 所以经度必须在纬度之前。这些坐标的限制是可以被编入索引的,区域面积可以很接近极点但是不能索引。...当在社交网站和其他大多数需要查询半径的应用中使用时,这些偏差都不算问题。但是,在最坏的情况下的偏差可能是 0.5%,所以一些地理位置很关键的应用还是需要谨慎考虑。 代码实战 更新坐标 ?
,左侧标识为0,右侧标识为 1,得出红点位置在纵向上的标识为 01; 将横向标识和纵向标识合并,规则为 纵向在奇数位,横向在偶数位 (也可纵横相反,但要在整个系统内保持一致),得出红点在方形纸上的标识为...如(116.276349, 40.040875)这个点的经度划分: 经度在 [-180,0) 范围内的标识为0,经度范围在 [0, 180) 度的标识为 1; 继续划分,经度范围在 [0,90) 的标识为...的地理点就是离 (116.276349, 40.040875)两米内的点。...如果我们把地理位置点和其GeoHash编码存入数据库的话,我们要查找 附近两米点的点,只需要限定条件 geo_code like '3OCO4XJ7%'就行了; 边界点问题 可是最简版的 GeoHash...此外,为了避免边界点问题,我们还需要把周围八个方格的 score 值范围也获取到。 我们在划分地图时,每多划分一次,会添加经度和纬度两个二进制位,在精度最高时,那么每一个方格的最大值和最小值之间差1。
朋友的定位,附近的人,位置共享,打车距离 redis在3.2就已经推出了geospatial!两地之间的距离,方圆几里的人!...都可以用它实现 这个需要把你所在地的经纬度输进去,我们可以在http://www.jsons.cn/lngcode/进行查询!...1、geospatial的六个命令 1.1、GEOADD 127.0.0.1:6379> geoadd china:city 39.90 116.40 beijing //添加地理位置(北京) (integer...beijing shanghai km "1067.3788" 1.4、GEOEADIUS 127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km //一一个点为中心查找半径范围内的城市...1.5、GEORADIUSBYMEMBER 127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 2000 km //找出指定位置周围的 1) "chongqing
它需要做以下两件事情: 1)所有使用该IM产品的人,在使用“附近的人”功能前提交自已的地理位置; 2)根据“我”的地理位置,计算出别人跟我的距离; 3)将第2步中计算出的距离由近及远,进行排序。...下面是一个简单的Java版实现: /** * 计算地球上任意两点(经纬度)距离 * * @param long1 第一点经度 * @param lat1 第一点纬度...geohashGetAreasByRadiusWGS84(xy[0], xy[1], radius_meters); //对中心点及其周围8个geohash网格区域进行查找,找出范围内元素对象...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格中的点(蓝点和红点)与中心点的距离,最终筛选出距离范围内的点...当我们根据输入半径和中心点位置计算出的能够覆盖目标区域的最高等级的九宫格(网格)时,就已经对九宫格外的元素进行了筛除。
geospatial(地理位置) 朋友的定位,附近的人,打车距离计算,主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。...添加地理位置 geoadd key 经度 纬度 城市名称[多个添加,经纬度城市名称循环] 两级(南极和北极)无法添加,一般通过程序导入 添加北京位置 ? 添加河北和上海位置 ?...以指定的经纬度为中心,找出某一半径内的元素 GEORADIUS key 维度 经度 半径长度 m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count...WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 WITHCOORD: 将位置元素的经度和维度也一并返回。...搜索经度110 维度30 附近1000km内的位置,或者2000米的位置 可以用于做附近的人,比如附近100m内的玩家XXX,感觉王者是不是这么做的 ?
3、详细设计 详细设计主要关注邻近位置算法,也就是,如何根据用户的地理位置寻找距其一定范围内的其他用户。...通过查找这个 KV 对及其周围 8 个网格的 KV 对,计算这些 value 内所有用户和当前用户的距离,就可以找到邻近 11 公里内的所有用户。...如此不断重复,可以在经度和纬度方向上,得到两个二进制数。这个二进制数越长,其所在的区间越小,精度越高。...但是在 Redis 中,需要面对更通用的地理位置计算场景,所以 Redis中的 GeoHash 并没有用 Hash 表存储,而是用跳表存储。...都展现了这一点。
默认为 10000,1000, 100, 10, 1,分别对应 c,l,i,h,f rsphere:设置投影的球的半径。默认为 6370997 m。...如果给定一个序列,前两个参数作为椭球的半径 ellps:椭球名,比如 ‘WGS84’。...关于设置边界框的例子及解释在 Basemap系列教程:管理投影 的 扩展 部分。...第一种方式是在地理学坐标中定义地图边界框来设置地图范围 参数 描述llcrnrlon地理坐标左下角经度llcrnrlat地理坐标左下角纬度urcrnrlon 地理坐标右上角经度urcrnrlat地理坐标右上角纬度...使用投影单元设置边界框 参数 描述llcrnrx 投影单元中左下角 x 坐标llcrnry投影单元中左下角 y 坐标 urcrnrx投影单元中右上角 x 坐标 urcrnry投影单元中右上角 y 坐标 通过设置地理坐标中的中心点
经度的范围在 (-180, 180],纬度的范围 在(-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为界,东正西负。...” 以用户为中心,给定一个 1000 米作为半径画圆,那么圆形区域内的用户就是我们想要邂逅的「附近的人」。...” 在圆形外套上一个正方形,根据用户经、纬度的最大最小值(经、纬度 + 距离),作为筛选条件过滤数据,就很容易将正方形内的「女神」信息搜索出来。 “多出来的一些区域咋办?...” 多出来的这部分区域内的用户,到圆点的距离一定比圆的半径要大,那么我们就计算用户中心点与正方形内所有用户的距离,筛选出所有距离小于等于半径的用户,圆形区域内的所用户即符合要求的附近的人。...在进行第一次二分区时,经度范围[-180,180]会被分成两个子区间:[-180,0) 和[0,180](我称之为左、右分区)。 此时,我们可以查看一下要编码的经度值落在了左分区还是右分区。
当在社交网站和其他大多数需要查询半径的应用中使用时,这些偏差都不算问题。但是,在最坏的情况下的偏差可能是0.5%,所以一些地理位置很关键的应用还是需要谨慎考虑。 2. 它是如何工作的?...1. geoadd 添加经纬元素 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。...这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点...以给定的经纬度为中心, 找出某一半径内的元素 Redis GEOADD 命令 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中 Redis GEORADIUSBYMEMBER 命令 找出位于指定范围内的元素...,中心点是由给定的位置元素决定
我们日常电脑美团或者饿了么点外卖,附近的商家几乎都是秒回的,最简单的理解,我们可以用经纬度来计算。 经纬度 谈到经纬度。想必大家在中学时代的地理课本里早就学过了。...地球是一个近乎标准的椭球体,它的赤道半径为6378.140千米,极半径为6356.755千米,平均半径6371.004千米。如果我们假设地球是一个完美的球体,那么它的半径就是地球的平均半径,记为R。...(相对地球半径而言),我们就可以把他们近似看成平面上的两点,可以用下面的公式计算距离: ?...如同我们的红箭头指的那个点,要找到它附近的点,是不是直接取出它所在的经纬度格子的所有点就可以了呢?再加上围绕它所在格子的八个格子的所有点,那就一定是这个点周围的所有点了! ?...在数据库中可以实现在一列上应用索引(某些情况下无法在两列上同时应用索引) 3.GeoHash表示的并不是一个点,而是一个矩形区域 4.GeoHash编码的前缀可以表示更大的区域。
领取专属 10元无门槛券
手把手带您无忧上云