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";
    //省略。。。。。
    }
  • 相关阅读:
    【Oracle】子查询、伪列、分页查询、表连接
    【Oracle】dual、sysdate、systimestamp、单行(组)函数、sql执行顺序
    【Oracle】简介、简单查询、去重、排序
    【Java】注解的使用
    【Java】反射机制
    【Java】网络编程(NIO/BIO)
    【Java】枚举
    【Java】File操作
    【Java】多线程
    Hibernate 再接触 关系映射 一对一单向外键关联
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/15124912.html
Copyright © 2011-2022 走看看