Redis实现附近(Java)

603 阅读1分钟

用Redis来实现附近更加的简单(API的展示)

1.添加到redis

    /**
     * 加入到redis
     *
     * @param
     * @return void
     * @Author 叶秋
     * @Date 2019/12/31 17:47
     **/
    @Test
    public void one() {

     //   x 代表经度, y 代表纬度   “经度最大是180° 最小是0°纬度最大是 90° 最小是0°”
        redisTemplate.opsForGeo().geoAdd("广东软件科学园", new Point(113.435899, 23.163488), "公司");
        redisTemplate.opsForGeo().geoAdd("广东软件科学园", new Point(113.436595, 23.164119), "食堂");
        redisTemplate.opsForGeo().geoAdd("沐陂小学", new Point(113.397756, 23.153669), "家");


        System.out.println("结束");

    }

如图: 这个score 就是坐标的意思了。

2.从redis 中获取 已经加入进去的坐标

    /**
     * 从redis 中获取 已经加入进去的坐标
     *
     * @param
     * @return void
     * @Author 叶秋
     * @Date 2019/12/31 17:47
     **/
    @Test
    public void two() {

        List<Point> points = redisTemplate.opsForGeo().geoPos("沐陂小学", "家");
        System.out.println(points);

    }

结果如下图

3.两点之间距离

    /**
     * 两点之间距离
     *
     * @param
     * @return void
     * @Author 叶秋
     * @Date 2019/12/31 17:48
     **/
    @Test
    public void three() {
        // 默认以米 为单位
        Distance distance = redisTemplate.opsForGeo().geoDist("广东软件科学园", "公司", "食堂");
        System.out.println(distance);

        // 千米
        Distance distance1 = redisTemplate.opsForGeo().geoDist("广东软件科学园", "公司", "食堂", RedisGeoCommands.DistanceUnit.KILOMETERS);
        System.out.println(distance1);
    }

结果还是很满意的,我觉得精确度可以。

4.定一个点, 查找半径内的 点,并列出距离

    /**
     * 定一个点, 查找半径内的 点,并列出距离
     * @Author 叶秋
     * @Date 2019/12/31 18:06
     * @param
     * @return void
     **/
    @Test
    public void four(){
        // 定一个点,并定好单位(默认米)
        Circle circle = new Circle(113.435710,23.163335, Metrics.MILES.getMultiplier());
        // 调用API
        RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().
                includeDistance().includeCoordinates().sortAscending().limit(5);
        GeoResults<RedisGeoCommands.GeoLocation<String>> results = redisTemplate.opsForGeo().geoRadius("广东软件科学园",
                circle,args);
        System.out.println(results);
    }

我就定在了公司附近,距离公司25米左右,距离食堂125米左右。结果满意