当前位置: 首页 > news >正文

Python使用Redis计算经纬度距离

1. 需要的库, redis。

pip install redis

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": "",
})

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

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

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

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

5. 计算两地之间的距离

rd.geodist("集合名称", "地址名称1", "地址名称2", unit="km")
  • 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)]]
  • sort: 排序方式, ASC由近到远, DESC由远到近。
  • count: 指定返回前几条数据。
  • withdist: 是否返回距离。
  • withcoord: 是否返回经纬度信息。
  • 注意, 返回的数据其中的地址名称是byte类型的, 使用时需要decode('utf-8)处理。

相关文章:

  • 可重入函数
  • ib课程北京国际学校哪里有?
  • 宠物保存服务市场现状及未来发展趋势分析
  • Three.js使用rotation旋转模型
  • 超越所有人的成就,牛顿的光芒也无法掩盖的天才数学巨人
  • C++11之智能指针
  • C++ | 高维数组、指针、返回指向数组的指针的函数
  • linux redis hash哈希 增删改查
  • OS | 【二 PV操作】强化阶段 —— 应用题
  • 超分辨率重建DRCN
  • C++ vector容器
  • 进程(fork()详解)
  • vue基础语法(上)
  • 李沐d2l(十一)--锚框
  • 一维差分数组
  • Android开源项目规范总结
  • Consul Config 使用Git做版本控制的实现
  • css选择器
  • Docker容器管理
  • ES10 特性的完整指南
  • interface和setter,getter
  • leetcode讲解--894. All Possible Full Binary Trees
  • redis学习笔记(三):列表、集合、有序集合
  • Vue 2.3、2.4 知识点小结
  • 飞驰在Mesos的涡轮引擎上
  • 基于HAProxy的高性能缓存服务器nuster
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 我从编程教室毕业
  • 用Canvas画一棵二叉树
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (zhuan) 一些RL的文献(及笔记)
  • (差分)胡桃爱原石
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (轉)JSON.stringify 语法实例讲解
  • .bat批处理出现中文乱码的情况
  • .NET DataGridView数据绑定说明
  • .NET MVC之AOP
  • .NET Reactor简单使用教程
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2023-年度总结]凡是过往,皆为序章
  • [383] 赎金信 js
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [android] 练习PopupWindow实现对话框
  • [AutoSar]工程中的cpuload陷阱(三)测试