• Python使用Redis计算经纬度距离


    1. 需要的库, redis。

    pip install redis
    
    • 1

    2. 连接Redis

    import redis
    
    
    class RedisCtrl(object):
        @staticmethod
        def connect(config):
            pool = redis.ConnectionPool(
                host=config['host'],
                db=config['db'],
                port=config['port'],
                password=config['password'],
            )
            return redis.StrictRedis(connection_pool=pool)
    
    rd = RedisCtrl.connect({
        "db": 1,
        "port": "6379",
        "password": "password",
        "host": "",
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    3. 把已知的地址经纬度导入到Redis中, 用于计算

    rd.geoadd(name="集合名称", values=["经度", "维度", "地址名称"])
    
    • 1
    • 一次添加多个位置values=[经度1, 维度1, 地址名称1, 经度2, 维度2, 地址名称2, 经度3, 纬度3, 地址名称3......]

    4. 查看已添加位置的经纬度

    result = rd.geopos("集合名称", "地址名称1", "地址名称2")
    print(result)  # [(地址1的经度, 地址1的维度), (地址2的经度, 地址2的维度)]
    
    • 1
    • 2
    • 如果未查到, 会返回None
      result = rd.geopos("集合名称", "错误名称1", "错误名称2")
      print(result)  # [None, None]
      
      • 1
      • 2

    5. 计算两地之间的距离

    rd.geodist("集合名称", "地址名称1", "地址名称2", unit="km")
    
    • 1
    • unit:距离的单位, 可选("m": 米, "km": 千米, "mi": 英里, "ft": 英尺), 默认值为m

    6. 搜索范围内的地址

    result = rd.georadius(name="集合名称", longitude="经度", latitude="维度", radius="半径距离", unit="半径单位",
                         sort='ASC', count=10, withdist=True, withcoord=True)
    print(result)    # [[b'地址名称', 距离, (经度, 维度)], [b'shanghai', 0.1774, (121.4813420176506, 31.235159732038248)]]
    
    • 1
    • 2
    • 3
    • sort: 排序方式, ASC由近到远, DESC由远到近。
    • count: 指定返回前几条数据。
    • withdist: 是否返回距离。
    • withcoord: 是否返回经纬度信息。
    • 注意, 返回的数据其中的地址名称是byte类型的, 使用时需要decode('utf-8)处理。

    原文链接:时光博客

  • 相关阅读:
    自动驾驶做“双碳”目标下的现实主义者
    英语六级-day4
    Metabase学习教程:入门-1
    放大镜-第12届蓝桥杯Scratch选拔赛真题精选
    注册公司资本认缴和实缴有何区别?
    腾讯云服务器99元一年?假的,阿里云是99元
    如何退出commit_message页面
    【AI视野·今日NLP 自然语言处理论文速览 第八十二期】Tue, 5 Mar 2024
    git快速入门!!! git的常用命令!!!
    【C++进阶】:C++11
  • 原文地址:https://blog.csdn.net/weixin_44649870/article/details/126668523