码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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)处理。

    原文链接:时光博客

  • 相关阅读:
    基于SQL布尔盲注与联合查询的WEB渗透
    基因组坐标系统的 0-based 和 1-based(图文详解)
    Mybatis 一级缓存和二级缓存原理区别 (图文详解)
    Linux常用命令整理
    解决VMware虚拟机更新17.5.0版本后,启动虚拟机导致电脑重启的问题。(建议收藏)
    行业追踪,2023-10-24
    AI游戏设计的半年度复盘;大模型+智能音箱再起波澜;昇思大模型技术公开课第2期;出海注册经验分享;如何使用LoRA微调Llama 2 | ShowMeAI日报
    JavaEE-操作系统
    git 新手教程
    1.django部署(案例)
  • 原文地址:https://blog.csdn.net/weixin_44649870/article/details/126668523
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号