zoukankan      html  css  js  c++  java
  • 查询指定距离内的快递柜或者店铺

    背景:我们在淘宝购物时,选择了某个地址,有时会提示可以选择放到附近的快递柜子,这种是如何实现的呢?用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";
    //省略。。。。。
    }
  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/15124912.html
Copyright © 2011-2022 走看看