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)处理。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容