• 查询指定距离内的快递柜或者店铺


    背景:我们在淘宝购物时,选择了某个地址,有时会提示可以选择放到附近的快递柜子,这种是如何实现的呢?用redis geo api可以简单的实现该功能

    思路:1. 我们先将所有的快递柜子存到redis中,这些快递柜信息要包含经纬度

               

    /**
         * 
         * @param longitude 经度
         * @param latitude 维度 
         * @param content 地址信息
         */
    
        public void add(double longitude,double latitude,String content){
            GeoOperations<String, String> geoOperations = redisTemplate.opsForGeo();
            geoOperations.add(key, new Point(longitude, latitude), content);
        }

               2.根据用户的收货地址获取对应的经纬度

        //这个可以根据百度api获取,这里省略了

             3.通过redis查询用户收货地址经纬度为圆点,指定距离作为半径的圆内的快递柜子

             

    /**
         * 
         *  查询指定经纬度范围xxKm内的信息
         * @param longitude 经度
         * @param latitude 维度
         * @param distant 距离 单位km
         * @param limit  返回多少条数据
         * @return
         */
    
        public String getGeoradius(double longitude,double latitude,double distant,int limit){
            GeoOperations<String, String> geoOperations = redisTemplate.opsForGeo();
            Circle circle = new Circle(new Point(longitude,latitude), new Distance(distant, Metrics.KILOMETERS));
            RedisGeoCommands.GeoRadiusCommandArgs commandArgs = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().sortAscending().limit(limit);
            GeoResults<RedisGeoCommands.GeoLocation<String>> radius = geoOperations.radius(key, circle,commandArgs);
            for (GeoResult<RedisGeoCommands.GeoLocation<String>> geoResult : radius) {
                RedisGeoCommands.GeoLocation<String> geoResultContent = geoResult.getContent();
                String name = geoResultContent.getName();
                return name;
            }
            return null;
        }

     附加信息:

    public class RedisGeoSerivce {
        @Autowired
        private RedisTemplate<String,String> redisTemplate;
        private  final String key="location:box";
    //省略。。。。。
    }
  • 相关阅读:
    goj 来自不给标题的菜鸟出题组(巴什博弈+素数判定)
    goj 城市交通线(简单并查集)
    ACM_鸡兔同笼(二元一次方程)
    ACM_魔仙岛探险(深搜)
    ACM_螺旋填数
    ACM_开心消消乐
    构建工具是如何用 node 操作 html/js/css/md 文件的
    学习使用ExpressJS 4.0中的新Router
    请求时token过期自动刷新token
    Express的基本使用
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/15124912.html
Copyright © 2020-2023  润新知