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


    背景:我们在淘宝购物时,选择了某个地址,有时会提示可以选择放到附近的快递柜子,这种是如何实现的呢?用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";
    //省略。。。。。
    }
  • 相关阅读:
    vue2.0 移动端,下拉刷新,上拉加载更多插件,修改版
    修改maven产生missing artifact错误
    程序的态度-一生想靠近的完美
    计算机中的存储
    Vue-router结合transition实现app前进后退动画切换效果
    js获取input上传图片装换为base64格式图片
    mongoose的基本操作
    vue路由跳转时判断用户是否登录功能
    Node.js学习笔记之文件上传
    推荐一个基于Vue2.0的的一款移动端开发的UI框架,特别好用。。。
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/15124912.html
Copyright © 2020-2023  润新知