redis geo工具类
时间: 2023-09-10 10:10:55 浏览: 124
Redis Geo是Redis提供的一种地理位置信息存储与查询的工具。通过Redis Geo,用户可以轻易地存储和查询地理位置信息,比如地理坐标、距离计算、范围查询等。
下面是一个Redis Geo工具类的示例代码:
```
import redis
from typing import List, Tuple
class RedisGeo:
def __init__(self, host: str, port: int, db: int):
self.redis = redis.Redis(host=host, port=port, db=db)
def add_location(self, key: str, longitude: float, latitude: float, member_name: str):
self.redis.geoadd(key, longitude, latitude, member_name)
def get_location(self, key: str, member_name: str) -> Tuple[float, float]:
return self.redis.geopos(key, member_name)[0]
def get_distance(self, key: str, member1: str, member2: str, unit: str) -> float:
return self.redis.geodist(key, member1, member2, unit=unit)
def get_locations_in_radius(self, key: str, longitude: float, latitude: float, radius: float, unit: str) -> List[str]:
return self.redis.georadius(key, longitude, latitude, radius, unit=unit, withdist=True, withcoord=False, sortasc=True, count=None)
def get_locations_in_box(self, key: str, min_longitude: float, min_latitude: float, max_longitude: float, max_latitude: float) -> List[str]:
return self.redis.georadiusbymember(key, member_name, radius, unit=unit, withdist=True, withcoord=False, sortasc=True, count=None)
```
这个工具类封装了Redis Geo提供的常用操作,包括:
- add_location:添加地理位置信息
- get_location:获取地理位置坐标
- get_distance:获取两个地理位置的距离
- get_locations_in_radius:获取某个地理位置周围一定范围内的所有地理位置信息
- get_locations_in_box:获取某个地理位置周围一个矩形范围内的所有地理位置信息
使用时,只需创建一个RedisGeo对象,并调用相应的方法即可,示例如下:
```
redis_geo = RedisGeo(host='127.0.0.1', port=6379, db=0)
redis_geo.add_location('cities', 116.4074, 39.9042, 'Beijing')
redis_geo.add_location('cities', 121.4737, 31.2304, 'Shanghai')
redis_geo.add_location('cities', 113.2644, 23.1291, 'Guangzhou')
print(redis_geo.get_location('cities', 'Beijing'))
print(redis_geo.get_distance('cities', 'Beijing', 'Shanghai', 'km'))
print(redis_geo.get_locations_in_radius('cities', 116.4074, 39.9042, 2000, 'km'))
print(redis_geo.get_locations_in_box('cities', 110, 20, 120, 30))
```
这段代码将三个城市的地理位置信息存储在名为“cities”的Redis Geo Key中,并通过RedisGeo对象的方法获取了这些地理位置信息。
阅读全文