/**
* 单个添加点
* @param key
* @param point
* @param name
*/
public void addGeoLocation(final String key, Point point, Object name) {
Long add = redisTemplate.opsForGeo().add(key, point, name);
}
/**
* 批量添加点
* @param key
* @param points
*/
public void addBatchGeoLocation(final String key, Map<Object, Point> points) {
Long add = redisTemplate.opsForGeo().add(key, points);
}
/**
* 获取全部点
* @param key
* @param member
* @return
*/
public List<Point> getGeoPoint(String key, Object... member) {
return redisTemplate.opsForGeo().position(key, member);
}
/**
* 获取附近点
*
* @param key 主键
* @param latitude 纬度
* @param longitude 经度
* @param distance 圈定范围
* @param metric 单位
* @return
*/
public GeoResults getNearGeoPoint(String key, Double latitude, Double longitude, Double distance, Metric metric, Long count) {
Point point = new Point(longitude, latitude);
Distance ds = new Distance(distance, metric);
Circle circle = new Circle(point, ds);
RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs()
//包含距离
.includeDistance()
//包含经纬度
.includeCoordinates()
//升序
.sortAscending()
.limit(count);
return redisTemplate.opsForGeo().radius(key, circle, args);
}
/**
* 获取两个点之间距离
*
* @param key
* @param members1
* @param members2
* @param metric
* @return
*/
public Distance getDistance(String key, Object members1, Object members2, Metric metric) {
if (Objects.isNull(metric)) {
metric = Metrics.KILOMETERS;
}
Distance distance = redisTemplate.opsForGeo().distance(key, members1, members2, metric);
return distance;
}
RedisTemplate操作Redis GEO 计算位置 距离
最新推荐文章于 2024-07-03 10:48:04 发布