• Redis根据中心点坐标和半径筛选符合的数据


    目录

    1.启动Redis​编辑

    2.导入maven依赖

    3.添加redis配置

    4.编写RedisService

    5.使用

    6.验证


    1.启动Redis

    2.导入maven依赖

    1. org.springframework.boot
    2. spring-boot-starter-data-redis

    3.添加redis配置

    1. spring.redis.host=127.0.0.1
    2. #Redis服务器连接端口
    3. spring.redis.port=6379
    4. #Redis服务器连接密码(默认为空)
    5. spring.redis.password=
    6. #连接超时时间(毫秒)
    7. spring.redis.timeout=30000

    4.编写RedisService

    1. package com.zsp.quartz.service.impl;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.data.geo.Circle;
    4. import org.springframework.data.geo.Distance;
    5. import org.springframework.data.geo.GeoResults;
    6. import org.springframework.data.geo.Point;
    7. import org.springframework.data.redis.connection.RedisGeoCommands;
    8. import org.springframework.data.redis.core.GeoOperations;
    9. import org.springframework.data.redis.core.RedisTemplate;
    10. import org.springframework.data.redis.core.ValueOperations;
    11. import org.springframework.stereotype.Service;
    12. import java.util.concurrent.TimeUnit;
    13. @Service
    14. public class RedisService {
    15. @Autowired
    16. private RedisTemplate redisTemplate;
    17. // 存入redis
    18. public void setValue(String key, String value) {
    19. ValueOperations valueOperations = redisTemplate.opsForValue();
    20. valueOperations.set(key, value);
    21. }
    22. // 从redis取值
    23. public String getValue(String key) {
    24. ValueOperations valueOperations = redisTemplate.opsForValue();
    25. return valueOperations.get(key);
    26. }
    27. // 存入redis带过期时间
    28. public void setValue(String key, String value, long expirationTimeInSeconds) {
    29. ValueOperations valueOperations = redisTemplate.opsForValue();
    30. valueOperations.set(key, value, expirationTimeInSeconds, TimeUnit.SECONDS);
    31. }
    32. /**
    33. * 添加地理位置信息,附加名字
    34. * @param key 存入redis的key
    35. * @param longitude 经度
    36. * @param latitude 纬度
    37. * @param member 附加值 这里附加了名字
    38. */
    39. public void addLocation(String key, double longitude, double latitude, String member) {
    40. Point point = new Point(longitude, latitude);
    41. GeoOperations geoOps = redisTemplate.opsForGeo();
    42. geoOps.add(key, point, member);
    43. }
    44. /**
    45. * 获取地理位置信息
    46. * @param key 存入redis的key
    47. * @param longitude 中心点经度
    48. * @param latitude 中心点纬度
    49. * @param radius 筛选半径
    50. * @return
    51. */
    52. public GeoResults> getLocationsInRadius(String key, double longitude, double latitude, double radius) {
    53. Point point = new Point(longitude, latitude);
    54. Distance distance = new Distance(radius);
    55. Circle circle = new Circle(point, distance);
    56. GeoOperations geoOps = redisTemplate.opsForGeo();
    57. return geoOps.radius(key, circle);
    58. }
    59. }

    5.使用

    1. @Autowired
    2. RedisService redisService;
    3. @Test
    4. void testForGeo(){
    5. redisService.addLocation("locations", 13.361389, 38.115556, "Paris");
    6. redisService.addLocation("locations", 13.4125, 39.523333, "Berlin");
    7. redisService.addLocation("locations", -0.127758, 51.507351, "London");
    8. GeoResults> locations = redisService.getLocationsInRadius("locations", 13.361389, 38.115556, 500000);
    9. for (GeoResult> location : locations) {
    10. System.out.println(location.getContent().getName());
    11. }
    12. }

    6.验证

    筛选半径单位:米,先存进去,再根据key和筛选半径取出符合条件的数据

  • 相关阅读:
    一文读透react精髓
    八、互联网技术——物联网
    实战——Linux调优命令1
    虹科分享 | 简单实用的CANopen介绍,看完你就明白了(1)
    Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能
    【css-banner图片自适应】
    用 docker 创建 jmeter 容器,能做性能测试?
    Vue前端项目安装及相关问题解决
    (八)MyBatis中参数的处理
    python实现矩阵转置
  • 原文地址:https://blog.csdn.net/m0_55627541/article/details/133773647