zoukankan      html  css  js  c++  java
  • Redis GEO 地理位置


    Redis 3.2版本新增GEO(地理位置)。

    GEO指令

    GEOADD

    命令:GEOADD key longitude latitude member [longitude latitude member ...]

    命令描述:将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。

    返回值:添加到sorted set元素的数目,但不包括已更新score的元素。

    时间复杂度:O(log(N))

    GEODIST

    命令:GEODIST key member1 member2 [unit]

    命令描述:

    返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。指定单位的参数 unit 必须是以下单位的其中一个:

    • m 米
    • km 千米
    • mi 英里
    • ft 英尺

    时间复杂度:O(log(N))

    GEOPOP

    命令:GEOPOS key member [member ...]

    命令描述:从key里返回所有给定位置元素的位置(经度和纬度)。

    返回值:GEOPOS 命令返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度, 而第二个元素则为给定位置元素的纬度。当给定的位置元素不存在时, 对应的数组项为空值。

    时间复杂度:O(log(N))

    GEOHASH

    命令:GEOHASH key member [member ...]

    命令描述:返回一个或多个位置元素的 Geohash 表示。通常使用表示位置的元素使用不同的技术,使用Geohash位置52点整数编码。由于编码和解码过程中所使用的初始最小和最大坐标不同,编码的编码也不同于标准。此命令返回一个标准的Geohash

    返回值:一个数组, 数组的每个项都是一个 geohash 。 命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。

    时间复杂度:O(log(N))

    GEORADIUS

    命令:GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

    命令描述:

    以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。可以指定WITHDIST返回距离,WITHCOORD返回经纬度,WITHHASH返回geohash值。可以指定ASC或DESC,根据距离来排序。可以指定COUNT限定返回的记录数。

    时间复杂度:O(N+log(M)),N为指定半径范围内的元素个数,M为要返回的个数。

    GEORADIUSBYMEMBER

    命令:GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]

    命令描述:这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的。可以指定WITHDIST返回距离,WITHCOORD返回经纬度,WITHHASH返回geohash值。可以指定ASC或DESC,根据距离来排序。可以指定COUNT限定返回的记录数。

    时间复杂度:O(log(N)+M),N为指定半径范围内的元素个数,M为要返回的个数。

    指令补充

    删除操作

    Redis GEO 只有增查操作,没有删除指令,因为是使用zset保存对象,可以使用zrem删除。

    避免单集合数量过多

    通过设置多个key避免单集合数量过多。

    存储原理

    GEOADD存储原理

    内部使用有序集合zset存储,元素的score值是经纬度对应的52位geohash值,geohash以base32的方式编码。

    1. 参数提取和校验。
    2. 将经纬度转换为52位的geohash值作为score。
    3. 调用zadd指令存入member和score。

    GEOHASH精度问题

     Latitude的范围是:-90 到 +90
     Longitude的范围:-180 到 +180
     地球参考球体的周长:40075016.68米
    

  • 相关阅读:
    [省选联考 2020 A 卷] 组合数问题
    [HAOI2018]苹果树
    [集训队作业2013]城市规划
    多项式牛顿迭代
    多项式开方
    分治 FFT 模板的三种过法
    Graham 求静态凸包
    exp 初探
    HAOI2018 染色
    如何关闭wps热点,如何关闭wpscenter,如何关闭我的wps
  • 原文地址:https://www.cnblogs.com/ylty/p/11921006.html
Copyright © 2011-2022 走看看