Redis基于Geo的地理位置操作

package com.example.redis;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.domain.geo.Metrics;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
public class GEOTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test() {
        Map<String, Point> map = new HashMap<>();
        map.put("北京", new Point(116.403936, 39.915119));
        map.put("故宫", new Point(116.403414,39.924091));
        map.put("长城", new Point(116.024067,40.362639));
        redisTemplate.opsForGeo().add("city",map);

        // 获取坐标
        List<Point> position = redisTemplate.opsForGeo().position("city", "故宫");
        System.out.println(position);

        // 获取hash
        List<String> geoHash = redisTemplate.opsForGeo().hash("city", "故宫");
        System.out.println(geoHash);

        // 获取距离
        Distance distance = redisTemplate.opsForGeo().distance("city", "故宫", "长城", RedisGeoCommands.DistanceUnit.KILOMETERS);
        System.out.println(distance);

        // 通过经纬度查找附近
        Circle circle = new Circle(116.403936, 39.915119, Metrics.KILOMETERS.getMultiplier());
        RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs
                .newGeoRadiusArgs()
                .includeDistance()
                .includeCoordinates()
                .sortAscending()
                .limit(5);
        GeoResults results = redisTemplate.opsForGeo().radius("city", circle, args);
        System.out.println(results);

        // 通过地名查找
        Distance distance2 = new Distance(100, Metrics.KILOMETERS);
        GeoResults results2 = redisTemplate.opsForGeo().radius("city", "长城", distance2, args);
        System.out.println(results2);
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值