当前位置: 首页 > news >正文

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

目录

1.启动Redis​编辑

2.导入maven依赖

3.添加redis配置

4.编写RedisService

5.使用

6.验证


1.启动Redis

2.导入maven依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3.添加redis配置

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

4.编写RedisService

package com.zsp.quartz.service.impl;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;// 存入redispublic void setValue(String key, String value) {ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();valueOperations.set(key, value);}// 从redis取值public String getValue(String key) {ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();return valueOperations.get(key);}// 存入redis带过期时间public void setValue(String key, String value, long expirationTimeInSeconds) {ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();valueOperations.set(key, value, expirationTimeInSeconds, TimeUnit.SECONDS);}/*** 添加地理位置信息,附加名字* @param key 存入redis的key* @param longitude 经度* @param latitude  纬度* @param member   附加值 这里附加了名字*/ public void addLocation(String key, double longitude, double latitude, String member) {Point point = new Point(longitude, latitude);GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();geoOps.add(key, point, member);}/*** 获取地理位置信息* @param key 存入redis的key* @param longitude 中心点经度* @param latitude  中心点纬度* @param radius 筛选半径* @return*/public GeoResults<RedisGeoCommands.GeoLocation<String>> getLocationsInRadius(String key, double longitude, double latitude, double radius) {Point point = new Point(longitude, latitude);Distance distance = new Distance(radius);Circle circle = new Circle(point, distance);GeoOperations<String, String> geoOps = redisTemplate.opsForGeo();return geoOps.radius(key, circle);}
}

5.使用

 @AutowiredRedisService redisService;@Testvoid testForGeo(){redisService.addLocation("locations", 13.361389, 38.115556, "Paris");redisService.addLocation("locations", 13.4125, 39.523333, "Berlin");redisService.addLocation("locations", -0.127758, 51.507351, "London");GeoResults<RedisGeoCommands.GeoLocation<String>> locations = redisService.getLocationsInRadius("locations", 13.361389, 38.115556, 500000);for (GeoResult<RedisGeoCommands.GeoLocation<String>> location : locations) {System.out.println(location.getContent().getName());}}

6.验证

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

http://www.lryc.cn/news/191404.html

相关文章:

  • springboot 集成 zookeeper 问题记录
  • java中的接口interface
  • 多个git提交,只推送其中一个到远程该如何处理
  • uniapp中input的disabled属性
  • Jmeter连接mysql数据库详细步骤
  • Xcode 14.3.1build 报错整理
  • TensorFlow入门(十三、动态图Eager)
  • 批量执行insert into 的脚本报2006 - MySQL server has gone away
  • 翻译docker官方文档(残缺版)
  • PySpark 概述
  • 『heqingchun-ubuntu系统下Qt报错connot find -lGL解决方法』
  • 代码整洁之道:程序员的职业素养(十六)
  • OSPF的原理与配置
  • uni-app : 生成三位随机数、自定义全局变量、自定义全局函数、传参、多参数返回值
  • EF core 如何撤销对对象的更改
  • 以字符串mark作为分隔符,对字符串s进行分割
  • c++day6(菱形继承、虚继承、多态、模板、异常)
  • 外卖跑腿系统开发的最佳实践和成功案例
  • python中的range()函数详解
  • 【taro react】 ---- 常用自定义 React Hooks 的实现【四】之遮罩层
  • 【git】git命令行
  • centos8 jenkins 搭建和使用
  • Hive实战(03)-深入了解Hive JDBC:在大数据世界中实现数据交互
  • SQL开发笔记之专栏介绍
  • 华为OD机考算法题:找终点
  • el-table通过scope.row获取表格每列的值,以及scope.$index
  • uni-app:本地缓存的使用
  • 在Scrum敏捷开发中,开发人员(Developers)的职责
  • SOLIDWORKS® 2024 新功能 - 3D CAD
  • 系统架构设计:20 论软件需求管理