redis-RedisTemplate.opsForGeo 的geo地理位置及实现附近的人的功能

redis内部使用的是 zset 数据结构存储,如下

import cn.huawei.VideoApplication;
import cn.huawei.domain.Jingqu;
import cn.huawei.service.JingquService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.geo.*;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;@SpringBootTest(classes = VideoApplication.class)
public class Geo_test {@Autowiredprivate JingquService jingquService;@Autowiredprivate StringRedisTemplate stringRedisTemplate;public static final String REDIS_KEY="funplace";/*** 添加一个或多个地理位置到指定的Geo键中*/@Testpublic void test_0() {//mybatis-plus 查询出所有的景区数据List<Jingqu> list = jingquService.list();Stream<RedisGeoCommands.GeoLocation<String>> geoLocationStream = list.stream().map(jq -> {return new RedisGeoCommands.GeoLocation<String>(jq.getName(),new Point(Double.valueOf(jq.getLongitude()), Double.valueOf(jq.getLatitude())));});List<RedisGeoCommands.GeoLocation<String>> jingquList = geoLocationStream.collect(Collectors.toList());Long resultCount = stringRedisTemplate.opsForGeo().add(REDIS_KEY, jingquList);System.out.println(resultCount);}/*** 通过经纬度查找附近的景区,附近的5个景区,从近到远*/@Testvoid test_1() {Circle circle = new Circle(116.404272, 39.906277, Metrics.KILOMETERS.getMultiplier());RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(5);GeoResults<RedisGeoCommands.GeoLocation<String>> byxy = stringRedisTemplate.opsForGeo().radius(REDIS_KEY, circle, args);byxy.forEach(geoResult -> {System.out.println(geoResult);System.out.println();});}/*** 通过 某个key,地方 查找附近3km的10个景区*/@Testvoid test_2(){String k="天趣园";RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(10);GeoResults<RedisGeoCommands.GeoLocation<String>> radius = stringRedisTemplate.opsForGeo().radius(REDIS_KEY, k, new Distance(3, Metrics.KILOMETERS), args);radius.forEach(geoResult->{System.out.println(geoResult);System.out.println();});}/*** 计算两个成员之间的距离(默认以米为单位),距离单位可以是m、km、ml、ft,分别代表米、千米、英里和尺*/@Testvoid test_3(){Distance distance = stringRedisTemplate.opsForGeo().distance(REDIS_KEY, "太子林", "五色门", RedisGeoCommands.DistanceUnit.KILOMETERS);System.out.println("distance = " + distance.getValue());}/*** 获取指定成员的地理位置 坐标*/@Testvoid test_4(){//注意:GeoHash对二维经纬度坐标进行一维映射是有损的,通过映射再还原回的经纬度坐标和原始输入的经纬度坐标存在一定的误差。List<Point> position = stringRedisTemplate.opsForGeo().position(REDIS_KEY, "太子林", "五色门");position.forEach(p->{System.out.println(p);System.out.println();});}/*** 获取元素经纬度坐标经过geohash算法生成的base32编码值*/@Testvoid test_5(){List<String> hash = stringRedisTemplate.opsForGeo().hash(REDIS_KEY, "太子林", "五色门");System.out.println(hash);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/266890.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Typora快捷键设置详细教程(内附每个步骤详细截图)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

leetcode:860.柠檬水找零

题意&#xff1a;按照支付顺序&#xff0c;进行支付&#xff0c;能够正确找零。 解题思路&#xff1a;贪心策略&#xff1a;针对支付20的客人&#xff0c;优先选择消耗10而不是消耗5&#xff0c;因为5可以用来找零10或20. 代码实现&#xff1a;有三种情况&#xff08;代表三种…

蓝桥杯-灌溉

参考了大佬的解题思路&#xff0c;先遍历一次花园&#xff0c;找到所有的水源坐标&#xff0c;把它们存入 “水源坐标清单” 数组内&#xff0c;再读取数组里的水源坐标进行扩散。 #include <iostream> using namespace std; int main() {int n,m,t,r,c,k,ans0,list_i0;…

“内容+科技” 2023爱奇艺拿稳了“高质量增长”指南

“无论影视行业还是互联网行业&#xff0c;最难的时候应该是过去了&#xff0c;接下来我们要高质量增长。” 2023年5月10日&#xff0c;爱奇艺创始人、CEO龚宇在爱奇艺世界大会上给出了这样的判断。大半年之后&#xff0c;爱奇艺公布的2023年全年财报&#xff0c;最终诠释了高…

新闻网站封锁AI爬虫 AI与新闻媒体博弈继续

随着ChatGPT等新兴AI模型的兴起&#xff0c;它们所依赖的网络爬虫正面临来自全球主流新闻网站的大规模封锁。Richard Fletcher博士团队对十个国家主流新闻网站的统计发现&#xff0c;到2023年底&#xff0c;48%的网站屏蔽了OpenAI的爬虫&#xff0c;24%屏蔽了Google的爬虫。那么…

信号系统之快速傅里叶变换

1 使用复数DFT的实数DFT 本文的主题&#xff0c;如何使用 FFT 计算真正的 DFT&#xff1f; 由于 FFT 是一种用于计算复数 DFT 的算法&#xff0c;因此了解如何将实数 DFT 数据输入和输出复数 DFT 格式非常重要。图 12-1 比较了实数 DFT 和复数 DFT 存储数据的方式。实数 DFT …

深度伪造,让网络钓鱼更加难以辨别

网络钓鱼一直是安全领域的一个突出话题&#xff0c;尽管这类诈骗形式已经存在了几十年&#xff0c;依旧是欺诈攻击或渗透组织的最有效方法之一。诈骗分子基于社会工程原理&#xff0c;通过邮件、网站以及电话、短信和社交媒体&#xff0c;利用人性&#xff08;如冲动、不满、好…

【Leetcode】938. 二叉搜索树的范围和

文章目录 题目思路代码结论 题目 题目链接 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输入&#xff1a;root [10,5,15,3,7,null,18], low 7, high 15 输出&#xff1a;32 示例 2&#xff1a; 输入…

Spring的优点

1.方便解耦&#xff0c;简化开发 Spring就是一个容器&#xff0c;可以将所有对象创建和关系维护交给Spring管理。 2.AOP编程支持 面向切面编程&#xff0c;方便实现程序进行权限拦截&#xff0c;运行监控等功能。 3.声明式事务的支持 通过配置完成事务的管理&#xff0c;…

kotlin单例模式,4年小Android的心路历程

一、Java基础 我知道大家一定有很久都没有注意到这个点了&#xff0c;平时的工作应该也很少涉及到这些底层知识吧&#xff0c;但是这些东西很重要。如果是想要跳槽加薪或者是应对即将到来的面试&#xff0c;这些都是不可忽视的知识。 在这一点里&#xff0c;需要重视的点有&am…

【ArcGIS】基本概念-空间参考与变换

ArcGIS基本概念-空间参考与变换 1 空间参考与地图投影1.1 空间参考1.2 大地坐标系&#xff08;地理坐标系&#xff09;1.3 投影坐标系总结 2 投影变换预处理2.1 定义投影2.2 转换自定义地理&#xff08;坐标&#xff09;变换2.3 转换坐标记法 3 投影变换3.1 矢量数据的投影变换…

零基础学编程,中文编程工具之进度标尺构件的编程用法

零基础学编程&#xff0c;中文编程工具之进度标尺构件的编程用法 一、前言 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——…

基于深度学习的故障诊断入门学习路线—课程目录介绍

1、基于深度学习的故障诊断入门学习路线—课程目录介绍 2、口碑与评价&#xff1a; 2.1 来自某985硕士研究生 2.2 阳阳同学 2.3 小杰同学 2.4 2024.02.25直播课 3、欢迎大家跟着诊断之家老哥一起学习

CentOS安装GUI图形界面

CentOS安装图形界面 CentOS minimal环境安装图形界面。 列出所有可用的Environment Groups yum group list yum groupinfo "GNOME Desktop"选择GNOME Desktop软件包组进行安装 yum groupinstall -y GNOME Desktop1 如果要通过GUI配置网络需要安装Server with GU…

k8s-helm部署应用 19

Helm部署nfs-client-provisioner&#xff08;存储类&#xff09;&#xff1a; 预先配置好外部的NFS服务器 部署 Helm部署nginx-ingress应用&#xff1a; 添加下载ingress 拉取 解开并修改 部署 测试 回收 helm部署metrics-server&#xff1a; 清除之前的metrics部署 下载…

C语言标准库函数qsort( )——数据排序

大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是深度解剖C语言标准库函数 qsort()&#xff0c;qsort()函数他可以对任意类型的数据排序&#xff0c;博主会详细解释函数使用方法&#xff0c;以及使用快速排序的左右指针法模拟实现函数功能&#xff0c;这样的排…

Docker(运维工具)—— 学习笔记

快速构建、运行、管理应用的工具 一、安装docker 参考Install Docker Engine on Ubuntu | Docker Docs 二、快速入门 1、镜像和容器 docker镜像可以做到忽略操作系统的差异&#xff0c;跨平台运行&#xff0c;忽略安装的差异 当我们利用Docker安装应用时&#xff0c;Dock…

unity shaderGraph实例-物体线框显示

文章目录 本项目基于URP实现一&#xff0c;读取UV网格&#xff0c;由自定义shader实现效果优缺点效果展示模型准备整体结构各区域内容区域1区域2区域3区域4shader属性颜色属性材质属性后处理 实现二&#xff0c;直接使用纹理&#xff0c;使用默认shader实现优缺点贴图准备材质准…

C++——友元

目录 友元 友元函数 友元函数使用案例 友元类 友元 友元是C提供的一种突破封装&#xff08;突破类域&#xff09;的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;但破坏了封装&#xff0c;所以友元不宜多用。友元分为友元函数和友元类。 友元函数 友元…

仿牛客网项目---帖子详情功能的实现

这篇文章主要讲讲帖子详情功能。其实帖子详情功能简单来说就是你点进去可以看到文章&#xff0c;这就叫帖子详情功能。那接下来我讲讲我的这个项目是如何实现这个功能的。 首先写DAO层。 Mapper public interface DiscussPostMapper {List<DiscussPost> selectDiscussPo…